使用 MyBatis 进行课程安排的增删改查

JavaScriptJavaScriptBeginner
立即练习

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

简介

在本项目中,你将学习如何使用流行的Java持久化框架MyBatis对课程时间表进行CRUD(创建、读取、更新、删除)操作。

👀 预览

课程时间表预览
课程时间表预览

🎯 任务

在本项目中,你将学习:

  • 如何配置项目并设置必要的依赖项
  • 如何通过添加属性、构造函数、setter/getter方法及其他内容来改进Course实体类
  • 如何改进MyBatis配置文件mybatis-config.xml
  • 如何实现CourseMapper接口及其相应方法
  • 如何在CourseMapper.xml文件中实现SQL映射
  • 如何在MyBatisTest.java文件中实现测试用例

🏆 成果

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

  • 使用MyBatis与MySQL数据库进行交互
  • 定义实体类并配置MyBatis映射文件
  • 使用MyBatis实现CRUD操作
  • 编写单元测试以验证应用程序的功能

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/DOMManipulationGroup(["DOM Manipulation"]) javascript(("JavaScript")) -.-> javascript/NetworkingGroup(["Networking"]) javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript/BasicConceptsGroup -.-> javascript/functions("Functions") javascript/BasicConceptsGroup -.-> javascript/obj_manip("Object Manipulation") javascript/AdvancedConceptsGroup -.-> javascript/oop("Object-Oriented Programming") javascript/AdvancedConceptsGroup -.-> javascript/error_handle("Error Handling") javascript/DOMManipulationGroup -.-> javascript/dom_manip("DOM Manipulation") javascript/NetworkingGroup -.-> javascript/http_req("HTTP Requests") javascript/NetworkingGroup -.-> javascript/json("JSON") javascript/NetworkingGroup -.-> javascript/api_interact("API Interaction") subgraph Lab Skills javascript/functions -.-> lab-300354{{"使用 MyBatis 进行课程安排的增删改查"}} javascript/obj_manip -.-> lab-300354{{"使用 MyBatis 进行课程安排的增删改查"}} javascript/oop -.-> lab-300354{{"使用 MyBatis 进行课程安排的增删改查"}} javascript/error_handle -.-> lab-300354{{"使用 MyBatis 进行课程安排的增删改查"}} javascript/dom_manip -.-> lab-300354{{"使用 MyBatis 进行课程安排的增删改查"}} javascript/http_req -.-> lab-300354{{"使用 MyBatis 进行课程安排的增删改查"}} javascript/json -.-> lab-300354{{"使用 MyBatis 进行课程安排的增删改查"}} javascript/api_interact -.-> lab-300354{{"使用 MyBatis 进行课程安排的增删改查"}} end

配置项目

在这一步中,你将学习如何配置项目并设置必要的依赖项。

  1. 打开MyBatisCourseDemo02项目中的pom.xml文件。
  2. <dependencies>部分添加以下依赖项:
<!-- MyBatis jar -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>

    <!-- MySQL数据库驱动jar -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.16</version>
    </dependency>
  1. <properties>部分添加以下属性,以配置字符编码和JDK版本:
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
  1. 添加以下<build>部分,以将XML映射文件包含在类路径中:
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

改进实体类

在这一步中,你将通过添加属性、构造函数、setter/getter方法及其他内容来改进Course实体类。

  1. 打开/src/main/java/org/labex/pojo目录下的Course.java文件。
  2. Course类中添加以下属性:
    private int cNo;
    private String cName;
    private String teacher;
  1. 添加以下构造函数:
    public Course() {

    }

    public Course(int cNo, String cName, String teacher) {
        this.cNo = cNo;
        this.cName = cName;
        this.teacher = teacher;
    }
  1. 添加以下getter和setter方法:
    public int getCNo() {
        return cNo;
    }

    public void setCNo(int cNo) {
        this.cNo = cNo;
    }

    public String getCName() {
        return cName;
    }

    public void setCName(String cName) {
        this.cName = cName;
    }

    public String getTeacher() {
        return teacher;
    }

    public void setTeacher(String teacher) {
        this.teacher = teacher;
    }
  1. 添加以下toString()方法:
    @Override
    public String toString() {
        return "Course number: " + this.cNo + "\tCourse name: " + this.cName + "\tTeacher: " + this.teacher;
    }

改进MyBatis配置

