상세 컨텐츠

본문 제목

iBatis에서 객체 매핑시 인스턴스 변수명 규칙?

Programming/iBatis

by otamot 2008. 2. 13. 10:57

본문

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을 사용하는 것이 더 좋다는 얘기도 있습니다. 올바를 사용법을 알아야 겠습니다.

관련글 더보기