Mybatis中collection和association的区别

无天有壁纸 2024-05-03 23:33:46
在MyBatis中,如果我们想对一对一或者一对多的多表进行查询,该如何处理呢? MyBatis提供了下面两个标签来处理一对一、多对一、一对多的映射关系: association: 处理一对一、多对一collection: 处理一对多一对一 每个人都有身份证,人和身份证的关系是一对一的。假设我们有下面两个class: public Card implements Serializable { private Integer id; private String code; // 省略get、set方法}public User implements Serializable { private Integer id; private String name; private Integer age; private Card card; //省略get、set方法}下面是Mapper和接口的实现: package com.java.mapper;import com.java.pojo.Card;public interface CardMapper { Card selectCardById(Integer id);} select * from tb_card where id = #{id} package com.java.mapper;import com.java.pojo.Person;public interface PersonMapper { Person selectPersonById(Integer id); } select * from tb_person where id = #{id} 一对多 假设我们有班级和学生两个实体类,一个班级有多个学生,一个学生只会在一个班级: package com.java.pojo; import java.io.Serializable;import java.util.List; public Clazz implements Serializable{ private Integer id; private String code; private String name; //班级与学生是一对多的关系 private List students; //省略set/get方法}public Student implements Serializable { private Integer id; private String name; private Clazz clazz; //省略set/get方法}班级和学生是一对多的关系,在MyBatis中我们是用collection来实现一对多的映射: select * from tb_clazz where id = #{id} package com.java.mapper;import com.java.pojo.Clazz;public interface ClazzMapper { Clazz selectClazzById(Integer id);} select * from tb_clazz c,tb_student s where c.id = s.id and s.id = #{id} select * from tb_student where clazz_id = #{id} package com.java.mapper;import com.java.pojo.Student;public interface StudentMapper { Student selectStudentById(Integer id); }
0 阅读:10

无天有壁纸

简介:感谢大家的关注