Java

iBATIS 사용법-2

griffy 2010. 7. 2. 11:26

드디어 iBATIS를 사용하는 실무적인 내용으로 들어가보자..
우선 사용법인 1의 내용을 다 알고 있다는 가정하에 출발해보자..
고고~~

참고로 이미지도 올리고 하면서 해야 하는데.. 스샷과 이미지편집의 귀차니즘으로 그냥 글로서 표현할란다..


1. DAO 패턴

우선 이번 iBATIS를 이용해서 만들 프로젝트는 이벤트 관련된 기능이다. 꼭 프로젝트 내용이 있을 필요는 없지만.. 그냥 만들면 재미 없으니깐.. 재미요소를 살짝 첨가해보자.. 

만들기 전에 DAO 패턴에 대해서는 알고들 있는가???
이런이런.. DAO를 먼저 알아보자..

DAO를 깊게 파고 들라면.. 아시다시피 크게 마음을 다친다. 마음을 다치지 않게 살짝 발만 담궈보자..

핵심만 알아보면


Business Object  -----  DataAccessObject  -----  DataSource
             ↓                              ↓
              -------------→   TransferObject



이런 그림이 된다.

간단하게 생각하자. 
우리가 개발하는 BusinessObject(BO)에서 DataSource(원본데이터)를 접근할때  DataAccessObject(DAO)라는 인터페이스를 통해 접근을 하는것이다!!! 
이렇게 하면 차후 DataSource가 바뀌더라도 Business 로직은 수정되는 것이 없다!!! 
이런 개념이지.. 근데 TransferObject는 머냐.. 이건 BO와 DAO사이의 데이터를 전송해주는 하나의 프로토콜 같은 개념... 보통 POJO의 모양을 하고 있지여~

대략 간단히 이해가 가는가? 안된다면 댓글로 문의 사항을 남겨주면 설명은 가능하니까.. 센스가 있는 사람은 댓글로.. ㅋㅋ

2. iBATIS 프로젝트 구조.
우리가 만들... 아니 내가 만든 iBATIS 프로젝트 데모 구조를 알아보자.

아 이 프로젝트 이벤트를 다룬다고 했는데.. 대략 설명하자면, 이벤트 당첨자가 있는가? 없으면 당첨시키고, 있으면 스킵.. 그리고 덤으로 이벤트 선물을 추가하고 삭제하는 것까지.. 
이러면 DB의 insert, delete, update, select를 다 사용할 수 있겠지...


사용자

이런 구조이다. 딴건 신경  쓰지말고 ibatis 폴더 안의 구조만 보자..

우선 크게 ibatis안에  domain, persistent, presentation, properties 가 있다.
domain은 POJO들이 있는 폴더,    TransferObject
persistent는 DAO가 있는 폴더,     DataAccessObject
presentation은 음.... Display하는 곳.. BusinessObject
properties는 설정 파일 있는곳.. 

이 구조는 ibatis에 있는 예제에 따라 비슷한 폴더구성을 한것입니다.

구조를 잘 알아두길 바란다.

3. iBATIS 개발 순서..
차례차례 설정해야 할 부분부터 따라 해보자..

1) ibatis.persistent.sqlmapdao.sql.sql-map-config.xml
이 파일은 무엇이냐~
실제 데이터 저장소와 iBATIS를 연결해주는 properties 파일이다.
그리고 SQL문을 플러그인처럼 꼽고 있는 곳이기도 하다.

그럼 SQL문은 어디있는가?

2) ibatis.persistent.sqlmapdao.sql.product.xml
여기에 우리가 필요로 하는 SQL문이 담겨 있다.

sql-mapping(sql-map-config.xml)파일에 sql문을 플러그인처럼 꼽아서 business에서 sql문을 가져다가 사용할 수 있다!!!!

그럼 이 sql-mapping이 된 properties 를 가져다가 프로그램에서 써야 하는데 그건 어디서??

3) ibatis.persistent.SqlMapFactory
이 SqlMapFactory에서 위 sql-mapping 이 된 properties를 가져다가 사용할 수 있게 singleton 형태로 지원된다. 

그럼 이 sql-map 인스턴스를 가지고 BO에서 곧바로 사용하나?? 아니다.. DAO가 BO에서 필요로 하는 메소드를 구현해서 메소드를 호출하는 식으로 지원되어야 한다. 그래야 DAO와 BO 간의 투명성이 보장이 될테니깐..

4) ibatis.persistent.EventGiftDao
이게 sqlmapfactory에서 생성된 인스턴스를 가지고 sql문을 간접적으로 사용하게 해주는 메소드를 제공한다. ibatis.persistent.iface.iEventGiftDao를 인터페이스로 사용한다.


그럼 ibatis의 파일들에 대한 설명이 끝난셈이다.
 domain에 있는건 POJO로써 getter, setter밖에 없는 곳이고, presentation은 dao를 호출해서 사용하는 곳이고, properties는 DB관련 세팅 정보가 있는 곳이지...

그럼 다음 편에서는 소스를 보면서 설명 해보자.. 우선 위에 있는 파일에 대한 설명을 이해해줬으면 하는 바램이네...