resultMap 실전 활용

JavaScriptBeginner
지금 연습하기

소개

이 프로젝트에서는 MyBatis 를 사용하여 데이터베이스에서 강좌 정보를 검색하고 결과를 사용자 정의 Java 객체에 매핑하는 방법을 배우게 됩니다. 또한 데이터베이스 테이블 구조와 엔티티 클래스 속성 간의 불일치를 처리하는 방법도 배우게 됩니다.

👀 미리보기

MyBatis course mapping preview

MyBatis resultMap example

🎯 과제

이 프로젝트에서는 다음을 배우게 됩니다:

  • 데이터베이스 테이블 구조에 맞게 엔티티 클래스의 속성과 메서드를 수정하는 방법.
  • 강좌 정보를 쿼리하기 위한 메서드를 정의하도록 매퍼 인터페이스를 구성하는 방법.
  • SQL 쿼리와 결과 매핑을 정의하도록 매퍼 XML 파일을 구성하는 방법.
  • 매퍼의 기능을 확인하기 위해 테스트 케이스를 구현하는 방법.

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • MyBatis 를 사용하여 데이터베이스와 상호 작용하고 데이터를 검색합니다.
  • resultMap을 사용하여 데이터베이스 테이블 구조와 엔티티 클래스 속성 간의 불일치를 처리합니다.
  • MyBatis 매퍼의 기능을 확인하기 위해 테스트 케이스를 작성합니다.

엔티티 클래스 수정

이 단계에서는 데이터베이스 테이블 구조에 맞게 Course 클래스의 속성과 메서드를 수정하는 방법을 배우게 됩니다.

  1. /org/lanqiao/pojo 디렉토리에 있는 Course.java 파일을 엽니다.
  2. 속성 cNo, cName, teacher를 각각 id, name, lecturer로 변경합니다.
  3. 새로운 속성 이름에 맞게 getter 및 setter 메서드를 수정합니다.
  4. 변경 사항을 Course.java 파일에 저장합니다.
package org.lanqiao.pojo;

/**
 * Define a Course class
 * @author lanqiao
 */
public class Course {
    // Change course number to id
    private int id;
    // Change course name to name
    private String name;
    // Change lecturer to lecturer
    private String lecturer;

    public Course() {

    }

    public Course(int id, String name, String lecturer) {
        this.id = id;
        this.name = name;
        this.lecturer = lecturer;
    }

    // Modify getter and setter method names
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLecturer() {
        return lecturer;
    }

    public void setLecturer(String lecturer) {
        this.lecturer = lecturer;
    }

    @Override
    public String toString() {
        return "Course ID: " + this.id + "\tCourse Name: " + this.name + "\tLecturer: " + this.lecturer;
    }
}

Mapper 인터페이스 설정

이 단계에서는 강좌 정보를 쿼리하기 위한 메서드를 정의하도록 CourseMapper 인터페이스를 구성하는 방법을 배우게 됩니다.

  1. /org/lanqiao/mapper 디렉토리에 있는 CourseMapper.java 파일을 엽니다.
  2. 다음 메서드를 포함하도록 인터페이스를 수정합니다:
    • selectAllCourses(): 모든 강좌 정보를 검색합니다.
    • selectCourseById(int id): 지정된 강좌 ID 를 가진 강좌 정보를 검색합니다.
package org.lanqiao.mapper;

import java.util.List;
import java.util.Map;
import org.lanqiao.pojo.Course;

public interface CourseMapper {
    List<Course> selectAllCourses();
    Map<String, Object> selectCourseById(int id);
}

Mapper XML 파일 설정

이 단계에서는 SQL 쿼리와 결과 매핑을 정의하도록 CourseMapper.xml 파일을 구성하는 방법을 배우게 됩니다.

  1. 프로젝트의 루트 디렉토리에 있는 CourseMapper.xml 파일을 엽니다.
  2. 데이터베이스 테이블 열과 Course 클래스 속성 간의 매핑을 지정하기 위해 resultMap을 정의합니다.
  3. CourseMapper 인터페이스의 메서드에 대한 SQL 쿼리를 정의합니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.lanqiao.mapper.CourseMapper">

    <!-- Definition of resultMap -->
    <resultMap id="courseResultMap" type="org.lanqiao.pojo.Course">
        <id property="id" column="cNo"/>
        <result property="name" column="cName"/>
        <result property="lecturer" column="teacher"/>
    </resultMap>

    <!-- Query all course information -->
    <select id="selectAllCourses" resultMap="courseResultMap">
        SELECT * FROM course;
    </select>

    <!-- Query course information with course number 2 -->
    <select id="selectCourseById" resultType="java.util.HashMap">
        SELECT * FROM course WHERE cNo = #{id};
    </select>

</mapper>

테스트 케이스 구현

이 단계에서는 CourseMapper의 기능을 검증하기 위해 테스트 케이스를 구현하는 방법을 배우게 됩니다.

  1. /org/lanqiao/test 디렉토리에 있는 MyBatisTest.java 파일을 엽니다.
  2. 모든 강좌 정보를 검색하고 표시하기 위해 testSelectAllCourses() 메서드를 구현합니다.
  3. 강좌 번호 2 를 가진 강좌 정보를 검색하고 결과를 HashMap에 저장하기 위해 testSelectCourseById() 메서드를 구현합니다.
package org.lanqiao.test;

import java.io.IOException;
import java.io.Reader;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import org.lanqiao.mapper.CourseMapper;
import org.lanqiao.pojo.Course;

public class MyBatisTest {

    SqlSessionFactory sessionFactory = null;
    SqlSession session = null;

    @Before
    public void before() throws IOException{
        String resource = "mybatis-config.xml";
        // Load the MyBatis configuration file
        Reader reader = Resources.getResourceAsReader(resource);
        // Create SqlSession factory
        sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // Create SqlSession object capable of executing SQL statements in SQL mapping files
        session = sessionFactory.openSession();
    }

    @Test
    public void testSelectAllCourses() throws IOException{
        // Call the getMapper() method in session to return the interface object
        CourseMapper cMapper = session.getMapper(CourseMapper.class);
        // Perform query and return all Course objects
        List<Course> courses = cMapper.selectAllCourses();
        System.out.println(courses);
        session.close();
    }

    @Test
    public void testSelectCourseById() {
        // Obtain an instance of CourseMapper
        CourseMapper mapper = session.getMapper(CourseMapper.class);

        // Call the method to query the information of the course with course number 2
        Map<String, Object> course = mapper.selectCourseById(2);

        // Output the query result
        System.out.println(course);
    }
}

이러한 단계를 따르면 MyBatis 를 사용하여 강좌 정보를 검색하기 위해 엔티티 클래스를 성공적으로 수정하고, 매퍼 인터페이스와 XML 파일을 구성했으며, 테스트 케이스를 구현했습니다.

실행

마지막으로, 터미널에서 코드를 컴파일하고 실행하여 Maven 으로 테스트 파일을 확인할 수 있습니다. 다음 명령을 사용하십시오:

cd MyBatisCourseDemo03
mvn test

다음 실행 결과를 참조할 수 있습니다:

Test execution results display

Test case execution result

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습