728x90
반응형

Spring - Mybatis 에서 SQL을 실행 하려면 크게 다음 2가지 방법을 사용 가능하다.

1) Mapper interface 를 주입받는 방법

2) SqlSession 을 주입받는 방법

 

1) Mapper interface 를 주입 받는 방법은 앞에서 설명 했듯이 MapperFactoryBean을 이용하는 것이다.

MapperFactoryBean 을 이용해서 Mapper interface bean 을 선언하는 방법은 다음과 같다.

  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>

 

SQL을 실행 하려는 Bean 에서는 "mapper1" 을 주입 (Dependency injection) 받아서 실행하면 된다.

 

2) SqlSession 을 주입 받는 방법은 SqlSessionTemplate 을 이용하는 것이다.

다음은 SqlSession 을 Bean 으로 선언하는 부분이다. 

  1 <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
  2     <constructor-arg index="0" ref="sqlSessionFactory" />
  3 </bean> 

 

이렇게 선언된 SqlSession 을 사용하는 Bean (주로 DAO 클래스) 에서는 다음과 같이 구현한다.

  1 import org.apache.ibatis.session.SqlSession;
  2 
  3 public class MyDao {
  4  private SqlSession sqlSession;
  5  
  6     @Resource(name="sqlSession")
  7  public void setSqlSession(SqlSession sqlSession){
  8   this.sqlSession = sqlSession;
  9  }
 10  
 11  public void insertA1() throws Exception{
 12   sqlSession.insert("tkstone.test.mapping.Mapper1.insertA1", SomeParam);
 13  }
 14 }

위의 예제의 11라인에서는 Mybatis SqlSession.insert() 메소드를 바로 호출하고 있다.  

 

결과적으로 실행되는 SQL은 동일하다. 개인적으로 생각하는 장단점은 다음과 같다.

 

 Mapper interface bean 선언 

 SqlSession bean 선언 

 장점

  • Java 소스 내에 Mybatis 에 종속적인 API 를 사용하지 않음
  •  DAO 클래스가 늘어날수록 Bean 선언이 용이함 (DAO를 @Component 로 선언하는 경우)

 단점

  •  Mapper interface 개수가 늘어날수록 선언해야 하는 Bean 도 늘어남
  • Sql 종류, Parameter type에 따라 SqlSession API 를 구분해서 사용해야 함

 

 

 

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,