`
업데이트 :: 2018.11.13
Mapper Injection
- 데이터접근객체인 DAO를 만드는 것보다 직접 "SqlSessionTemplate" 혹은 "SqlSessionDaoSupport를" 사용
- 마이바티스 스프링연동모듈은 다른 빈에 직접 주입할 수 있는 스레드 안전한 매퍼를 생성가능
<bean id="fooService" class="org.mybatis.spring.sample.mapper.FooServiceImpl"> <property name="userMapper" ref="userMapper" /> </bean>
public class FooServiceImpl implements FooService { private UserMapper userMapper; // injection public void setUserMapper(UserMapper userMapper) { // injection this.userMapper = userMapper; } public User doSomeBusinessStuff(String userId) { return this.userMapper.getUser(userId); } }
Mapper 등록
- mapper 등록 2가지 방법
- xml 설정사용
- mapper는 xml 설정파일에 MapperFactoryBean을 두는 것으로 스프링에 등록
- java 설정사용
- 스프링의 Java Config 기능을 사용하면 SqlSessionTemplate에서 직접 매퍼를 얻음
- xml 설정사용
xml 설정
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean>
java 설정
@Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean(); sqlSessionFactory.setDataSource(dataSource()); return (SqlSessionFactory) sqlSessionFactory.getObject(); } @Bean public UserMapper userMapper() throws Exception { SqlSessionTemplate sessionTemplate = new SqlSessionTemplate(sqlSessionFactory()); return sessionTemplate.getMapper(UserMapper.class); }
Mapper 검색
- <mybatis:scan/> 엘리먼트 사용
- @MapperScan 어노테이션 사용
- 스프링 xml 파일을 사용해서 MapperScannerConfigurer 등록
<mybatis:scan/>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mybatis="http://mybatis.org/schema/mybatis-spring" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd"> <mybatis:scan base-package="org.mybatis.spring.sample.mapper" /> </beans>
- <mybatis:scan/>은 스프링에서 제공하는 <context:component-scan/> 와 유사한 방법으로 매퍼 검색
- base-package 속성은 매퍼 인터페이스 파일이 있는 가장 상위 패키지를 지정
- 자동으로 주입할 수 있는 MapperFactoryBean을 생성, SqlSessionFactory 혹은 SqlSessionTemplate을 명시하지 않음
- 한개 이상의 DataSource를 이용한다면 자동주입이 생각처럼 동작하지 않음
- factory-ref 혹은 template-ref를 이용해서 처리할 수 있음
@MapperScan
@Configuration @MapperScan("org.mybatis.spring.sample.mapper") public class AppConfig { @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder().addScript("schema.sql").build() } @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); return sessionFactory.getObject(); } }
- <mybatis:scan/>과 동일하게 동작
- markerInterface 혹은 annotationClass 프로퍼티를 사용해서 마커 인터페이스와 애노테이션 클래스를 명시
MapperScannerConfigurer
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="org.mybatis.spring.sample.mapper" /> </bean>
- 평범한 빈처럼 xml 애플리케이션 컨텍스트에 포함된 BeanDefinitionRegistryPostProcessor
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
- sqlSessionFactory 혹은 SqlSessionTemplate을 지정할 필요가 있다면 빈참조가 아닌 빈이름이 필요
- value : 프로퍼티 빈 이름을 지정
- ref : 빈 참조를 지정하기 때문에 value 프로퍼티 사용
Created by MoonsCoding
e-mail :: jm921106@gmail.com`
반응형
'Spring > MyBatis' 카테고리의 다른 글
학습 // Spring // MyBatis // Transaction (0) | 2018.11.13 |
---|---|
학습 // Spring // MyBatis // SqlSessionFactory (0) | 2018.11.13 |
학습 // Spring // MyBatis // SqlSession (0) | 2018.11.13 |
학습 // Spring // MyBatis // 개념 // 설정 (0) | 2018.10.30 |