[Spring Mybatis] resultMap
1. Mybatis resultMap 기능
mybatis는 ORM 기술 중 하나이다. ORM(Object Relational Mapping)이란 객체 지향 언어의 객체와 관계형 데이터를 서로 변환해준다는 것이다.
DB 조회 결과를 복잡한 객체 구조로 변환해야 할 때 mybatis의 resultMap 기능을 사용한다. 여러 테이블의 조인 결과를 여러 자바 객체에 담을 때 resultMap 기능이 유용하다.
2. Mybatis mapper 구현 방법
1) annotation으로 구현하기
간단한 SQL을 구현할 때 annotation을 이용하여 구현하는 것이 편하다.
2) mapper XML에서 구현하기
mybatis resultMap 기능을 구현하려면 mapper XML 파일에 구현하는 것이 편하다.
mapper/RegisterMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper .dtd">
<mapper namespace="mapper.RegisterMapper">
    <resultMap id="RegisterwithStudentCourse" type="dto.Register">
        <id property="id" column="id" />
        <result property="studentId" column="studentId" />
        <result property="courseId" column="courseId" />
        <result property="grade" column="grade" />
        <result property="createDate" column="createDate" />
        <association property="student" javaType="dto.Student">
            <id property="id" column="studentId" />
            <result property="studentNumber" column="studentNumber" />
            <result property="name" column="studentName" />
        </association>
        <association property="course" javaType="dto.Course">
            <id property="id" column="courseId" />
            <result property="courseName" column="courseName" />
            <result property="unit" column="unit" />
        </association>
    </resultMap>
</mapper>
<mapper namespace="mapper.RegisterMapper">RegistMapper에 대한 SQL 명령이나 resultMap 등을 정의하기 위한 mapper 태그이다.
패키지까지 포함해서 mapper 클래스의 이름을 적는다.
<resultMap id="RegisterwithStudentCourse" type="dto.Register">조회 결과를 Regist 객체로 채우는 방법을 정의한다. SQL 조회 결과를 Java 객체 구조에 채우는 방법을 정의한 것이 resultMap이다.
<id property="id" column="id" />조회 결과의 id 칼럼은 Register 클래스의 id 속성(property)에 채운다. 이 칼럼이 테이블의 기본키(primary)이기 때문에 <id> 태그를 사용한다.
<result property="studentId" column="studentId" />조회 결과의 studentId 칼럼을 Register 클래스의 studentId 속성에 채운다. 테이블의 기본키가 아니기 때문에 <result> 태그를 사용한다.
<association property="student" javaType="dto.Student">Register 클래스의 student 속성에 Student 객체를 대입한다.
/mapper/RegisterMapper.java
import java.util.List; 
import org.apache.ibatis.annotations.Mapper; 
import org.apache.ibatis.annotations.ResultMap; 
import org.apache.ibatis.annotations.Select; 
import dto.Register; 
@Mapper 
public interface RegisterMapper { 
    @ResultMap("RegisterWithStudentAndCourse") 
    @Select("SELECT r.*, s.studentNumber, s.name studentName, c.courseName, c.unit " + 
            " FROM register r JOIN student s ON r.studentId = s.id " + 
            " JOIN course c ON r.courseId = c.id " + 
            " ORDER BY s.studentNumber ") 
    List<Register> findAll(); 
}
@ResultMap("RegisterWithStudentAndCourse")
RegisterMapper.xml 파일의 id="RegisterWithStudentAndCourse" resultMap 방법으로 조회 결과를 Java 객체들에 채워서 리턴한다.
'web > Spring' 카테고리의 다른 글
| [Spring MVC] Thymeleaf 반복문 처리, 상태변수 접근 (index) (0) | 2022.03.01 | 
|---|---|
| [Spring] Apache POI 를 이용한 엑셀 파일 읽기 (0) | 2022.02.28 | 
| [Spring Boot] 기본 포트 설정하는 방법 (0) | 2022.01.26 | 
| [Spring MVC] Thymeleaf 타임리프 기본 기능- 텍스트 text, utext (0) | 2022.01.18 | 
| [Spring MVC] Thymeleaf 타임리프 기본 기능 (0) | 2022.01.17 | 
 
	                        
댓글 개