介绍
在本项目中,你将学习如何使用 MyBatis 对课程表执行各种操作,包括查询课程信息、更新课程教师以及批量查询课程数据。
👀 预览



🎯 任务
在本项目中,你将学习:
- 如何使用动态 SQL 查询课程名称以大写字母“C”开头的课程信息
- 如何使用动态 SQL 更新特定课程的授课教师,同时保持其他课程不变
- 如何使用动态 SQL 根据课程编号列表批量查询课程信息
🏆 成果
完成本项目后,你将能够:
- 使用 MyBatis 的输入和输出参数
- 在 MyBatis 中实现动态 SQL
- 使用结果映射指定结果集映射
- 使用
<foreach>标签进行批量查询
查询课程信息
在这一步中,你将学习如何使用动态 SQL 查询课程名称以大写字母“C”开头的课程信息。
打开位于
/org/lanqiao/mapper/目录下的CourseMapper.java文件。在
CourseMapper接口中实现selectCourses方法。此方法应接受一个Map<String, Object>参数来保存输入参数。
List<Course> selectCourses(Map<String, Object> params);
打开位于
/org/lanqiao/mapper/目录下的CourseMapper.xml文件。在
CourseMapper命名空间中实现selectCoursesSQL 语句。使用动态 SQL 检查courseName参数是否为空。如果不为空,则添加一个条件来过滤以大写字母“C”开头的课程名称。
<select id="selectCourses" resultMap="courseResultMap" parameterType="java.util.Map">
SELECT * FROM course
<where>
<if test="courseName!= null and courseName!= ''">
AND cName LIKE #{courseName}
</if>
</where>
</select>
- 在
CourseMapper.xml文件中定义courseResultMap以指定结果集映射。
<resultMap id="courseResultMap" type="org.lanqiao.pojo.Course">
<id property="cNo" column="cNo"/>
<result property="cName" column="cName"/>
<result property="teacher" column="teacher"/>
</resultMap>
打开位于
/org/lanqiao/test/目录下的MyBatisTest.java文件。实现
testSelectCourses测试方法以测试selectCourses功能。
@Test
public void testSelectCourses() {
CourseMapper mapper = session.getMapper(CourseMapper.class);
Map<String, Object> params = new HashMap<>();
params.put("courseName", "C%");
List<Course> courses = mapper.selectCourses(params);
System.out.println(courses);
}
更新课程教师
在这一步中,你将学习如何使用动态 SQL 将课程编号为“7”的课程的授课教师更新为“Blue”。
打开位于
/org/lanqiao/mapper/目录下的CourseMapper.java文件。在
CourseMapper接口中实现updateTeacher方法。此方法应接受一个Map<String, Object>参数来保存输入参数。
void updateTeacher(Map<String, Object> params);
打开位于
/org/lanqiao/mapper/目录下的CourseMapper.xml文件。在
CourseMapper命名空间中实现updateTeacherSQL 语句。使用动态 SQL 检查teacherName参数是否为空。如果不为空,则为指定courseId的课程更新teacher列。
<update id="updateTeacher" parameterType="java.util.Map">
UPDATE course
<set>
<if test="teacherName!= null and teacherName!= ''">
teacher = #{teacherName},
</if>
</set>
WHERE cNo = #{courseId}
</update>
打开位于
/org/lanqiao/test/目录下的MyBatisTest.java文件。实现
testUpdateTeacher测试方法以测试updateTeacher功能。
@Test
public void testUpdateTeacher() {
CourseMapper mapper = session.getMapper(CourseMapper.class);
Map<String, Object> params = new HashMap<>();
params.put("courseId", 7);
params.put("teacherName", " Blue");
mapper.updateTeacher(params);
session.commit();
}
批量查询课程信息
在这一步中,你将学习如何使用动态 SQL 批量查询课程编号为“1,2,3”的课程信息。
打开位于
/org/lanqiao/mapper/目录下的CourseMapper.java文件。在
CourseMapper接口中实现selectCoursesByIds方法。此方法应接受一个Map<String, Object>参数来保存输入参数。
List<Map<String, Object>> selectCoursesByIds(Map<String, Object> params);
打开位于
/org/lanqiao/mapper/目录下的CourseMapper.xml文件。在
CourseMapper命名空间中实现selectCoursesByIdsSQL 语句。使用<foreach>标签遍历ids列表并构建 IN 子句。
<select id="selectCoursesByIds" resultMap="courseResultMap" parameterType="java.util.Map">
SELECT * FROM course WHERE cNo IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
打开位于
/org/lanqiao/test/目录下的MyBatisTest.java文件。实现
testSelectCoursesByIds测试方法以测试selectCoursesByIds功能。
@Test
public void testSelectCoursesByIds() {
CourseMapper mapper = session.getMapper(CourseMapper.class);
List<Integer> ids = Arrays.asList(1, 2, 3);
Map<String, Object> params = new HashMap<>();
params.put("ids", ids);
List<Map<String, Object>> coursesByIds = mapper.selectCoursesByIds(params);
System.out.println(coursesByIds);
}
运行
为确保代码正常工作,请务必在代码中引入相关类。
CourseMapper.java:
import org.lanqiao.pojo.Course;
import java.util.List;
import java.util.Map;
MyBatisTest.java:
import java.util.Arrays;
import java.util.HashMap;
最后,你可以在终端中编译并运行代码,并使用 Maven 检查测试文件,使用以下命令:
cd MyBatisCourseDemo03
mvn test
你可以参考 👀 预览 查看运行效果。
总结
恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。



