ibatis 에서 resultMap 형식으로 값을 vo에 담아 return 할 시, 간혹 값이 넘어 오지 않는 경우가 있다.

이 경우에는 resultMap property 값과 select 하고자 한 column 값과 정확히 일치 해주어야 return 이 가능해진다


무슨 말이냐.. 하면 예를 들어보자.


<resultMap id="BoardListResult" 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" />

  <result property="repRoot" column="rep_root" columnIndex="7" /><!--이부분을 삭제-->

<result property="repIndent" column="rep_indent" columnIndex="8" /><!--당연히 columnIndex 값을 7 로 변경-->

</resultMap>


<select id="list" resultMap="BoardListResult" parameterClass="boardVo">

<![CDATA[

SELECT 

num

, author

, title

, content

, writeday

, readcnt

, rep_indent

FROM( 

            SELECT 

... 중략

</select>


위와 같이 했을 때 값을 return 해 올 수 없다. 그 이유는 select 한 값은 rep_indent 까지 딱 7개의 column을 들고 오는데 반해 resultMap은 repRoot라는 property 값이 선언 되어 있다.


이럴 때 select 할 때 rep_root를 찾던가, 아니면 resultMap에 선언 되어 있는 repRoot result 태그를 삭제 해주면 잘 return 하는 것을 볼 수 있다.

+ Recent posts