코딩항해기

[Spring] MyBatis 컬럼명 DTO 필드명 불일치 설정 본문

Spring

[Spring] MyBatis 컬럼명 DTO 필드명 불일치 설정

miniBcake 2024. 11. 5. 14:41

문제 발생 이유

Java에서는 Camel case를 DB에서는 Snake case를 사용하기 때문에 컬럼명과 필드명이 불일치할 수 밖에 없고, 이 경우 값을 주입하지 못해 null값이 출력되게 된다. 하지만 Java에서 Snake case를 사용하는 것은 권장되지 않으므로 설정을 통해 해당 차이를 인지 시켜주는 것이 좋다.

 

해결방법

mybatis설정파일(xml)

설정 값을 추가해 Camel case로 변경되는 것을 인지시켜줄 수 있다.

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

 

 

별칭(AS) 설정

alias를 통해 별칭으로 필드명을 지정해 주입시킬 수도 있다.

예를 들어 컬럼명이 TEST_NUM이고, DTO의 필드명이 testNum이라면, 별칭을 통해 일치시키는 방식이다.

SELECT TEST_NUM AS testNum FROM TEST;

 

 

resultMap 설정

JDBCTemplate를 할 때처럼 매핑을 해서 지정해줄 수 있다. 해당 설정은 분리되지 않고 같은 xml에 두면 된다.

<resultMap id="userResultMap" type="User">
  <id property="id" column="user_id" />
  <result property="username" column="user_name"/>
  <result property="password" column="hashed_password"/>
</resultMap>

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