6. iBATIS + Spring
SqlMapClientFactoryBean
(org.springframework.orm.ibatis.SqlMapClientFactoryBean)
SqlMapClientTemplate
(org.springframework.orm.ibatis.SqlMapClientTemplate)
SqlMapClientDaoSupport
(org.springframework.orm.ibatis.support.SqlMapClientDaoSupport)
스프링의 iBATIS 연동지원
iBATIS 에서 데이터베이스 연동을 처리할 때 사용되는 SqlMapClient 역시 JDBC 프로그램을 할 때와 마찬가지로 try-catch 블록을 사용해서 예외를 처리해 주어야 한다 .
또한 에러원인에 따라 알맞은 예외를 발생시키기보다는 SQLException 을 발생하고 있다 .
스프링은 SqlMapClient 를 사용할 때 발생하는 코드 중복을 없애고 SQLException 을 스프링이 제공하는 예외 클래스로 변환해 주는 SqlMapClientTempalte 클래스를 제공하고 있다 .
1.
SqlMapClient 를 위한 스프링 설정
스프링이 제공하는 SqlMapClientTemplate 클래스는 내부적으로 iBATIS 의 SqlMapClient 를 사용한다 .
스프링은 SqlMapClient 를 스프링 설정 파일에서 쉽게 설정할 수 있도록 돕는 SqlMapClientFactoryBean
클래스를 제공하고 있다 .
이 클래스를 사용하면 SqlMapClient 를 스프링 빈으로 설정할 수 있다 .
dataSource 프로퍼티에는 DataSource 를 전달하며 , configLocation 프로퍼티는 iBATIS 설정 파일을 명시
2.
SqlMapClientTemplate 을 이용한 DAO 구현
SqlMapClient 를 위한 빈을 설정했다면 SqlMapClientTemplate 을 이용해서 iBATIS 를 연동할 수 있다 .
SqlMapClientTemplate
클래스는 iBATIS 의 SqlMapClient
클래스가 제공하는 대부분의 메소드와 동일한 이름과 파라미터 타입 , 리턴 타입을 갖는 메소드를 정의하고 있다.
차이점이 있다면 SQLException 을 발생하는 대신 스프링이 제공하는 예외를 발생한다 .
iBATIS 의 SqlMapExecutor 를 직접 사용하고 싶다면 ,
SqlMapClientCallback 인터페이스의 구현 객체를 전달받는 execute() 메소드를 사용하면 된다 .
SqlMapClientCallback
구현 객체의 doInSqlMapClient()
메소드에 SqlMapExecutor 파라미터가 전달되므로 , 직접 SqlMapExecutor 를 사용해서 데이터베이스 연동을 구현할 수 있다 .
3.
SqlMapClientDaoSupport 클래스를 이용한 DAO 구현
스프링은 SqlMapClientTemplate 클래스를 DAO 클래스에서 좀 더 쉽게 사용할 수 있도록 하기 위해 SqlMapClientDaoSupport 클래스를 제공한다 .
이 클래스를 상속받은 클래스는 sqlMapClientTemplate 프로퍼티를 통해서 SqlMapClientTemplate 를 전달받는다 .
'backend > iBatis' 카테고리의 다른 글
[iBatis] iBatis에서 Log4j를 이용하여 쿼리를 로그로 남기려면? (4) | 2009.01.20 |
---|---|
[iBatis] 자동 생성 Key (2) | 2009.01.18 |
[iBatis] 자바빈즈와 Map 타입의 결과 (0) | 2009.01.18 |
[iBATIS] 8. Annotation 기반으로 JUnit4를 이용한 Spring TDD ~ 9. Reference (4) | 2008.09.03 |
[iBATIS] 7. iBATIS + Spring + transaction (0) | 2008.09.02 |
[iBATIS] 5. Transaction (2) | 2008.09.01 |
[iBATIS] 4. How to (2) | 2008.08.29 |
[iBATIS] 1.Overview ~ 3. Introduce iBATIS (4) | 2008.08.28 |