Java

Oracle Mybatis Clob Select

요술공주밍키 2023. 2. 14. 14:56

최초 Mapper

최초 Mapper를 작성할 때는 아무런 생각 없이 Map 형식으로 가져오려고 시도하였다.

 

⏹️ imageMapper.xml

<select id="ecmAnnotationInfo" parameterType="Map" resultType="Map">
    select
        MASK_INFO,
    from
        TB_ELB_MASK_B
    where
        EID = #{EID}
</select>

위와 같이 쿼리를 작성하였더니 오류는 나지 않지만 데이터를 제대로 가져오지 못하였다.

 

 

 ResultMap의 사용

그래서 두 번째로 resultMap을 통해 Clob을 String으로 변환하는 과정을 만들었다.

 

⏹️ imageMapper.xml

<resultMap id="anno_clob" type="Map">
    <result property="MASK_INFO" column="MASK_INFO" jdbcType="CLOB" javaType="java.lang.String" />
</resultMap>

<select id="ecmAnnotationInfo" parameterType="Map" resultMap="anno_clob">
    select
        MASK_INFO,
    from
        TB_ELB_MASK_B
    where
        EID = #{EID}
</select>

위와 같이 resultMap에서 CLOB을 String으로 변환하고

실제 select 쿼리에서는 reulstType이 아니라 resultMap으로 지정하면 된다...고 한다.

 

하지만 어떤 부분이 잘못된 건지 오류는 없지만 데이터를 제대로 받아오지 못했다.

 

 VO의 사용

그래서 결국 사용한 방법은 VO를 활용한 방식이다.

 

⏹️ ClobVO.java

package egovframework.CNPECMJava.ecm;

import lombok.Data;

@Data
public class ClobVO {

	private String MASK_INFO;
}

 

⏹️ imageMapper.xml

<resultMap id="anno_clob" type="egovframework.CNPECMJava.ecm.ClobVO">
    <result property="MASK_INFO" column="MASK_INFO" jdbcType="CLOB" javaType="java.lang.String" />
</resultMap>

<select id="ecmAnnotationInfo" parameterType="Map" resultMap="anno_clob">
    select
        MASK_INFO,
    from
        TB_ELB_MASK_B
    where
        EID = #{EID}
</select>

위처럼 select 쿼리는 resultMap을 통하고 resultMap은 VO를 통해서 나가면

정상적으로 데이터가 출력이 된다.

 

 

해당 문제를 해결하기 위해서 여러 블로그를 둘러봤었는데 머리 아프기 싫으면 VO 사용하라는 글을 봤다.

어떻게든 Map으로 처리하려고 했는데 일찌감치 VO를 활용할 걸 그랬다.