Project/Framework
[MyBatis] 언더바(Underscore)가 포함된 필드명 CamelCase로 맵핑
Mr.Kang
2019. 5. 8. 13:39
resultType을 DTO Object일 경우 MyBatis는 기본적으로 대소문자 구분없이 동일한 필드명에 맵핑된다.
DB칼럼명에 _가 있을 경우 _이후 첫글자를 대문자로 변환하여 맵핑된다.
아래와 같은 DTO객체가 있다고 가정한다.
@Data
public class MemberDto{
private String memberNo;
private String memberName;
private String memberNickName;
}
아래와 같은 테이블이 있다고 가정한다.
CREATE TABLE `device_log` (
`member_no` BIGINT(20) NOT NULL AUTO_INCREMENT,
`member_name` VARCHAR(100) NULL DEFAULT NOT NULL COLLATE 'utf8_unicode_ci',
`member_nick_name` VARCHAR(100) DEFAULT NOT NULL COLLATE 'utf8_unicode_ci',
PRIMARY KEY (`member_no`)
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
;
쿼리 작성 예시
기존방식
<select id="memberInfo" parameterType="memberDto" resultType="memberDto">
select
member_no as memberNo,
member_name as memberName,
member_nick_name as memberNickName
from
member
where
member_no=#{memberNo}
</select>
CamelCase로 맵핑 적용 후 자동으로 _를 삭제하고 _이후 첫글자 대문자로 표기 한다.
<select id="memberInfo" parameterType="memberDto" resultType="memberDto">
select
member_no,
member_name,
member_nick_name
from
member
where
member_no=#{memberNo}
</select>
CamelCase로 맵핑하는 방법
Mybatis 설정 팔일에서 아래의 값을 추가 하여준다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>