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


🎯 과제
이 프로젝트에서는 다음을 배우게 됩니다:
- 데이터베이스 테이블 구조에 맞게 엔티티 클래스의 속성과 메서드를 수정하는 방법.
- 강좌 정보를 쿼리하기 위한 메서드를 정의하도록 매퍼 인터페이스를 구성하는 방법.
- SQL 쿼리와 결과 매핑을 정의하도록 매퍼 XML 파일을 구성하는 방법.
- 매퍼의 기능을 확인하기 위해 테스트 케이스를 구현하는 방법.
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다:
- MyBatis 를 사용하여 데이터베이스와 상호 작용하고 데이터를 검색합니다.
resultMap을 사용하여 데이터베이스 테이블 구조와 엔티티 클래스 속성 간의 불일치를 처리합니다.- MyBatis 매퍼의 기능을 확인하기 위해 테스트 케이스를 작성합니다.
엔티티 클래스 수정
이 단계에서는 데이터베이스 테이블 구조에 맞게 Course 클래스의 속성과 메서드를 수정하는 방법을 배우게 됩니다.
/org/lanqiao/pojo디렉토리에 있는Course.java파일을 엽니다.- 속성
cNo,cName,teacher를 각각id,name,lecturer로 변경합니다. - 새로운 속성 이름에 맞게 getter 및 setter 메서드를 수정합니다.
- 변경 사항을
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 인터페이스를 구성하는 방법을 배우게 됩니다.
/org/lanqiao/mapper디렉토리에 있는CourseMapper.java파일을 엽니다.- 다음 메서드를 포함하도록 인터페이스를 수정합니다:
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 파일을 구성하는 방법을 배우게 됩니다.
- 프로젝트의 루트 디렉토리에 있는
CourseMapper.xml파일을 엽니다. - 데이터베이스 테이블 열과
Course클래스 속성 간의 매핑을 지정하기 위해resultMap을 정의합니다. 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의 기능을 검증하기 위해 테스트 케이스를 구현하는 방법을 배우게 됩니다.
/org/lanqiao/test디렉토리에 있는MyBatisTest.java파일을 엽니다.- 모든 강좌 정보를 검색하고 표시하기 위해
testSelectAllCourses()메서드를 구현합니다. - 강좌 번호 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
다음 실행 결과를 참조할 수 있습니다:


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



