728x90
대부분의 DB 컬럼들은 SnakeCase(스네이크 케이스)를 사용한다. LAST_NAME와 같이 언더바(_)를 붙여서 사용하는 것을 스네이크 케이스이다.
하지만 보통 변수명을 지을 때 CamelCase(카멜 케이스)를 사용하기 때문에 MyBatis 쿼리 조회 후 스네이크케이스를 카멜케이스로 자동 변환하는 것이 편리할 것이다. 즉 LAST_NAME -> lastName으로 바꿔주는 과정이 필요하다.
1. 예시
예를 들어, 다음과 같은 카멜케이스로 작성된 DTO 클래스가 있다고 하자.
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Build
public class UserDTO {
private String userId;
private String userNm;
private String age;
private String telNo;
}
그러면 아래와 같이 쿼리를 작성할 것이다.
<?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="com.ex.mapper.UserMapper">
<select id="selectUserInfo" resultType="com.ex.dto.UserDTO">
SELECT USER_ID,
USER_NM,
AGE,
TEL_NO
FROM USER
</select>
</mapper>
이 때 데이터 컬럼들은 스네이크 케이스로 반환되기 때문에 카멜케이스로 작성된 resultType="User" 와 맞지 않아 오류를 뱉을 것이다.
2. 적용
application.yml (혹은 .properties)
mybatis-config.xml을 생성해서 설정할 수도 있지만, 나는 yml을 사용 중이기 때문에 application.yml에 작성했다.
mybatis:
...
configuration:
mapUnderscoreToCamelCase: true
만약, mybatis-config.xml에 적용할 거면 아래와 같이 쓰면 된다.
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
그러면 스네이크케이스로 조회한 컬럼들을 따로 alias 하지 않아도 DTO 안에 카멜케이스 로 작성된 필드들에 자동으로 맵핑되는 것을 확인할 수 있다.
3. 오류
API 개발을 계속 진행하다 보니 발견한 오류 중 하나이다.
필드의 첫 글자만 소문자인 경우 발생하는 오륜데, 예를 들어, lGroup 이라는 필드가 있는데 얘가 자꾸만 데이터를 받지 못하고 null로 설정이 되는 오류였다.
사실 이건 MyBatis 오류라기 보다는 @RequestBody 파싱 문제라고 보는 게 맞다. 근데 이 페이지에 쓴 이유는 DB 테이블에 L_GROUP 이라는 컬럼이 있는데 이걸 카멜케이스에 맞게 쓴다고 lGroup 이라고 DTO를 생성했다가 발견했기 때문이다.
내용이 길기 때문에 다음 장에 작성해야징
728x90