Mybatis可以通过关联查询实现,关联查询是几个表联合查询,只查询一次,通过在resultMap里面的association,collection节点配置一对一,一对多的类就可以完成,这篇文章主要给大家介绍了关于Mybatis一对多和多对一处理的相关资料,需要的朋友可以参考下
建表
SQL:
create table teacher( id int not null, name varchar(30) default null, primary key (id) ); insert into teacher (id, name) values (1, '蔡老师'); create table student( id int not null , name varchar(30) default null, tid int default null, constraint fk_tid foreign key (tid) references teacher(id) ); insert into student(id, name, tid) VALUES (1, '小名', 1); insert into student(id, name, tid) VALUES (2, '小红', 1); insert into student(id, name, tid) VALUES (3, '小亮', 1); insert into student(id, name, tid) VALUES (4, '小兰', 1); insert into student(id, name, tid) VALUES (5, '笑笑', 1);
多对一处理
- 多个学生对应一个老师
- 对于学生这边而言,关联。即多个学生关联一个老师【多对一】
- 对于老师这边而言,集合。即一个老师有很多的学生【一对多】
mapper
//查询所有的学生信息以及对应的老师的信息 ListqueryStudentAndTeacher();
实体类
@Data @AllArgsConstructor @NoArgsConstructor public class Student { private int id; private String name; //学生需要关联一个老师 private Teacher teacher; }
@Data @AllArgsConstructor @NoArgsConstructor public class Teacher { private int id; private String name; }
按照查询嵌套处理
按照结果嵌套处理
回顾Mysql多对一查询方式
- 子查询
- 联表查询
一对多处理
- 一个老师有多个学生
- 对于老师这边而言,集合。即一个老师有很多的学生【一对多】
mapper
//查询指定老师的信息及其所有的学生 Teacher queryTeaAndStu(@Param("tid") int id);
实体类
@Data @AllArgsConstructor @NoArgsConstructor public class Teacher { private int id; private String name; //一个老师拥有多个学生 private Liststudents; }
@Data @AllArgsConstructor @NoArgsConstructor public class Student { private int id; private String name; private int tid; }
按照查询嵌套处理
按照查询嵌套处理
结果映射
面试高频点
- MySQL引擎
- InnoDB底层原理
- 索引
- 索引优化
小结
- 关联 - association 【多对一】
- 集合 - collection 【一对多】
- javaType & ofType
- javaType 用来指定实体类中属性的类型
- ofType 用来指定映射到List或者集合中的entity类型,泛型中的约束类型
注意点:
- 保证SQL的可读性,尽量保证通俗易懂
- 注意一对多和多对一中属性名和字段的问题
- 如果问题不好排查错误,可以使用LOG4J日志
总结
到此这篇关于Mybatis一对多和多对一处理的文章就介绍到这了,更多相关Mybatis一对多和多对一处理内容请搜索0133技术站以前的文章或继续浏览下面的相关文章希望大家以后多多支持0133技术站!
以上就是Mybatis一对多和多对一处理的深入讲解的详细内容,更多请关注0133技术站其它相关文章!