JDK 1.5_22 + Spring 2.5.6 + iBatis 2.3.4 + Oracle 10g
요즘 Spring MVC 이용해 개발을 계속 하고 있는데,
iBatis에서 parameterClass와 resultClass를
DTO 선언 없이, HashMap 만으로 이용해서 만들고 있습니다.
그런데 CLOB은 정상적으로 값이 넘어가지 않는 오류가 발생하더군요.
오라클 9i 에서는 Clob type handler 를 별도 선언해서 사용하기도 한다고 하는데
10g에서는 곧바로 사용할 수 있다고 합니다.
항상 DTO 써서 개발하다가 이번에 없이 하려다 보니
예상치 못한 데서 문제가... ^^;;
제가 해결한 소스 올려 봅니다.
먼저 insert, update 와 같은 Manipulation 작업에서는 ..
해당 파라미터 뒤에 :CLOB 이라고 붙여줌으로써 해결할 수 있습니다.
<insert id="SQL-INSERT" parameterClass="java.util.Map">
INSERT INTO COMMUNITY_BBS (
ID
,MENU_ID
,COMMUNITY_ID
,ROW_GROUP
,ROW_POSITION
,ROW_DEPTH
,TITLE
,CONTENTS
,USER_ID
,NICKNAME
,IS_NOTICE
,REG_DATE
) VALUES (
#bbsID#
,#menuID#
,#communityID#
,#bbsID#
,1
,1
,#title#
,#contents:CLOB#
,#userID#
,#nickname#
,#isNotice#
,SYSDATE
)
</insert>
그리고 select 와 같은 retrieve 구문에서는
resultMap 을 하나 선언한 뒤 사용하면 해결됩니다.
(resultClass를 곧바로 사용할 경우, CLOB의 주소값이 넘어오더군요..)
<resultMap id="ResMap" class="java.util.HashMap">
<result property="ID"/>
<result property="MENU_ID"/>
<result property="COMMUNITY_ID"/>
<result property="ROW_GROUP"/>
<result property="ROW_POSITION"/>
<result property="ROW_DEPTH"/>
<result property="TITLE"/>
<result property="CONTENTS" javaType="java.lang.String" jdbcType="CLOB"/>
<result property="USER_ID"/>
<result property="NICKNAME"/>
<result property="HIT_COUNT"/>
<result property="RECOMMEND_COUNT"/>
<result property="COMMENT_COUNT"/>
<result property="IS_NOTICE"/>
<result property="REG_DATE"/>
<result property="UPT_DATE"/>
</resultMap>
<select id="SQL-VIEW" parameterClass="java.util.Map" resultMap="ResMap">
SELECT
ID
,MENU_ID
,COMMUNITY_ID
,ROW_GROUP
,ROW_POSITION
,ROW_DEPTH
,TITLE
,CONTENTS
,USER_ID
,NICKNAME
,HIT_COUNT
,RECOMMEND_COUNT
,COMMENT_COUNT
,IS_NOTICE
,TO_CHAR(REG_DATE, 'YYYY/MM/DD HH24:MI') REG_DATE
,TO_CHAR(UPT_DATE, 'YYYY/MM/DD HH24:MI') UPT_DATE
FROM HER_COMMUNITY_BBS
WHERE
ID = #bbsID#
AND IS_DELETE = 'N'
</select>
생각보다 훨씬 간단했는데...
이걸 못 찾아서... 만 하루동안 삽질을.... ^^;;