iBatis 는 실제적으로 많이 사용 하고 있거나, 그렇지 않으면 앞으로 사용 할 때
굉장히 헷갈리는 부분이 있다.
바로 어떻게 value object와 column name을 맵핑 시킬 것인가,
혹은 값들을 어떻게 jsp에 뿌릴 것 인가, 즉슨 자바 코드에 어떻게 담아서 운반 할 것인가
에 대해 많은 고민이 있다.
이제 때에 맞는 iBatis value 맵핑에 대해 알아보자.
우선, 게시판을 예로 들겠다.
1. 글 작성 후 글을 DB에 insert 시킬 시
여기선 아마 write.jsp 라는 페이지에서 form값을 vo에 담아 controller 에다 넘겨 줄 것이다.
// vo 객체를 인스턴스화 하여 가져온다
<typeAlias alias="boardVo" type="jh.board.vo.BoardVO"/>
<insert id="write" parameterClass="boardVo">
이렇게 parameterClass는 vo값을 insert만 하고 아무런 result값도 가져오지 않을 때 주로 쓰인다.
2. 글 목록들을 Select 할 때
여기선 객체 하나만 가져오는게 아니라, 객체의 리스트 제네릭을 리턴 받는다.
<resultMap id="BoardResult" class="boardVo">
<result property="num" column="num" columnIndex="1" />
<result property="author" column="author" columnIndex="2" />
<result property="title" column="title" columnIndex="3" />
<result property="content" column="content" columnIndex="4" />
<result property="writeday" column="writeday" columnIndex="5" />
<result property="readcnt" column="readcnt" columnIndex="6" />
</resultMap>
<select id="list" resultMap="BoardResult" parameterClass="boardVo">
resultMap을 이용하여 boardVo 객체의 겟/셋 변수명과 DB의 column 명을 맵핑 한 후
그 결과를 조회하여 resultMap 을 Controller단 까지 넘겨 받는다.
여기서 유심히 볼 것은 그저 select만 한다면 paramterClass가 필요 없다.
하지만 검색 시 검색명과 검색값을 select 문에 넣기 위해 paramterClass가 또 쓰여 졌다.
3. 상세글이나 업데이트 시
<select id="retrieve" resultMap="BoardResult">
<select id="updateForm" resultMap="BoardResult">
위와 마찬가지로 resultMap을 사용 하여 값을 return 받아 프레젠테이션 층에 넘겨 준다.
4. 그런데 resultClass 는 어디서 사용 될까 ?
<select id="count" resultClass="Integer">
SELECT
COUNT( num )
FROM board
</select>
위와 같이 그냥 Integer(정수형) 으로 num의 count만 받고 싶다면 저렇게 쓰면 된다.
물론 Delete문과 같이 리턴 받을게 없고 그저 삭제만 시킨다 함은 resultMap, resultClass를 쓸 필요가 없는 것이다.
요약 하자면,
resultMap - Object를 return 받을 때 사용
resultClass - Integer 등 1개의 value형을 return 받을 때 사용
parameterClass - Object를 ibatis DML(#num#, #title#)문에 적용 시키고 싶을 때 사용