赞
踩
在MyBatis中处理一对多(1)和多对一(N:1)关系是常见的需求,尤其是在操作数据库中存在关联表时。这些关系的管理能让数据查询更加直观和灵活。下面分别介绍如何在MyBatis中配置和查询这两种类型的关系。
首先在MyBatis的映射文件中配置这种关系。假设我们有两个实体类:Course和 Student,其中 Course可以有多个 Student。
- public class Course {
- private int id;
- private String name;
- private List<Student> students; // 课程对应的学生列表
- // getters 和 setters
- }
- public class Student {
- private int id;
- private String name;
- private int courseId; // 外键
- // getters 和 setters
- }
- <select id="selectCourse" resultMap="CourseResultMap">
- SELECT * FROM Course
- LEFT JOIN Student ON Course.id = Student.course_id
- WHERE Course.id = #{id}
- </select>
-
- <resultMap id="CourseResultMap" type="Course">
- <id property="id" column="id" />
- <result property="name" column="name" />
- <collection property="students" ofType="Student"
- resultMap="StudentResultMap"/>
- </resultMap>
-
- <resultMap id="StudentResultMap" type="Student">
- <id property="id" column="id" />
- <result property="name" column="name" />
- <result property="courseId" column="course_id" />
- </resultMap>
-
通过映射文件中的配置来指定数据库字段名和类属性名之间的对应关系。我在多对一(N:1)关系的例子中加入字段名和参数名不一样的情况。比如,在数据库中字段名为id而在类中的对应字段名为courseId。
- public class Student {
- private int id;
- private String name;
- private int courseId; // 对应数据库中的 course_id 字段
- private Course course; // 关联的课程对象
- // getters 和 setters
- }
- public class Course {
- private int courseId; // 注意,这里使用了 courseId 而不是 id
- private String name;
- // getters 和 setters
- }
- <!-- 结果映射定义,处理字段名和属性名不一致的情况 -->
- <resultMap id="CourseResultMap" type="Course">
- <id property="courseId" column="id" /> <!-- 映射数据库的 id 字段到类的 courseId 属性 -->
- <result property="name" column="name" />
- </resultMap>
-
- <resultMap id="StudentResultMap" type="Student">
- <id property="id" column="id" />
- <result property="name" column="name" />
- <result property="courseId" column="course_id" /> <!-- 映射数据库的 course_id 字段到类的 courseId 属性 -->
- <association property="course" javaType="Course"
- resultMap="CourseResultMap" />
- </resultMap>
-
- <!-- 查询学生及其课程信息,处理字段名映射 -->
- <select id="selectStudent" resultMap="StudentResultMap">
- SELECT Student.id, Student.name, Student.course_id,
- Course.id, Course.name
- FROM Student
- JOIN Course ON Student.course_id = Course.id
- WHERE Student.id = #{id}
- </select>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。