批量插入数据到课程表

JavaJavaBeginner
立即练习

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

简介

在本项目中,你将学习如何使用流行的 Java 持久化框架 MyBatis 将数据批量插入课程表。本项目将指导你完成设置数据库、创建必要的表以及实现批量插入功能的过程。

👀 预览

MyBatis 批量插入预览

🎯 任务

在本项目中,你将学习:

  • 如何启动数据库服务并创建 MyBatisDemo 数据库和 course
  • 如何设置 MyBatisCourseDemo 项目
  • 如何使用 MyBatis 中的 <foreach> 标签实现课程数据的批量插入

🏆 成果

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

  • 使用 MyBatis 与数据库进行交互
  • 使用 MyBatis 中的 <foreach> 标签执行批量数据插入
  • 使用 MyBatis 设置和配置 Java 项目

启动数据库服务并创建课程表

在本步骤中,你将学习如何启动数据库服务、创建 MyBatisDemo 数据库、创建 course 表以及导入初始数据。

  1. 启动 MySQL 数据库服务:
cd ~/project
sudo service mysql start
  1. 通过运行 SQL 脚本来创建 MyBatisDemo 数据库和 course 表:
mysql -u root < ~/project/course.sql && rm course.sql

此命令将执行位于 ~/project/course.sql 的 SQL 脚本,以创建必要的数据库和表。脚本执行后,course.sql 文件将被删除。

设置 MyBatisCourseDemo 项目

在本步骤中,你将设置 MyBatisCourseDemo 项目,该项目是作为完成挑战的基础提供的。

  1. 导航到项目目录:
cd ~/project/MyBatisCourseDemo/

实现课程数据的批量插入

在本步骤中,你将使用 MyBatis 中的 <foreach> 标签一次性(批量)将以下三条数据添加到课程表中。

  • 课程 ID:8,课程名称:Golang 语言,授课教师:Amy
  • 课程 ID:9,课程名称:Oracle,授课教师:Bob
  • 课程 ID:10,课程名称:大数据,授课教师:Jone
  1. 打开 /src/main/java/org/labex/mapper/ 目录下的 CourseMapper.java 文件,并添加以下代码:
package org.labex.mapper;

import java.util.List;

import org.labex.pojo.Course;

public interface CourseMapper {
    void insertCourses(List<Course> courses);
}
  1. 打开 CourseMapper.xml 文件,并添加以下代码:
<?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.labex.mapper.CourseMapper">
    <insert id="insertCourses" parameterType="java.util.List">
        INSERT INTO course (cNo, cName, teacher)
        VALUES
        <foreach collection="list" item="course" separator=",">
            (#{course.cNo}, #{course.cName}, #{course.teacher})
        </foreach>
    </insert>
</mapper>
  1. 打开 /src/test/java/org/labex/test/ 目录下的 MyBatisTest.java 文件,并添加以下代码:
package org.labex.test;

import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
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);
        // 创建 SqlSessionFactory
        sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // 创建 SqlSession 对象以执行映射文件中定义的 SQL 语句
        session = sessionFactory.openSession();
    }

    @Test
    public void testInsertCourses() {
        // 创建要插入的 Course 对象列表
        List<Course> courses = new ArrayList<>();
        courses.add(new Course(8, "Golang Language", "Amy"));
        courses.add(new Course(9, "Oracle", "Bob"));
        courses.add(new Course(10, "Big Data", "Jone"));

        // 获取 CourseMapper 实例
        CourseMapper courseMapper = session.getMapper(CourseMapper.class);

        // 使用课程列表调用 insertCourses 方法
        courseMapper.insertCourses(courses);

        // 提交事务
        session.commit();

        // 关闭会话
        session.close();
    }

}
  1. 运行测试用例以验证解决方案:
mvn test

输出结果如下所示:

未完成的测试结果
✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。