탑크리에듀교육센터(www.topcredu.co.kr)제공 15번째 스프링프레임워크 & 마이바티스(Spring Framework, MyBatis)자료입니다. Spring JDBC에서 DB 접근하는 방법, Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate, Maven, Gradle에서 오라클 설정에 대해 설명한 자료이니 많은 참고 바랍니다.
스프링프레임워크 & 마이바티스 (SpringFramework, MyBatis) 4-3. Spring JDBC에서 DB 접근하는 방법 JdbcTemplate : 젂형적인 Spring JDBC 접근법으로 SQL을 실행하며 자주 사용된다. NamedParameterJdbcTemplate : 젂형적인 JDBC의 ?(Placeholder) 대신에 이름있는 바인딩 파 라미터를 제공하기 위한 것이다. SimpleJdbcTemplate : JdbcTemplate + NamedParameterJdbcTemplate SimpleJdbcInsert : 최소한의 구성으로 Insert가 가능하도록 지원하며 DataSource를 가짂 클래 스를 인스턴스한 직후 withTableName 메소드를 불러 테이블 이름을 지정해야 한다. SimpleJdbcCall : 최소한의 설정으로 데이터베이스 내에 저장된 저장 프로시저, 함수 등을 호 출하도록 지원한다. SqlUpdate : 재사용 가능한 SQL DML(insert, update, dalete) 구문을 생성한다. StoredProcedure : RDB의 저장 프로시저에 대한 추상 수퍼 클래스, 다양한 execute 메소드를 제공한다. 4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate 모든 형태의 SQL 구문을 실행해서 원하는 결과 타입을 반홖한다. 스프링의 모든 데이터 접근 프레임워크는 템플릿 클래스를 포함하는데 이 경우 템플릿 클래 스는 JdbcTemplate 클래스이다. JdbcTemplate 클래스가 작업하기 위해 필요한 것은 DataSource 이며 스프링의 모든 DAO 템 플릿 클래스는 스레드에 안젂하기 때문에 애플리케이션 내의 각각의 DataSource에 대해서 하나의 JdbcTemplate 인스턴스만을 필요로 한다. public class StudentDao { private JdbcTemplate jdbcTemplate; public void setJdbcTeamplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; }//: }///~
3. 적당한 경로에압축을 풀고 bin 폴더로 가서 인스톨 하자.(관리자 권한으로 CMD 실행할 것, datadir : DB설치경로, service : 서비스이름, password : root 비밀번호) 압축푼경로bin>mysql_install_db --datadir=DB설치경로 --service=MySQL --password=1111 Running bootstrap 2016-05-02 9:45:28 7540 [Note] D:dev-ecommercemariadb-10.1.10-winx64binmysq ld.exe (mysqld 10.1.10-MariaDB) starting as process 7568 ... Removing default user Setting root password Creating my.ini file Registering service 'MySQL' Creation of the database was successfull 4. 원도우 서비스에 보면 MySQL 이라는 서비스가 떠 있을 것이다.
6.
5. 한글 사용을위해 DB설치경로 아래 my.ini 파일을 열어 수정하자. [mysqld] datadir= DB설치경로 [client] default-character-set = utf8 [mysqld] init_connect = SET collation_connection = utf8_general_ci init_connect = SET NAMES utf8 character-set-server = utf8 collation-server = utf8_general_ci [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 6. MySQL 서비스 시작 압축푼경로bin>sc start MySQL 7. DB에 접속해서 데이터 등을 확인하기 위해 클라이언트도 설치하자. http://www.heidisql.com/download.php에 접속하여 HeidiSQL을 설치하자.
7.
설치파일을 실행하면 HeidiSQL이설치되며 실행한 후 신규 버튼을 클릭 후 root비번(“1111”)을 입 력하면 접속된다. 4-3-1-3. 간단한 Spring JDBC jdbcTemplate 예제 마리아DB에서 EMP 테이블의 데이터를 Spring JDBC의 JdbcTemplate을 이용하여 화 면에 출력하는 갂단한 예제를 작성해 보자.
8.
STS에서 File -> New-> Project -> Spring Legacy Project Project name : jdbc1 Simple Spring Maven 선택 Finish 클릭 [마리아DB 및 데이터소스 사용을 위해 pom.xml에 다음 의존성을 추가] <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring-framework.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> <scope>runtime</scope> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> [HeidiSQL에서 jdbc1 이라는 데이터베이스와 EMP 테이블 및 데이터를 생성하자.]
9.
create table emp ( empnoint(4) not null auto_increment, ename varchar(50), sal int(4), primary key (empno) ) ENGINE=InnoDB; insert into emp(ename, sal) values ('1길동', 1000); insert into emp(ename, sal) values ('2길동', 2000); insert into emp(ename, sal) values ('3길동', 3000); [EmpDao.java] package jdbc; import java.util.List; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate;
</property> <property name="password"> <value>1111</value> </property> </bean> </beans> [JdbcClient.java] package jdbc; importorg.springframework.context.support.GenericXmlApplicationContext; import org.springframework.core.io.FileSystemResource; public class JdbcClient { public static void main(String[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("app-jdbc.xml"); ctx.refresh(); EmpDao e = (EmpDao)ctx.getBean("EmpDao"); System.out.println(e.getNames()); ctx.close(); } } 4-3-1-4. Spring JDBC 내부 콜백(PreparedStatementCreator, PreparedStatementSetter) PreparedStatementCreator //이 인터페이스는 다음과 같은 하나의 메소드를 제공한다. public PreparedStatement createPreparedStatement(Connection con) throws SQLException; //JdbcTemplate이 아래 클래스를 호출할 때 실행된 SQL로그를 남긴다.
12.
//SqlProvider는 getSql() 이라는메소드를 제공, SQL문자열을 JdbcTemplate에서 사용가능하도록 제공한다. public class InsertPersonStatementCreator implements PreparedStatementCreator, SqlProvider { private String sql = “INSERT INTO ( id, firstname, lastname) VALUES ( ? , ? ?)”; public PreparedStatement createPreparedStatement(Connection con) .. return con.preparedStatement(sql); }//: public String getSql() { return sql; } } PreparedStatementSetter //이 인터페이스는 SQL 파라미터를 Setting하는 메소드를 제공한다. void setValues(PreparedStatement ps) throws SQLException; private Person person; public void setVales(PreparedStatement ps) throws SQLException { ps.setInt (1, person.getId().intValue()); ps.setString (2, person.getFirstName()); ps.setString (3, person.getLastName()); } … 4-3-1-5. jdbcTemplate의 execute 메소드 대개 SQL문자열로 부터 PreparedStatement를 생성하고 파라미터를 바인딩 하는 작업을 많이 하므로 JdbcTemplate은 execute 메소드를 제공한다. 주로 DDL 처리용으로 아래와 같은 경우 백그라운드에서 JdbcTemplate이 PreparedStatement 와 PreparedStatementSetter를 생성 시킨다. public int insertPerson(Person person) { String sql = “insert into person (id, firstname, lastname) values (?,?,?)”; Object[] params = new Object[] { person.getId(), person.getFirstName(),