마이 바티스 사용하기
Mybatis는 좀 더 간편하게 sql을 처리할 수 있게 해준다.
Connection을 자동으로 close하게 해주고 내부적으로 PreraredStatement처리를 해준다.
또 #{prop}과 같이 속성을 지정하면 자동으로 처리해준다.
마지막으로 리턴 타입을 지정하면 자동으로 객체를 생성하고 ResultSet을 처리해준다.
이 Mybatis를 사용하기 위해서 Mybatis라이브러리를 추가하고
이를 Spring과 연동하기 위해 Mybatis-Spring라이브러리도 추가해줘야 한다.
또 Spring에서 db처리와 트랜잭션 처리를 위해 spring-jdbc와 spring-tx라이브러리를 추가해야한다.
1) pom.xml 설정
tx는 트랜잭션의 약자.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
2) Mybatis의 SQLSessionFactory 빈 등록
빈 등록을 위해 root-context.xml에 SQLSessionFactory 설정을 해줘야한다.
SQLSessionFactoryBean는 위에서 설정한 dataSource를 참조한다.
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:XE"></property>
<property name="username" value="book_ex2"></property>
<property name="password" value="1234"></property>
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
<property name="dataSource" ref="dataSource"></property>는 아래 코드와 같다.
SQLSessionFactoryBean sqlSessionFactory = new SQLSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
SqlSessionFactory는 인터페이스이다.
그래서 @Autowired를 통해 SqlSessionFactoryBean을 주입받아야한다.
위(root-context.xml)에서 빈으로 등록된 SqlSessionFactoryBean을 주입하면 된다.
아래 코드와 같이 @Autowired를 통해 주입받았다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class DataSourceTests {
@Autowired
private SqlSessionFactory sessionFactory;
@Test
public void testMybatis() {
try(SqlSession session = sessionFactory.openSession();
Connection conn = session.getConnection()) {
log.info(session);
log.info(conn);
} catch (Exception e) {
fail(e.getMessage());
}
}
}
성공적으로 session과 conn을 출력했다.