(it실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 &...

13
스프링프레임워크 & 마이바티스 (Spring Framework, 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; }//: }///~

Upload: 3-2

Post on 12-Apr-2017

239 views

Category:

Education


7 download

TRANSCRIPT

Page 1: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

스프링프레임워크 & 마이바티스

(Spring Framework, 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;

}//:

}///~

Page 2: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

<property name="dataSource">

<ref bean="dataSource"/>

</property>

</bean>

<bean id=“studentDao"

class="oraclejava.training.jdbc.StudentDao">

<property name="jdbcTemplate">

<ref bean="jdbcTemplate"/>

</property>

</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-

method="close" >

<property

name="driverClassName“><value>oracle.jdbc.driver.OracleDriver</value></property>

<property name="url“><value>jdbc:oracle:thin:@192.168.0.27:1521:onj</value></property>

<property name="username“><value>scott</value></property>

<property name="password“><value>tiger</value></property>

</bean>

4-3-1-1. Maven, Gradle에서 오라클 설정

그래들 설정

1. 메이븐 로컬 레포지터리에 오라클 JDBC Driver 설치를 위한 메이븐을 설치하자.

https://maven.apache.org/download.cgi 에서 binary zip 파일을 다운받자. (apache-maven-

3.3.3-bin.zip)

2. 적당히 압축을 풀자. (c\java\ 아래)

압축을 출고 bin 폴더를 홖경변수에서 path에 추가하자. (C:\java3\apache-maven-

3.3.3\bin)

3. Oracle JDBC Driver를 다운받자.

http://www.oracle.com/technetwork/apps-tech/jdbc-112010-090769.html (오라클 11g용

ojdbc6.jar)

Page 3: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

4. 다운받은 폴더에서 CMD로 도스창을 띄운 후 아래 명령을 실행하여 로컬 메이븐 레포지터

리에 저장하자.

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.4 -

Dpackaging=jar -Dfile=ojdbc6.jar -DgeneratePom=true

5. build.grdle을 작성

apply plugin : 'java'

apply plugin : 'application'

mainClassName = "onj.edu.jdbc.JdbcClient"

dependencies {

compile 'org.springframework:spring-context:4.2.4.RELEASE'

compile 'org.springframework:spring-jdbc:4.2.4.RELEASE'

runtime 'commons-dbcp:commons-dbcp:1.2.2'

runtime 'com.oracle:ojdbc6:11.2.0.4'

}

repositories {

mavenCentral()

mavenLocal()

}

메이븐 설정

<dependencies>

……

<!-- DBCP -->

<dependency>

<groupId>commons-dbcp</groupId>

<artifactId>commons-dbcp</artifactId>

<version>1.2.2</version>

</dependency>

<!-- ORACLE -->

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc6</artifactId>

<version>11.1.0.7.0</version>

</dependency>

……

Page 4: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

</dependencies>

<repositories>

<repository>

<id>oracle</id>

<name>ORACLE JDBCRepository</name>

<url>http://maven.jahia.org/maven2</url>

</repository>

</repositories>

4-3-1-2. 마리아DB 및 HeidiSQL 설치

1. https//download.mariadb.org에 접속 후 “Download 10.1.10 Stable Now!”를 클릭

2. 자신의 홖경에 맞는 파일을 다운로드 한다.

Page 5: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

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-ecommerce\mariadb-10.1.10-winx64\bin\mysq

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 이라는 서비스가 떠 있을 것이다.

Page 6: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

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을 설치하자.

Page 7: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

설치파일을 실행하면 HeidiSQL이 설치되며 실행한 후 신규 버튼을 클릭 후 root비번(“1111”)을 입

력하면 접속된다.

4-3-1-3. 간단한 Spring JDBC jdbcTemplate 예제

마리아DB에서 EMP 테이블의 데이터를 Spring JDBC의 JdbcTemplate을 이용하여 화

면에 출력하는 갂단한 예제를 작성해 보자.

Page 8: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

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 테이블 및 데이터를 생성하자.]

Page 9: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

create table emp

(

empno int(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;

Page 10: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

public class EmpDao {

private DataSource dataSource;

private JdbcTemplate jdbcTemplate;

public void setDataSource(DataSource dataSource) {

this.dataSource = dataSource;

this.jdbcTemplate = new JdbcTemplate(dataSource);

}

List getNames() {

String sql = "select * from emp";

return jdbcTemplate.queryForList(sql);

}

}

[src/main/resources/app-jdbc.xml]

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="EmpDao" class="jdbc.EmpDao">

<property name="dataSource">

<ref bean="dataSource" />

</property>

</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<property name="driverClassName">

<value>com.mysql.jdbc.Driver</value>

</property>

<property name="url">

<value>jdbc:mysql://localhost/jdbc1</value>

</property>

<property name="username">

<value>root</value>

Page 11: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

</property>

<property name="password">

<value>1111</value>

</property>

</bean>

</beans>

[JdbcClient.java]

package jdbc;

import org.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로그를 남긴다.

Page 12: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

//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(),

Page 13: (IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)

person.getLastName()

};

return jdbcTemplate.execute(sql, params);

}