MyBatis中复杂查询(一对多和多对一)
一,介绍
在MyBatis中处理一对多(1)和多对一(N:1)关系是常见的需求,尤其是在操作数据库中存在关联表时。这些关系的管理能让数据查询更加直观和灵活。下面分别介绍如何在MyBatis中配置和查询这两种类型的关系。
(图片来源网络,侵删)
二,一对多(1)关系
一对多关系指的是一个记录在一个表中可以关联多个记录在另一个表中。例如,一个课程可以有多个学生。通常我们需要用外键关联学生与课程并一同返回结果。
2.1映射配置
首先在MyBatis的映射文件中配置这种关系。假设我们有两个实体类:Course和 Student,其中 Course可以有多个 Student。
2.2 Course类:
public class Course { private int id; private String name; private List students; // 课程对应的学生列表 // getters 和 setters }
2.3 Student类:
public class Student { private int id; private String name; private int courseId; // 外键 // getters 和 setters }
2.4 Mapper文件
SELECT * FROM Course LEFT JOIN Student ON Course.id = Student.course_id WHERE Course.id = #{id}
二,多对一(N:1)关系
多对一关系指的是多个记录在一个表中可以关联到另一个表中的单个记录。例如,多个学生可以属于同一个课程。
2.1 映射配置(添加字段名与类属性名不一致的情况)
通过映射文件中的配置来指定数据库字段名和类属性名之间的对应关系。我在多对一(N:1)关系的例子中加入字段名和参数名不一样的情况。比如,在数据库中字段名为id而在类中的对应字段名为courseId。
2.2 Student类:
public class Student { private int id; private String name; private int courseId; // 对应数据库中的 course_id 字段 private Course course; // 关联的课程对象 // getters 和 setters }
2.3 Course类
public class Course { private int courseId; // 注意,这里使用了 courseId 而不是 id private String name; // getters 和 setters }
2.4 Mapper文件配置
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}
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。