본문 바로가기
Programming/Java_Spring

MyBatis에서 char(nn)컬럼이 String으로 맵핑되지 않을 때.

by 곰네Zip 2023. 11. 1.

MyBatis를 이용하여 SQL문을 처리하고있는데, 디버깅하다가 알게 된 사실.

varchar컬럼은 String으로 알아서 맵핑되는데 char컬럼은 맵핑이 안되고 error가 발생하더라. (아님 null)

왜이러지? 하고 한참 찾아보았다. 

그러다 아래 원글님의 resultMap을 사용하는 것을 참고하여 해결했다.

https://goodteacher.tistory.com/650

 

[MyBatis] 03. 조회 결과의 매핑

조회 결과의 매핑 이번 포스트에서는 database에서 select로 조회한 내용을 java object 즉 DTO에 매핑하는 내용에 대해 다양하게 살펴보자. MyBatis의 조회 결과 매핑 방식 MyBatis는 다양한 방식으로 조회

goodteacher.tistory.com

결과만 요약하면, 

char컬럼이 있고, 이 컬럼을 String으로 받고싶으면, Mapper.xml에서 resultMap을 선언하고, 그 맵으로 결과를 받아오도록 해주면 된다.

 

먼저 컬럼이 아래와 같다고 가정하자.

컬럼명 DB column형식 Entity의 Type
article_id int int
writer_id varchar(20) String
content varchar(500) String
article_type char(5) String

이렇게 테이블이 구성되었다고 가정한다. 그리고 entity는 아래처럼 선언

@Data
@NoArgsConstructor
public MyEntity{
	int articleId;
    String writerId;
    String content;
    String articleType;
}

 Entity의 arcticleId, writerId, content는 데이터가 잘 들어가지만,  articleType에는 null이 들어간다.

아마 char컬럼은 다른 형태로 받아오는것 같다. 이걸 맵핑을 지정하면 해결이 된다.

Mapper.xml에서 다음과 같이 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="myPackages.myData">
    <select id="myMapperQuery" resultMap="myMap" >
       ...
    </select>
    
    <resultMap type="MyObjType" id="myMap">
    	<id column="article_id" property="articleId" />
        <result column="writer_id" property="writerId" />
        ...
        <result column="article_type" property="articleType" />
    </resultMap>
</mapper>

이런식으로 resultMap을 만들고, 그걸 xml에서 resultMap으로 지정하면 된다. resultType이 아닌 resultMap임을 주의

반응형

댓글