개발 일지
[MyBatis] VO mapping과 unread, 확인해야 할 3가지
devGSP
2022. 4. 15. 23:07
반응형
VO mapping과 unread, 확인해야 할 3가지
getter, setter를 갖춘 VO 클래스가 있음에도 SELECT 쿼리를 통해 값을 받아오지 못하고 로그에 unread를 출력할 경우, 아래 세 가지 항목을 확인해 보자.
1. [흔하디흔한 사례] VO와 테이블의 컬럼명(혹은 쿼리의 Alias가) 일치하지 않는다.
package com.devgsp.errorlog.login.vo;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class UserVO {
private String userId;
private String userPassword;
private String userName;
private String userAge;
private String userEmail;
}
UserVO.java
<?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.devgsp.errorlog.login.dao.LoginDao">
<!-- 사용자 로그인 -->
<select id="selectLogin" resultType="com.devgsp.errorlog.login.vo.UserVO">
/*com.devgsp.errorlog.login.dao.LoginDao.selectLogin*/
SELECT user_id
, user_password
, user_name
, user_age
, user_email
FROM tb_errorlog_user
WHERE user_id = #{param1}
AND user_password = #{param2}
</select>
mapper.xml 파일
2. [가끔 있는 사례] mapper에 resultMap을 설정했으나, 설정한 property와 mapping이 안 맞는 경우
<resultMap id="vo" type="com.devgsp.errorlog.login.vo.UserVO">
<result column="col_userid" property="user_id" />
<result column="col_password" property="user_password" />
<result column="col_name" property="user_name" />
<result column="col_age" property="user_age" />
<result column="col_email" property="user_email" />
</resultMap>
resultMap
3. [이런 설정이 있는 줄도 몰랐던 사례] 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>
mybatis-config.xml 파일
user id를 보통 user_id 혹은 userId로 표기한다면, 그중 userId처럼 띄어쓰기 대신 대문자로 쓰는 것을 카멜 표기법이라고 한다.
.yml 파일은 아래와 같은 설정을 확인할 것!
map-underscore-to-camel-case: true
예를 들면 개발자가 컬럼명에 맞춰 VO의 String을 user_id로 설정했더라도, 카멜 표기법 설정에 의해 userId라고 mapping이 되는 것이다.
우리 모두 Map을 쓰자.
반응형