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

 

[MyBatis] resultMap collection

resultMap에 클래스를 맵핑할때 인자로 다른 클래스가 있을 경우 어떻게 받아올지 찾다가 발견! mybatis에서 테이블간의 1:N관계를 select 할때 resultMap을 통한 일종의 서브쿼리 형식으로 데이터를 가져

ssodang.tistory.com

 

 

728x90
반응형

+ Recent posts