Spring 3.2.x framework 내에는 Mybatis 연동 라이브러리가 포함 되어 있지 않다. (ibatis에 대한 연동 라이브러리는 포함 되어 있다.) 따라서 Spring 3.2.x 에서 Mybatis 를 사용 하려면 Github 에 있는 별도 라이브러리를 포함해야 한다. (http://mybatis.github.io/spring/) Maven 을 사용하는 경우에는 기본적으로 다음 Dependency 를 넣으면 Spring-Mybatis 연동 기능을 사용 가능하다. 1 <dependency>
2 <groupId>org.mybatis</groupId>
3 <artifactId>mybatis-spring</artifactId>
4 <version>1.2.2</version>
5 </dependency>
6 <dependency>
7 <groupId>org.mybatis</groupId>
8 <artifactId>mybatis</artifactId>
9 <version>3.2.5</version>
10 </dependency> |
위의 1~5 라인은 spring - mybatis 연동 모듈이고, 6~10 라인은 mybatis 그 자체이다. 물론 JDBC Driver 도 별도로 추가해야 한다. 만일 Maven을 사용하지 않는 경우에는 mybatis-x.x.x.jar 와 mybatis-spring-x.x.x.jar 를 Classpath에 추가해 주면 된다. 일반적으로 Mybatis 를 사용하는 순서는 다음과 같다. 1) mybatis configuration 생성 (일반적으로 configuration.xml) - mybatis context 정보 (ex. DB 접속 정보) 2) mapper xml 생성 (일반적으로 mapper.xml) - 실행할 SQL 정보 3) mapper interface 생성 (mapper xml 과 1:1 연동을 하는 Java Inteface) 4) mapper interface 를 호출하는 Java Application (주로 DAO 역할 수행) Spring 에서 Mybatis를 사용할 때에는 약간 순서가 바뀐다. 1) mybatis configuration 생성 (Mybatis 독립적으로 사용할 때 보다는 내용이 간소함. 나머지는 Spring context에서 관리) 2) mapper xml 생성 (위와 동일) 3) mapper interface 생성 (위와 동일) 4) Spring context 에 SqlSessionFactory 등록 5) Spring context 에 MapperFactoryBean 등록 6) mapper interface 를 사용하는 Spring Bean 에 앞의 5에서 생성한 Mapper bean 을 종속성 주입 (Dependency Injection) 이 순서에 따른 예제는 다음과 같다. 1) mybatis configuration (configuration.xml) 1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE configuration
3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
5 <configuration>
6 <settings>
7 <setting name="defaultExecutorType" value="REUSE"/>
8 <setting name="cacheEnabled" value="false"/>
9 <setting name="logImpl" value="LOG4J"/>
10 </settings>
11 <mappers>
12 <mapper resource="mybatis/mapper.xml"/>
13 </mappers>
14 </configuration> |
* 위의 12라인에 사용하는 mapper.xml 에 대한 정보를 입력한다. * 위의 예제에서는 DB 접속 정보가 없다. 이것은 Spring context에 등록된 Datasource 를 사용하기 위함이다. 아래의 3)에서 DB 접속 정보를 설정한다. 2) mapper.xml 1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper
3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 <mapper namespace="tkstone.test.mapping.Mapper1">
6 <insert id="insertA1"
7 parameterType="tkstone.test.param.A1"
8 flushCache="true" statementType="PREPARED"
9 >
10 insert into a1(col1, col2)
11 values(#{col1}, #{col2})
12 </insert>
13 </mapper> |
* Mybatis 만 사용할 때와 차이가 없음 3) mapper interface 1 package tkstone.test.mapping;
2
3 import tkstone.test.param.A1;
4
5 public interface Mapper1 {
6 public int insertA1(A1 param);
7 }
8 |
* Mybatis 만 사용할 때와 차이가 없음 4) Spring context에 SqlSessionFactory 등록 1 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
2 <property name="dataSource" ref="testDataSource" />
3 <property name="configLocation" value="classpath:mybatis/configuration.xml"/>
4 </bean> |
* SqlSessionFactoryBean 등록 시 DB 접속 정보 (Datasource) 및 Mybatis main config 정보를 등록함 * configLocation 에는 1)에서 생성한 Mybatis configuration 파일 경로를 설정 5) Spring context에 MapperFactoryBean 등록 (앞의 3)에서 생성한 Mapper1 interface에 대한 Factory) 1 <bean id="mapper1" class="org.mybatis.spring.mapper.MapperFactoryBean">
2 <property name="mapperInterface" value="tkstone.test.mapping.Mapper1" />
3 <property name="sqlSessionFactory" ref="sqlSessionFactory" />
4 </bean> |
* mapperInterface 에는 3)에서 생성한 Mapper interface 를 설정 * sqlSessionFactory 에는 4)에서 등록한 sqlSessionFactory를 설정. 이 값을 설정하지 않으면 "sqlSessionFactory" ID 값을 가진 Bean을 자동으로 설정 6) Spring Bean 에 mapper interface 주입 1 <bean id="myBean" class="tkstone.test.transaction.MyBean">
2 <property name="mapper1" ref="mapper1"/>
3 </bean> |
이렇게 하면 기본적으로 Spring 에서 Mybatis 를 이용하여 SQL을 실행할 수 있다. |