728x90
반응형
mybatis로 조회된 쿼리문의 결과에서 unread로 컬럼정보가 표시되는 경우가 있었다.
1. mybatis의 쿼리 내용
1
2
3
4
5
6
7
8
|
<mapper namespace="com.sample.mapper.memberMapper">
<!-- unread 발생 -->
<select id="read" resultType="com.sample.mapper.MemberVO">
SELECT SEQ, NAME, SEX, EMAIL_ADDR, PASSWORD, BIRTH, ADDR, THUMB, PROFILE
FROM MEMBER WHERE SEQ = #{seq}
</select>
</mapper>
|
cs |
2. resultType의 MemberVO 내용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class MemberVO {
private int seq;
private String name;
private int sex;
private String email;
private String passWord;
private String birth;
private String add;
private String thumb;
private String profile;
private int is_delete;
}
|
cs |
3. DB 테이블 정보
문제는 원인은 MemberVO클래스의 변수와 DB 컬럼명이 다르다.
그러니 누가 누구와 연결되는지 명확하지가 않다. (대소문자는 구분하지 않음)
그래서 클래스 변수와 DB의 컬럼명을 맵핑하여 이 문제를 해결한다.
4. 1번의 mybatis에서 컬럼명과 변수를 맵핑하는 정보를 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<mapper namespace="com.sample.mapper.memberMapper">
<!-- resultMap 사용으로 unread 해결 -->
<select id="read" resultMap="mapping_memberlist">
SELECT SEQ, NAME, SEX, EMAIL_ADDR, PASSWORD, BIRTH, ADDR, THUMB, PROFILE
FROM MEMBER WHERE SEQ = #{seq}
</select>
<!-- 쿼리 결과에 대한 맵핑 변수명 vs 컬럼명 -->
<resultMap type="com.sample.mapper.MemberVO" id="mapping_memberlist">
<result property="seq" column="SEQ"/>
<result property="name" column="NAME"/>
<result property="sex" column="SEX"/>
<result property="email" column="EMAIL_ADDR"/>
<result property="passWord" column="PASSWORD"/>
<result property="birth" column="BIRTH"/>
<result property="add" column="ADDR"/>
<result property="thumb" column="THUMB"/>
<result property="profile" column="PROFILE"/>
<result property="is_delete" column="IS_DELETE"/>
</resultMap>
</mapper>
|
cs |
1) resultMap을 통해 클래스 변수와 DB 컬럼을 하나하나 매칭 시킨다.
(property는 클래스의 변수명, column은 DB 컬럼명)
2) 매칭 시 부여한 id를 통해 쿼리 결과를 지정하여 준다.
5. 적용후
결론적으로 이 방법은 잘 사용하면 유용할 것이다.
실제 변수명이나 클래스 명이 길어지는 것이 부담스러워 일부러 축약시켜 사용하는 경우도 있다.
또한 DB와 코딩을 각각 작업하게 되는 경우 똑같이 작성할 수 없는 경우도 있다.
이럴때 미리 resultMap으로 한번만 정리해 둔다면 유용하게 사용할 수 있을 것이다.
참고URL
728x90
반응형
'코딩 삽질' 카테고리의 다른 글
[java, spring] org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'objectMapper' (0) | 2021.04.29 |
---|---|
[jQuery] simple pagination (0) | 2021.04.17 |
[IntelliJ] Gradle war 파일 생성 메모 (0) | 2021.04.10 |
[oracle, mybatis] sequence 사용 (0) | 2021.04.10 |
[jQuery DataTable] row click event (0) | 2021.04.10 |