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

🎯 任务
在本项目中,你将学习:
- 如何启动数据库服务并创建
MyBatisDemo数据库和course表 - 如何设置
MyBatisCourseDemo项目 - 如何使用 MyBatis 中的
<foreach>标签实现课程数据的批量插入
🏆 成果
完成本项目后,你将能够:
- 使用 MyBatis 与数据库进行交互
- 使用 MyBatis 中的
<foreach>标签执行批量数据插入 - 使用 MyBatis 设置和配置 Java 项目
启动数据库服务并创建课程表
在本步骤中,你将学习如何启动数据库服务、创建 MyBatisDemo 数据库、创建 course 表以及导入初始数据。
- 启动 MySQL 数据库服务:
cd ~/project
sudo service mysql start
- 通过运行 SQL 脚本来创建
MyBatisDemo数据库和course表:
mysql -u root < ~/project/course.sql && rm course.sql
此命令将执行位于 ~/project/course.sql 的 SQL 脚本,以创建必要的数据库和表。脚本执行后,course.sql 文件将被删除。
设置 MyBatisCourseDemo 项目
在本步骤中,你将设置 MyBatisCourseDemo 项目,该项目是作为完成挑战的基础提供的。
- 导航到项目目录:
cd ~/project/MyBatisCourseDemo/
实现课程数据的批量插入
在本步骤中,你将使用 MyBatis 中的 <foreach> 标签一次性(批量)将以下三条数据添加到课程表中。
- 课程 ID:8,课程名称:Golang 语言,授课教师:Amy
- 课程 ID:9,课程名称:Oracle,授课教师:Bob
- 课程 ID:10,课程名称:大数据,授课教师:Jone
- 打开
/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);
}
- 打开
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>
- 打开
/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();
}
}
- 运行测试用例以验证解决方案:
mvn test
输出结果如下所示:

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



