SqlSessionFactory 인스턴스는 SqlSessionFactoryBuilder 를 사용
SqlSessionFactoryBuilder 는 XML 설정파일에서 SqlSessionFactory 인스턴스를 빌드할 수 있다.
Mybatis를 사용하기 위해 설정을 하고자 한다면 아래의 내용을 볼 수 있을 것이다.
아래는 spring에서 bean 설정을 해주는 부분이다.
아래의 용어들에 대해서 살펴볼 필요가 있다.
SqlSessionFactoryBuilder
이 클래스는 인스턴스회되어 사용되고 던져질 수 있다. SqlSessionFactory 를 생성한 후 유지할 필요는 없다. 그러므로 SqlSessionFactoryBuilder 인스턴스의 가장 좋은 스코프는 메서드 스코프(예를 들면, 메서드 지역변수)이다. 여러 개의 SqlSessionFactory 인스턴스를 빌드하기 위해 SqlSessionFactoryBuilder 를 재사용할 수도 있지만 유지하지 않는 것이 가장 좋다..
SqlSessionFactory
한번 만든뒤, SqlSessionFactory 는 애플리케이션을 실행하는 동안 존재해야만 한다. 그래서 삭제하거나 재생성할 필요가 없다. 애플리케이션이 실행되는 동안 여러 차례 SqlSessionFactory 를 다시 빌드하지 않는 것이 가장 좋은 형태이다. 재빌드하는 형태는 결과적으로 “나쁜 냄새” 가 나도록 한다. 그러므로 SqlSessionFactory 의 가장 좋은 스코프는 애플리케이션 스코프이다. 애플리케이션 스코프로 유지하기 위한 다양한 방법이 존재한다. 가장 간단한 방법은 싱글턴 패턴이나 static 싱글턴 패턴을 사용하는 것이다. 또는 구글 Guice 나 Spring 과 같은 의존성 삽입 컨테이너를 선호할 수 도 있다. 이러한 프레임워크는 SqlSessionFactory 의 생명주기를 싱글턴으로 관리할 것이다.
SqlSession
각각의 쓰레드는 자체적으로 SqlSession 인스턴스를 가져야 한다. SqlSession 인스턴스는 공유되지 않고 쓰레드에 안전하지도 않다. 그러므로 가장 좋은 스코프는 요청 또는 메서드 스코프이다. SqlSession 을 static 필드나 클래스의 인스턴스 필드로 지정해서는 안된다. 그리고 서블릿 프레임워크의 HttpSession 과 같은 관리 스코프에 둬서도 안된다. 어떠한 종류의 웹 프레임워크를 사용한다면, HTTP 요청과 유사한 스코프에 두는 것으로 고려해야 한다. 달리 말해서, HTTP 요청을 받을?때마다 만들고, 응답을 리턴할때마다 SqlSession 을 닫을 수 있다. SqlSession 을 닫는 것은 중요하다. 언제나 finally 블록에서 닫아야만 한다. 다음은 SqlSession 을 닫는 것을 확인하는 표준적인 형태다.
Mapper 인스턴스
Mapper 는 매핑된 구문을 바인딩 하기 위해 만들어야 할 인터페이스이다. mapper 인터페이스의 인스턴스는 SqlSession 에서 생성한다. 그래서 mapper 인스턴스의 가장 좋은 스코프는 SqlSession 과 동일하다. 어쨌든 mapper 인스턴스의 가장 좋은 스코프는 메서드 스코프이다. 사용할 메서드가 호출되면 생성되고 끝난다. 명시적으로 닫을 필요는 없다.
mybatis의 설정 기준은 spring + maven을 기준으로 설명 하겠다.
mybatis가 필요한 jar는 maven pom.xml을 통하여 받는다.
spring에서 사용 할 수 있고 위에서 본 내용들을 이용 할 수 있게 하는 lib 파일이라고 보면 될 것 같다.
까보지는 않아서 정확지는 않다..ㅋㅋ;
<dependency> |
2) context에 mybatis 관련 빈 추가(sqlSessionFactory)
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:sqlmap/sqlmap-config.xml"/> <property name="typeAliasesPackage" value="com.xxx.domain, com.yyy.domain"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.xxx.dao,com.yyy.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> |
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
위처럼 SqlSessionFactoryBuilder를 통해 build를 하면 sqlSessionFactory 객체가 만들어진다.
SqlSession session = sqlSessionFactory.openSession();
또한 sqlSessionFactory는 openSession을 통해 session을 만든다.
SqlSession 인스턴스를 통해 직접 SQL 구문을 실행할 수 있다.
그리고 mapper 또한 SqlSession 에서 생성한다.
SqlSession session= sqlSessionFactory.openSession(); try { BlogMapper mapper= session.getMapper(BlogMapper.class); // do work } finally { session.close(); } |
그런 뒤 mybatis를 사용하기 위해
sqlmap-config.xml에 mapper를 작성!
<mappers> <mapper resource="sqlmap/sql/test1-map.xml"/> <mapper resource="sqlmap/sql/test2-map.xml"/> <mapper resource="sqlmap/sql/test3-map.xml"/> </mappers> |
그리고 나머지 MVC구조에서 호출 해주면 끝!
- controller
List<BoardVo> boards = boardService.selectBoardList(boardVo);
- service
public interface BoardService {
public List<BoardVo> selectBoardList(BoardVo boardVo);
}
- service implement 부
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardDao boardDao;
@Override
public List<BoardVo> selectBoardList(BoardVo boardVo) {
List<BoardVo> boards = boardDao.selectBoardList(boardVo);
return boards;
}
- DAO
public interface BoardDao {
public List<BoardVo> selectBoardList(BoardVo boardVo);
}
- test1-map.xml
<mapper namespace="com.kt.guide.board.dao.BoardDao" >
<select id="selectBoardList" parameterType="BoardVo" resultType="BoardVo">
SELECT 구문~블라블라~
</select>
위의 내용은 DAO+DTO(도메인)을 바로 매핑 해서 쓰는 방법이다.
물론 http://ejaeyeol.blog.me/173680503 링크를 가서 보면 resultMap을 사용하여 컬럼을 매핑 하여
사용 할 수 도 있다.
참고 사이트 : http://www.mybatis.org/core/ko/getting-started.html
'OpenSource > Mybatis&Ibatis' 카테고리의 다른 글
Batch Update 기능 (0) | 2013.06.27 |
---|---|
Mybatis 동적 sql 주의사항 (0) | 2013.06.17 |
Mybatis SVN 주소 (0) | 2013.05.09 |
org.postgresql.util.PSQLException: Returning autogenerated keys is not supported (0) | 2013.01.22 |
ibatis 쓸만한 것 정리 (0) | 2012.04.24 |