본문 바로가기

Spring/mybatis

mapper 등록 두 가지 방법

SqlSessionFactoryBean

스프링과 mybatis 결합되었을때, SqlSessionFactoryBean을 통해 SqlSessionFactory객체를 생성한다.

 

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

SqlSessionFactory를 설정할땐 두가지의 필수 프로퍼티가 필요한데, DataSource와 configLocation이다. 

JDBC DataSource를 참조하여 MyBatis와 database서버를 연동시켜주고,

configLocation을 참조하여 Configuration.xml 에 있는 변경된 mybatis설정을 반영한다.

 

스프링에선 SqlSessionFactory를 생성해주는 SqlSessionFactoryBean 객체를 먼저 설정하여야 한다

 

mapper 등록

dao객체는 SqlSessionTemplate객체를 의존하여 SqlSessionFactory에 등록된 사용하고자하는 mapper를

찾아 db에 접근한다. ( SqlSessionTemplate은 SqlSessionFactory를 인자로 받아 생성할 수 있다.)

그렇기 때문에 SqlSessionFactory에 mapper를 등록해줘야하는데 여기에는 두 가지 방법이 있다. 

첫번째는 마이바티스 설정파일(Configuration.xml 파일)에 <mappers> 섹션을 사용해서 XML파일의 클래스패스를 지정하는 것이다. 두번째는 팩토리 빈의 mapperLocations 프로퍼티를 사용하는 것이다.

 

1. <mapper> 이용

 servlet-context.xml 에서 SqlSessionFactoryBean 빈 설정/등록

DataSource 빈 등록
DataSource와 Configuration.xml의 로케이션을 필수 프로퍼티로 주어 SqlSessionFactoryBean 빈 등록
SqlSessionFactoryBean객체를 매개로해야 SqlSessionTemplate객체를 생성한다.(dao가 의존하는 객체)

위에서 configLocation으로 정의한 Configuration.xml에서 <mapper>를 이용하여 매퍼를 등록한다.

resource 에는 메퍼의 경로가 들어간다.

 

2. 팩토리 빈의 mapperLocations 프로퍼티를 사용

우선 빈등록을 할 수 있는 Spring Bean Configuration File을 만든다.

첫번째 방법에서 했던 servlet-context파일에서 별도로 SqlSessionFactoryBean의 빈등록을 해줬던거와는 달리

밑에서처럼 bean Configuration 파일에서 한번에 할 수 있다. 

<property>를 통해서 datasource와 configLocation 프로퍼티로 줄 수 있다.

또 name="mapperLocations"로 주고 매퍼의 클래스패스를 주면 간단하게 매퍼로 등록할 수 있다.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" />
  <property name="configLocation" value="classpath:/sqlmap/mybatisConfig.xml" />     
</bean>

 

여러개의 매퍼를 등록할때

<list>를 이용

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<property name="mapperLocations">
	<list>                
		<value>classpath:/sqlmap/session/SessionMenu.xml</value>
		<value>classpath:/sqlmap/session/SessionScreen.xml</value>
		<value>classpath:/sqlmap/session/SessionUser.xml</value>
	</list>
	</property> 
	<property name="configLocation" value="classpath:/sqlmap/mybatisConfig.xml" />     
</bean>

 

 

 

 

참조

 https://mybatis.org/spring/ko/factorybean.html

https://juntcom.tistory.com/42