介绍
在本项目中,你将学习如何使用 MyBatis 从数据库中检索课程信息,并将结果映射到自定义 Java 对象。你还将学习如何处理数据库表结构与实体类属性之间的不一致性。
👀 预览


🎯 任务
在本项目中,你将学习:
- 如何修改实体类的属性和方法以匹配数据库表结构。
- 如何配置映射器接口以定义查询课程信息的方法。
- 如何配置映射器 XML 文件以定义 SQL 查询和结果映射。
- 如何实现测试用例以验证映射器的功能。
🏆 成果
完成本项目后,你将能够:
- 使用 MyBatis 与数据库进行交互并检索数据。
- 使用
resultMap处理数据库表结构与实体类属性之间的不一致性。 - 编写测试用例以验证 MyBatis 映射器的功能。
修改实体类
在本步骤中,你将学习如何修改 Course 类的属性和方法,以匹配数据库表结构。
- 打开位于
/org/lanqiao/pojo目录下的Course.java文件。 - 将属性
cNo、cName和teacher分别更改为id、name和lecturer。 - 相应地修改 getter 和 setter 方法,以匹配新的属性名称。
- 将更改保存到
Course.java文件。
package org.lanqiao.pojo;
/**
* 定义一个 Course 类
* @author lanqiao
*/
public class Course {
// 将课程编号更改为 id
private int id;
// 将课程名称更改为 name
private String name;
// 将授课教师更改为 lecturer
private String lecturer;
public Course() {
}
public Course(int id, String name, String lecturer) {
this.id = id;
this.name = name;
this.lecturer = lecturer;
}
// 修改 getter 和 setter 方法名称
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;
}
}
配置映射器接口
在本步骤中,你将学习如何配置 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);
}
配置映射器 XML 文件
在本步骤中,你将学习如何配置 CourseMapper.xml 文件,以定义 SQL 查询和结果映射。
- 打开位于项目根目录下的
CourseMapper.xml文件。 - 定义一个
resultMap,以指定数据库表列与Course类属性之间的映射。 - 为
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">
<!-- 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>
<!-- 查询所有课程信息 -->
<select id="selectAllCourses" resultMap="courseResultMap">
SELECT * FROM course;
</select>
<!-- 查询课程编号为 2 的课程信息 -->
<select id="selectCourseById" resultType="java.util.HashMap">
SELECT * FROM course WHERE cNo = #{id};
</select>
</mapper>
实现测试用例
在本步骤中,你将学习如何实现测试用例,以验证 CourseMapper 的功能。
- 打开位于
/org/lanqiao/test目录下的MyBatisTest.java文件。 - 实现
testSelectAllCourses()方法,以检索并显示所有课程信息。 - 实现
testSelectCourseById()方法,以检索课程编号为 2 的课程信息,并将结果存储在HashMap中。
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";
// 加载 MyBatis 配置文件
Reader reader = Resources.getResourceAsReader(resource);
// 创建 SqlSession 工厂
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 创建能够执行 SQL 映射文件中 SQL 语句的 SqlSession 对象
session = sessionFactory.openSession();
}
@Test
public void testSelectAllCourses() throws IOException{
// 调用 session 中的 getMapper() 方法返回接口对象
CourseMapper cMapper = session.getMapper(CourseMapper.class);
// 执行查询并返回所有 Course 对象
List<Course> courses = cMapper.selectAllCourses();
System.out.println(courses);
session.close();
}
@Test
public void testSelectCourseById() {
// 获取 CourseMapper 的实例
CourseMapper mapper = session.getMapper(CourseMapper.class);
// 调用方法查询课程编号为 2 的课程信息
Map<String, Object> course = mapper.selectCourseById(2);
// 输出查询结果
System.out.println(course);
}
}
通过执行这些步骤,你已成功修改实体类、配置映射器接口和 XML 文件,并实现了使用 MyBatis 检索课程信息的测试用例。
运行
最后,你可以在终端中编译并运行代码,并使用 Maven 检查测试文件,使用以下命令:
cd MyBatisCourseDemo03
mvn test
你可以参考以下运行效果:


总结
恭喜!你已完成本项目。你可以在实验平台(LabEx)中多做一些实验来提升你的技能。