在这一步中,你将改进MyBatis配置文件mybatis-config.xml

  1. 打开src/main/resources目录下的mybatis-config.xml文件。
  2. <typeAliases>部分添加以下内容,为实体类定义别名:
    <typeAliases>
        <package name="org.labex.pojo"/>
    </typeAliases>
  1. <environments>部分配置数据源环境:
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}" />
                <property name="url" value="${mysql.url}" />
                <property name="username" value="${mysql.username}" />
                <property name="password" value="${mysql.password}" />
            </dataSource>
        </environment>
    </environments>
  1. <mappers>部分注册SQL映射文件CourseMapper.xml
    <mappers>
        <package name="org.labex.mapper" />
    </mappers>

实现CourseMapper接口

在这一步中,你将实现CourseMapper接口及其相应的方法。

  1. 打开org.labex.mapper包中的CourseMapper.java文件。
  2. CourseMapper接口中添加以下方法:
import java.util.List;

import org.labex.pojo.Course;

public interface CourseMapper {

    /**
     * 查询所有课程信息
     */
    public List<Course> queryAllCourse();

    /**
     * 插入一门新课程
     * @param course
     */
    public int insertCourse(Course course);

    /**
     * 更新课程信息
     * @param course
     */
    public int updateCourse(Course course);

    /**
     * 根据课程编号删除课程信息
     * @param course
     */
    public int deleteCourse(int cNo);
}

实现SQL映射

在这一步中,你将在CourseMapper.xml文件中实现SQL映射。

  1. 打开src/main/java/org/labex/mapper目录下的CourseMapper.xml文件。
  2. 添加以下SQL映射语句:
    <!-- 获取所有课程信息 -->
    <select id="queryAllCourse" resultType="org.labex.pojo.Course">
        select * from course
    </select>

    <!-- 插入一门新课程 -->
    <insert id="insertCourse" parameterType="org.labex.pojo.Course">
        insert into course(cNo,cName,teacher)
        values(#{cNo},#{cName},#{teacher})
    </insert>

    <!-- 根据课程编号更新课程信息 -->
    <update id="updateCourse" parameterType="org.labex.pojo.Course">
        update course set cName=#{cName},teacher=#{teacher}
        where cNo=#{cNo}
    </update>

    <!-- 根据课程编号删除课程信息 -->
    <delete id="deleteCourse" parameterType="int">
        delete from course where cNo=#{cNo}
    </delete>

实现测试用例

在这一步中,你将在MyBatisTest.java文件中实现测试用例。

  1. 打开/src/test/java/org/labex/test目录下的MyBatisTest.java文件。
  2. 添加以下测试方法:
import java.io.IOException;
import java.io.Reader;
import java.util.List;

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.labex.mapper.CourseMapper;
import org.labex.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 testSel() throws IOException{
        // 调用session中的getMapper()方法返回接口对象
        CourseMapper cMapper = session.getMapper(CourseMapper.class);
        // 执行查询并返回所有Course对象
        List<Course> courses = cMapper.queryAllCourse();
        System.out.println(courses);
        session.close();
    }

    @Test
    public void testIns() throws IOException{
        // 调用session中的getMapper()方法返回接口对象
        CourseMapper cMapper = session.getMapper(CourseMapper.class);

        Course course = new Course(8,"人工智能","汤姆");

        int i = cMapper.insertCourse(course);

        session.commit();

        System.out.println((i!=0? "数据添加成功":"数据添加失败"));

        session.close();
    }

    @Test
    public void testUpd() throws IOException{
        // 调用session中的getMapper()方法返回接口对象
        CourseMapper cMapper = session.getMapper(CourseMapper.class);

        Course course = new Course(1,"软件测试","杰克");

        int i = cMapper.updateCourse(course);

        session.commit();

        System.out.println((i!=0? "数据更新成功":"数据更新失败"));

        session.close();
    }

    @Test
    public void testDEl() throws IOException{
        // 调用session中的getMapper()方法返回接口对象
        CourseMapper cMapper = session.getMapper(CourseMapper.class);

        int i = cMapper.deleteCourse(7);

        session.commit();

        System.out.println((i!=0? "数据删除成功":"数据删除失败"));

        session.close();
    }
}

完成这些步骤后,你已成功配置项目、改进实体类、配置MyBatis设置、实现CourseMapper接口并实现测试用例。现在你可以运行测试来验证应用程序的功能。

运行

接下来,在终端中进行编译和运行,并使用Maven检查测试文件:

cd MyBatisCourseDemo02
mvn test

你可以参考以下步骤来验证挑战结果。

未完成的测试用例图片
测试执行结果
✨ 查看解决方案并练习

总结

恭喜!你已完成此项目。你可以在LabEx中练习更多实验以提升技能。