sqlMap에서 SELECT 문을 다음과 같이 하고
<sqlMap>
<select id="getContent" parameterClass="int" resultClass="content">
<![CDATA[
SELECT
SEQ_ID
, CREATED_DATE
, TITLE
, CONTENT
, CONTENT_TYPE
FROM CONTENT
WHERE SEQ_ID=#id#
]]>
</select>
</sqlMap>
객체의 인스턴스 변수를 다음과 같이 했습니다.
private int seqId;
private String createdDate;
private String title;
private String content;
private String contentType;
TABLE 'CONTENT'에는 다음과 같이 DATA가 존재합니다.
Query를 수행 한 결과 log가 다음과 같았습니다.
[COTAMOT] INFO,[2008-02-13 10:29:57,546],[main],(IBatisDaoTest.java:39),#### SEQ_ID : 0
[COTAMOT] INFO,[2008-02-13 10:29:57,546],[main],(IBatisDaoTest.java:40),#### CREATE_DATE : null
[COTAMOT] INFO,[2008-02-13 10:29:57,636],[main],(IBatisDaoTest.java:41),#### TITLE : 첫번째 글
[COTAMOT] INFO,[2008-02-13 10:29:57,636],[main],(IBatisDaoTest.java:42),#### CONTENT : 첫번째 글 내용입니다.
[COTAMOT] INFO,[2008-02-13 10:29:57,636],[main],(IBatisDaoTest.java:43),#### TYPE : null
네이밍 규칙에 맞지 않은듯 합니다. '_'를 쓰지 않은 'TITLE', 'CONTENT'는 올바르게 담아오지만 그 외의 것은 값을 가져오지 못했습니다. Query문을 다음과 같이 변경하였습니다.
<sqlMap>
<select id="getContent" parameterClass="int" resultClass="content">
<![CDATA[
SELECT
SEQ_ID as seqId
, CREATED_DATE as createdDate
, TITLE as title
, CONTENT as content
, CONTENT_TYPE as contentType
FROM CONTENT
WHERE SEQ_ID=#id#
]]>
</select>
</sqlMap>
결과는 다음과 같습니다.
[COTAMOT] INFO,[2008-02-13 10:51:39,999],[main],(IBatisDaoTest.java:39),#### SEQ_ID : 1
[COTAMOT] INFO,[2008-02-13 10:51:39,999],[main],(IBatisDaoTest.java:40),#### CREATE_DATE : 2008-02-12
[COTAMOT] INFO,[2008-02-13 10:51:39,999],[main],(IBatisDaoTest.java:41),#### TITLE : 첫번째 글
[COTAMOT] INFO,[2008-02-13 10:51:39,999],[main],(IBatisDaoTest.java:42),#### CONTENT : 첫번째 글 내용입니다.
[COTAMOT] INFO,[2008-02-13 10:51:40,009],[main],(IBatisDaoTest.java:43),#### TYPE : NN
Query문에서 각 column을 alias로 해서 인스턴스 변수와 일치시켰더니 데이터를 올바르게 가져옵니다. 자바의 기본 네이밍 규칙이 먹히지 않는 것일까요? 찾아봐야 겠습니다. 또한 resultClass를 사용하면 자동을 mapping 해서 좋은데 그 만큼 부하가 걸리기 때문에 resultMap을 사용하는 것이 더 좋다는 얘기도 있습니다. 올바를 사용법을 알아야 겠습니다.