개발 일지

[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을 쓰자.

반응형