티스토리 뷰

It

Springi Batis 7-6 Spring과 iBatis 연동

worknettwo 2023. 2. 22. 22:47

Springi Batis 7-6 Spring과 iBatis 연동

;

Spring과 iBatis

서로 연동할 경우 IoC의 장점과 Persistence 계층 처리의 용이성을 모두 얻을 수 있음.

고려 사항 세가지

sqlMapConfig.xml 파일의 내용중 트랜잭션 관련 내용을 Spring의 Bean으로 등록

iBatis 핵심 객체인 sqlMapClient를 Spring의 SqlMapClientTemplate으로 대체하여 Bean으로 등록

데이터베이스 연동을 처리하는 DAO 클래스는 SqlMapClientDaoSupport 클래스를 상속받아 작성함.

sqlMapClient bean을 주입해주어야 함.

sqlMapClientTemplate 객체를 획득하여 API를 이용함.

;

iBatis 설정

SqlMapConfig.xml을 Spring으로 옮기기

DataSource와 Transaction을 Spring에서 관리하도록 지정함.

applicationContext.xml로 옮김.

SqlMapCongig.xml 에는 <settings />와 <sqlMap /> 요소만 남겨둠

<properties />, <typeAlias />, <transactionManager />는 Spring의 Bean 설정 파일로 이동

applicationContext.xml
<!-- DataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="hr" />
<property name="password" value="hr" />
</bean>

;

applicationContext.xml
<!-- SqlMapClientFactoryBean -->
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="config/ibatis/SqlMapConfig.xml" />
<property name="dataSource" ref="dataSource" />
</bean>

;

;

SqlMapConfig.xml 작성

SqlMapConfig.xml
<sqlMapConfig>
<settings useStatementNamespaces="true" />
<sqlMap resource="com/multicampus/mapping/user/user-mapping.xml" />
<sqlMap resource="com/multicampus/mapping/board/board-mapping.xml" />
</sqlMapConfig>

;

매핑 파일 작성

<sqlMap /> 요소 내에 매핑 정보를 작성함.

<typeAlias />를 포함시킬 수 있음

;

;

Bean 클래스 작성 및 등록

iBatis를 이용한 DAO 클래스

;

;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

;

public class BoardIBatisDAO ;extends SqlMapClientDaoSupport implements BoardDAO ;{

public void addBoard(BoardVO vo){

getSqlMapClientTemplate().insert("addBoard", vo);

}

public ArrayList<BoardVO> getBoardList(BoardVO vo) {

return (ArrayList)getSqlMapClientTemplate().queryForList("getBoardList", vo);

}

}

;

유연한 구조를 가지기 위해서 DAO 클래스를 계층화시키려면 인터페이스를 구현하도록 할 것

다형성 기반으로 구현했을 때 XML 설정 파일만 수정하므로써 DAO 모듈을 교체할 수 있음.

;

서비스 클래스 작성

BoardService.java
public interface BoardService{
public ArrayList<BoardVO> getBoardList(BoardVO boardVO);
public void addBoard(BoardVO boardVO);
}

;

BoardServiceImpl.java
public class BoardServiceImpl implements BoardService {
private BoardDAO boardDAO;
public void setBoardDAO(BoardDAO boardDAO) {
this.boardDAO = boardDAO;
}
public ArrayList<BoardVO> getBoardList(BoardVO boardVO) {
return boardDAO.getBoardList(boardVO);
}
public void addBoard(BoardVO boardVO) {
boardDAO.addBoard(boardVO);
}
}

;

;

Spring 설정 파일에 등록

applicationContext.xml
<bean id="boardService" class="com.multicampus.biz.board.impl.BoardServiceImpl">
<property name="boardDAO" ref="boardIBatisDAO" />
</bean>
<bean id="boardIBatisDAO" class="com.multicampus.biz.board.impl.BoardIBatisDAO">
<property name="sqlMapClient" ref="sqlMapClient />
</bean>

;

;

;

;

;

테스트

BoardServiceTest.java
public class BoardServiceTest {
public static void main(String[] args) {
ApplicationContext ctx =
new FileSystemXmlApplicationContext("config/applicationContext.xml");
BoardService boardService = (BoardService)ctx.getBean("boardService");
;
……
ArrayList<BoardVO> boardList = boardService.getBoardList(searchVO);
for (BoardVO board : boardList) {
System.out.println(board.toString());
}
}
}

;

Annotation 사용

Annotation 설정

<context:component-scan /> 요소를 추가하고, DAO, Service Bean 등록 내용을 제거함.

applicationContext.xml
<context:component-scan base-package="com.multicampus.biz"/>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="hr" />
<property name="password" value="hr" />
</bean>
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="resource/ibatis/sql-map-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient" ref="sqlMapClient" />
</bean>

;

;

;

;

;

;

;

;

;

DAO 클래스

@Repository Annotation 추가

SqlMapClientTemplate 객체 의존성 주입할 수 있도록 setSqlMapClient() 메서드 호출하는 메서드를 작성하고 @Autowired 처리

;

BoardIBatisDAO.java
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class BoardIBatisDAO extends SqlMapClientDaoSupport implements BoardDAO{
@Autowired
public BoardIBatisDAO(SqlMapClient sqlMapClient) {
setSqlMapClient(sqlMapClient);
}
public void addBoard(BoardVO vo){
getSqlMapClientTemplate().insert("addBoard", vo);
}
public ArrayList<BoardVO> getBoardList(BoardVO vo) {
return (ArrayList)getSqlMapClientTemplate().queryForList("getBoardList", vo);
}
}

;

;

;

서비스 클래스 작성

DAO 객체를 주입하여 서비스 클래스 완성

BoardServiceImpl.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("boardService")
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardDAO boardDAO;
public void setBoardDAO(BoardDAO boardDAO) {
this.boardDAO = boardDAO;
}
public ArrayList<BoardVO> getBoardList(BoardVO boardVO) {
return boardDAO.getBoardList(boardVO);
}
public void addBoard(BoardVO boardVO) {
boardDAO.addBoard(boardVO);
}
}

;

'It' 카테고리의 다른 글

자바 예외처리  (0) 2023.02.24
Linux(CentOS) yum  (0) 2023.02.23
사회복지의 주체  (0) 2023.02.21
압축천연가스(CNG; Compressed Natural Gas), PNG(Pipe Natural Gas)  (0) 2023.02.17
C언어 사칙 연산  (0) 2023.02.16
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함