resultMap 的实际应用

JavaScriptJavaScriptBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

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

👀 预览

MyBatis 课程映射预览
MyBatis resultMap 示例

🎯 任务

在本项目中,你将学习:

  • 如何修改实体类的属性和方法以匹配数据库表结构。
  • 如何配置映射器接口以定义查询课程信息的方法。
  • 如何配置映射器 XML 文件以定义 SQL 查询和结果映射。
  • 如何实现测试用例以验证映射器的功能。

🏆 成果

完成本项目后,你将能够:

  • 使用 MyBatis 与数据库进行交互并检索数据。
  • 使用 resultMap 处理数据库表结构与实体类属性之间的不一致性。
  • 编写测试用例以验证 MyBatis 映射器的功能。

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("`JavaScript`")) -.-> javascript/BasicConceptsGroup(["`Basic Concepts`"]) javascript(("`JavaScript`")) -.-> javascript/AdvancedConceptsGroup(["`Advanced Concepts`"]) javascript(("`JavaScript`")) -.-> javascript/DOMManipulationGroup(["`DOM Manipulation`"]) javascript(("`JavaScript`")) -.-> javascript/NetworkingGroup(["`Networking`"]) javascript/BasicConceptsGroup -.-> javascript/functions("`Functions`") javascript/BasicConceptsGroup -.-> javascript/obj_manip("`Object Manipulation`") javascript/AdvancedConceptsGroup -.-> javascript/oop("`Object-Oriented Programming`") javascript/DOMManipulationGroup -.-> javascript/dom_select("`DOM Selection`") javascript/DOMManipulationGroup -.-> javascript/dom_manip("`DOM Manipulation`") javascript/DOMManipulationGroup -.-> javascript/dom_traverse("`DOM Traversal`") javascript/NetworkingGroup -.-> javascript/json("`JSON`") javascript/NetworkingGroup -.-> javascript/api_interact("`API Interaction`") subgraph Lab Skills javascript/functions -.-> lab-300390{{"`resultMap 的实际应用`"}} javascript/obj_manip -.-> lab-300390{{"`resultMap 的实际应用`"}} javascript/oop -.-> lab-300390{{"`resultMap 的实际应用`"}} javascript/dom_select -.-> lab-300390{{"`resultMap 的实际应用`"}} javascript/dom_manip -.-> lab-300390{{"`resultMap 的实际应用`"}} javascript/dom_traverse -.-> lab-300390{{"`resultMap 的实际应用`"}} javascript/json -.-> lab-300390{{"`resultMap 的实际应用`"}} javascript/api_interact -.-> lab-300390{{"`resultMap 的实际应用`"}} end

修改实体类

在本步骤中,你将学习如何修改 Course 类的属性和方法,以匹配数据库表结构。

  1. 打开位于 /org/lanqiao/pojo 目录下的 Course.java 文件。
  2. 将属性 cNocNameteacher 分别更改为 idnamelecturer
  3. 相应地修改 getter 和 setter 方法,以匹配新的属性名称。
  4. 将更改保存到 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 接口,以定义查询课程信息的方法。

  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);
}

配置映射器 XML 文件

在本步骤中,你将学习如何配置 CourseMapper.xml 文件,以定义 SQL 查询和结果映射。

  1. 打开位于项目根目录下的 CourseMapper.xml 文件。
  2. 定义一个 resultMap,以指定数据库表列与 Course 类属性之间的映射。
  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">

    <!-- 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 的功能。

  1. 打开位于 /org/lanqiao/test 目录下的 MyBatisTest.java 文件。
  2. 实现 testSelectAllCourses() 方法,以检索并显示所有课程信息。
  3. 实现 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)中多做一些实验来提升你的技能。

您可能感兴趣的其他 JavaScript 教程