Mybatis CLOB 조회 - Mybatis CLOB johoe


Develop/MyBatis

2019. 11. 11. 15:00

Mybatis CLOB 조회 - Mybatis CLOB johoe

Oracle CLOB 처리 ResultMap

Oracle DB CLOB타입 사용 시 원래 기존 방식으로 불러오면 CLOB타입 자체를 가져오는 듯한

문자열이 찍히게 됩니다.

Oracle에서 CLOB 타입을 처리하기 위해서는 resultMap 태그를 이용해서 타입을 지정해줘야 하고

그 이유는 CLOB 타입을 String 형태로 넘겨주기 위해서입니다.

<resultMap id="contents" type="hashmap">
    <result property="CONT" column="CONT" jdbcType="CLOB" javaType="java.lang.String" />
</resultMap>

위와 같이 resultMap을 만들고 해당 실행 mapper type에 사용할 id는 contents ,

타입은 hashMap을 사용할 것이고 CLOB타입의 컬럼은 CONT라는 컬럼이며 jdbcType은

CLOB으로 설정된 컬럼을 String 타입으로 설정하여 CLOB을 처리합니다.


Mybatis + mssql을 사용하면서 프로시져 리턴을 clob 형태로 받기 때문에 Java에서 String형태로 변환하는 과정에 에러가 난 적이 있다. 이럴 때는 resultMap을 사용해서 맵핑해주면 해결된다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="myfolder">

	<resultMap id="test" type="HashMap" >
		<result property="columnname" column="ab" jdbcType="CLOB" javaType="java.lang.String" />
	</resultMap>

	<select id="queryid" statementType="CALLABLE" parameterType="String" resultMap="test">
		...
	</select>

</mapper>

출처 )http://mkil.tistory.com/345

ORACLE의 CLOB타입의 데이터는 MyBatis를 이용해 처리할 때는 resultMap 태그를 만들고 타입을 지정해줘야 합니다.

이유는, CLOB타입을 String형으로 매핑하여 사용하기 위함이죠.

resultMap을 사용할 때는 resultType이 아닌 resultMap으로 명시해야 한다는 것을 주의해야 합니다.

그리고 resultMap의 id값과 일치하게 적어주셔야지 참조 사용이 되는 것이랍니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<resultMap id="getBoardListResult" type="HashMap">

<result property="BRD_TYPE" column="BRD_TYPE" />

<result property="BRD_CD" column="BRD_CD" />

<result property="DOCNUM" column="DOCNUM" />

<result property="ADD_USR_NM" column="ADD_USR_NM" />

<result property="TITLE" column="TITLE" />

<result property="CONTENTS" column="CONTENTS" jdbcType="CLOB" javaType="java.lang.String" />

<result property="ATTACH" column="ATTACH" />

<result property="DEL_CONF" column="DEL_CONF" />

<result property="VIEWCOUNT" column="VIEWCOUNT" />

</resultMap>

<select id="boardSql.selectList" parameterType="java.util.HashMap" resultMap="getBoardListResult">

SELECT * FROM

(SELECT ROW_NUMBER() OVER(ORDER BY DOCNUM DESC) RNUM,

BRD_TYPE,

BRD_CD,

DOCNUM,

ADD_USR_NM,

TITLE,

CONTENTS,

ATTACH,

DEL_CONF,

VIEWCOUNT

FROM BOARD_MAIN_TEST

) X WHERE X.RNUM BETWEEN #{firts} AND #{last}

</select>

cs