! 참고https://okky.kr/questions/271382
중프때도 겪었고 최종프로젝트에서도 겪을문제, 현업에서도 많이 고민하는 문제인거같다.
참고 : vo객체 필드명 어떻게 하시나요? (https://okky.kr/questions/227882)
관례적으로 자바의 변수명은 대부분 CamelCase로 작성하고 있고
DB의 컬럼명은 대체로 UnderScore(snake case)로 작성한다.
각 java와 db의 관례를 각각 적용하면 좋겠지만, DB의 연동은 라이브러리를 통해 자동화되어 트랜잭션되므로 라이브러리를 이용하기위해선 라이브러리가 지원되는 기능 선에서 이용하면 좋다.
많이 쓰고 있는 Mybatis에서 자동 치환기능을 지원하기 때문에
Java의 VO에서 카멜케이스로 작성 하였고, DB의 컬럼명은 언더스코어일때 마이바티스로 자동 매핑이 가능하다.
마이바티스 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 값을 줘서 가져온다.
'Study Hard > 개발 /로직 생각' 카테고리의 다른 글
varchar2(8) 타입으로 저장된 날짜를 나타내는 문자열을 어떻게 가져오면 좋을까? (0) | 2023.07.05 |
---|---|
CSR(클라이언트 렌더링)이 대세가 된 시장 (feat. jsp는 사장되고 있나요..?) (0) | 2023.07.05 |
[스프링Legacy] 아이디 찾기, 비밀번호 찾기 로직 (Ajax, JSON 사용) (0) | 2023.06.09 |
[Web] 로그인 폼에서 엔터키로 로그인하기 (자바스크립트 사용하지않고) (0) | 2023.05.28 |
[스프링, 자바] VO객체의 필드의 공백,null값 일괄 확인 (form 필드 공백확인) (0) | 2023.05.26 |
댓글