操作课程表

JavaScriptJavaScriptBeginner
立即练习

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

简介

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

👀 预览

课程表查询示例
MyBatis 动态 SQL 示例
批量查询示例

🎯 任务

在本项目中,你将学习:

  • 如何使用动态 SQL 查询课程名称以大写字母 “C” 开头的课程信息
  • 如何使用动态 SQL 更新特定课程的授课教师,同时保持其他课程不变
  • 如何使用动态 SQL 根据课程编号列表批量查询课程信息

🏆 成果

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

  • 使用 MyBatis 的输入和输出参数
  • 在 MyBatis 中实现动态 SQL
  • 使用结果映射指定结果集映射
  • 使用 <foreach> 标签进行批量查询

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/obj_manip("`Object Manipulation`") javascript/AdvancedConceptsGroup -.-> javascript/error_handle("`Error Handling`") javascript/DOMManipulationGroup -.-> javascript/dom_select("`DOM Selection`") javascript/DOMManipulationGroup -.-> javascript/dom_manip("`DOM Manipulation`") javascript/DOMManipulationGroup -.-> javascript/dom_traverse("`DOM Traversal`") javascript/NetworkingGroup -.-> javascript/http_req("`HTTP Requests`") javascript/NetworkingGroup -.-> javascript/json("`JSON`") javascript/NetworkingGroup -.-> javascript/api_interact("`API Interaction`") subgraph Lab Skills javascript/obj_manip -.-> lab-300384{{"`操作课程表`"}} javascript/error_handle -.-> lab-300384{{"`操作课程表`"}} javascript/dom_select -.-> lab-300384{{"`操作课程表`"}} javascript/dom_manip -.-> lab-300384{{"`操作课程表`"}} javascript/dom_traverse -.-> lab-300384{{"`操作课程表`"}} javascript/http_req -.-> lab-300384{{"`操作课程表`"}} javascript/json -.-> lab-300384{{"`操作课程表`"}} javascript/api_interact -.-> lab-300384{{"`操作课程表`"}} end

查询课程信息

在这一步中,你将学习如何使用动态 SQL 查询课程名称以大写字母 “C” 开头的课程信息。

  1. 打开位于 /org/lanqiao/mapper/ 目录下的 CourseMapper.java 文件。

  2. CourseMapper 接口中实现 selectCourses 方法。此方法应接受一个 Map<String, Object> 参数来保存输入参数。

List<Course> selectCourses(Map<String, Object> params);
  1. 打开位于 /org/lanqiao/mapper/ 目录下的 CourseMapper.xml 文件。

  2. CourseMapper 命名空间中实现 selectCourses SQL 语句。使用动态 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>
  1. 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>
  1. 打开位于 /org/lanqiao/test/ 目录下的 MyBatisTest.java 文件。

  2. 实现 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”。

  1. 打开位于 /org/lanqiao/mapper/ 目录下的 CourseMapper.java 文件。

  2. CourseMapper 接口中实现 updateTeacher 方法。此方法应接受一个 Map<String, Object> 参数来保存输入参数。

void updateTeacher(Map<String, Object> params);
  1. 打开位于 /org/lanqiao/mapper/ 目录下的 CourseMapper.xml 文件。

  2. CourseMapper 命名空间中实现 updateTeacher SQL 语句。使用动态 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>
  1. 打开位于 /org/lanqiao/test/ 目录下的 MyBatisTest.java 文件。

  2. 实现 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” 的课程信息。

  1. 打开位于 /org/lanqiao/mapper/ 目录下的 CourseMapper.java 文件。

  2. CourseMapper 接口中实现 selectCoursesByIds 方法。此方法应接受一个 Map<String, Object> 参数来保存输入参数。

List<Map<String, Object>> selectCoursesByIds(Map<String, Object> params);
  1. 打开位于 /org/lanqiao/mapper/ 目录下的 CourseMapper.xml 文件。

  2. CourseMapper 命名空间中实现 selectCoursesByIds SQL 语句。使用 <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>
  1. 打开位于 /org/lanqiao/test/ 目录下的 MyBatisTest.java 文件。

  2. 实现 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 中练习更多实验来提升你的技能。

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