[Spring] 6.MyBatis설정-SqlSessionFactory




MyBatis와 Mysql 연결



저번 장에서 DataSource를 설정하고 테스트했는데요~

이제는 DataSource를 이용하여 직접 저의 Mysql 서버와 MyBatis를 연결시키도록 하게습니다.

좀 더 정확하게 말하면 실질적으로 Mysql 서버와 MyBatis를 연결해주는건 SqlSessionFactory라는 객체입니다.

이 객체가 DataSource를 참조하여 MyBatis와 Mysql 서버를 연동시켜줍니다!


이번 장에서는 SqlSessionFactory 객체를 설정하고, MyBatis와 Mysql 서버의 연결을 테스트해보겠습니다.


SqlSessionFactory



SqlSessionFactory는 데이터베이스와의 연결과 SQL의 실행에 대한 모든 것을 가진 가장 중요한 객체입니다!

SqlSessionFactory를 생성해주는 특별한 객체를 먼저 설정해주어야하는데요~ 이때 SqlSessionFactoryBean이라는 클래스를 사용합니다!

root-context.xml에 다음과 같이 등록합니다


<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
</bean>



위의 코드를 보면 sqlSessionFactory가 DataSource를 참조하는 걸 볼 수 있습니다!


mybatis-config.xml 파일 추가



MyBatis는 SQL Mapping 프레임워크로 별도의 설정 파일을 가질 수 있습니다.

이를 이용하면 스프링의 설정과 별도로 사용하는 모든 MyBatis의 설정 기능을 활용할 수 있습니다.


우선 src/main/resources에 mybatis-config.xml 파일을 추가해주고,

다음과 같이 추가해줍니다!


<!-- mybatis-config.xml -->

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>



앞으로 Mybatis에 별도의 설정을 주고 싶으면 위의 파일을 이용하면 됩니다.


그리고 mybatis-config.xml 파일이 스프링이 동작할 때 같이 동작하도록 설정을 해주어야합니다.

root-context.xml의 sqlSessionFactory에 다음과 같이 configLocation 속성을 추가합니다!


<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <property name="configLocation" value="classpath:/mybatis-config.xml"></property>
</bean>




MyBatis 연결테스트




자 그러면 SqlSessionFactory를 이용해 MyBatis와 Mysql 서버가 제대로 연결되는지 테스트해보겠습니다~

src/test/java 폴더에 MyBatisTest라는 파일을 만들고 다음과 같이 작성합니다!


package io.github.kookyungmin;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

//Runner 클래스(테스트 메소드를 실행하는 클래스) 를 SpringJUnit4ClassRunner로 함
@RunWith(SpringJUnit4ClassRunner.class)
//location 속성 경로에 있는 xml 파일을 이용해서 스프링이 로딩됨
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/**/root-context.xml")

public class MyBatisTest {
	
	//SqlSessionFactory 객체를 자동으로 생성
	@Inject
	private SqlSessionFactory sqlFactory;
	
	//SqlSessionFactory 객체가 제대로 만들어졌는지 Test
	@Test
	public void testFactory() {
		System.out.println(sqlFactory);
	}
	
	//MyBatis와 Mysql 서버가 제대로 연결되었는지 Test
	@Test
	public void testSession() throws Exception{
		try(SqlSession session = sqlFactory.openSession()){
			System.out.println(session);
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}




image



잘 연결되었네요!