[SpringBoot, mybatis] Dto 변수명과 DB의 컬럼명이 달라 null값이 들어올 때

wheezy·2022년 7월 4일
0

Java vs DB

Java

  • 자바는 일반적으로 변수명에 Camel case 사용
    - userId

DB

  • snake case로 사용
    - user_id

문제

xml 파일에서 select sql문을 작성하였을 때, java의 Dto 변수명이 해당 DB 컬럼명과 다를 경우 null 값이 출력된다.

하지만 반드시 Dto와 DB네이밍을 일치시킬 필요는 없다. 오히려 java는 언더바(-)사용을 권장하지 않는다고 한다.

3가지 방법이 있다.

사용방법

mybatis-config.xml 파일 설정

이 방법이 보통 내가 프로젝트를 하면 사용하는 방법이다.

<setting name="mapUnderscoreToCamelCase" value="true" />

sql문에 별칭(AS, Alias) 설정

select user_id as userId,
       ...
from USER_TB 

resultMap의 property 설정 적용

  • Mapper 파일에서 해당 SQL문에 해당하는 resultMap을 사용
<resultMap id="userResultMap" type="User">
  <id property="id" column="user_id" />
  <result property="username" column="username"/>
  <result property="password" column="password"/>
</resultMap>

<select id="selectUsers" resultMap="userResultMap">
  select user_id, user_name, hashed_password
  from some_table
  where id = #{id}
</select>

참고

profile
🧀 개발을 하면서 도움이 되었던 부분을 기록하는 공간입니다 🧀

0개의 댓글