본문 바로가기
Study Hard/개발 /로직 생각

[스프링,Mybatis] Model(VO)의 필드명은 CamelCase가 좋을까? UnderScore가 좋을까?

by 코플+ 2023. 5. 26.

! 참고https://okky.kr/questions/271382

 

중프때도 겪었고 최종프로젝트에서도 겪을문제, 현업에서도 많이 고민하는 문제인거같다.

 

참고 : vo객체 필드명 어떻게 하시나요? (https://okky.kr/questions/227882)

 

 

관례적으로 자바의 변수명은 대부분 CamelCase로 작성하고 있고
DB의 컬럼명은 대체로 UnderScore(snake case)로 작성한다.

 

각 java와  db의 관례를 각각 적용하면 좋겠지만, DB의 연동은 라이브러리를 통해 자동화되어 트랜잭션되므로 라이브러리를 이용하기위해선 라이브러리가 지원되는 기능 선에서 이용하면 좋다.

 

많이 쓰고 있는 Mybatis에서 자동 치환기능을 지원하기 때문에

Java의 VO에서 카멜케이스로 작성 하였고,  DB의 컬럼명은 언더스코어일때 마이바티스로 자동 매핑이 가능하다.

 

https://mybatis.org/mybatis-3/configuration.html

마이바티스 Alias.xml 설정 콘픽에서 아래 구문을 추가해주면 된다. (기본값은 false)

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

 

그러면 db의 resultType이 DTO(VO)일때  db의 필드명의 underscore를 제거하고 자동으로 dto의 필드명에 매핑해준다.(대소문자는 상관없다)

 

만약의 저 mapUnderscoreToCamelCase 설정을 이용하지 않고 매핑하는 방법은 두가지가 존재한다.

 

마이바티스 설정에서 해결하기

설정 xml에서 각 이름마다 매핑해준다.

<resultMap id="MemberVO" type="kr.or.cople.vo.MemberVO">		
	<result property="memId" column="MEM_ID"/>
	<result property="memPw" column="MEM_PW"/>
</resultMap>

그리고 아래와 같이 resultMap을 통해 불러온다.

<select id="loginProcess" resultMap="MemberVO">

 - 이렇게 하면 VO에 getter/setter 설정이 불필요하다.

DB단에서 해결하기

<select id="testMember" resultType="MemberVO">
  SELECT MEM_ID AS memId FROM MEMBER = #{memId}
</select>

쿼리 구문에서  DB alias 값을 줘서 가져온다.

 

 

 

 

 

 

 

 

댓글