欢迎点击「算法与编程之美」↑关注我们!
本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。
1问题描述
最近在对后台的学习又到了一个新的学习阶段,那就是学习如何使用MyBatis实现关联表查询。这是一个重要的应用,数据库设计后就必须要用到关联表查询。在学习之后也对关联表查询做了一些总结,现在就来分享一下我的总结。
2问题分析
什么是关联表查询呢?将两个或两个以上的表按某个条件连接起来,从而选取需要的数据。多表联查是同时查询两个或两个以上的表时使用的。MyBatis实现关联表查询实现一对一、一对多以及多对多的操作其实就是对数据库进行操作,打到我们想要的数据关联。
3解决方案
创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系。
创建classes实体类:
public classClasses {
privateIntegerid;
privateStringclass_name;
privateIntegerteacher_id;
privateTeachersteacher;
publicInteger getId() {
returnid;
}
public voidsetId(Integer id) {
this.id= id;
}
publicString getClass_name() {
returnclass_name;
}
public voidsetClass_name(String class_name) {
this.class_name= class_name;
}
publicTeachers getTeacher() {
returnteacher;
}
public voidsetTeacher(Teachers teacher) {
this.teacher= teacher;
}
publicInteger getTeacher_id() {
returnteacher_id;
}
public voidsetTeacher_id(Integer teacher_id) {
this.teacher_id= teacher_id;
}
}
创建teacher实体类:
public classTeachers {
privateIntegerid;
privateStringteacher_name;
publicInteger getId() {
returnid;
}
public voidsetId(Integer id) {
this.id= id;
}
publicString getTeacher_name() {
returnteacher_name;
}
public voidsetTeacher_name(String teacher_name) {
this.teacher_name= teacher_name;
}
}
然后是简单的一个Mapper:
Mapper.xml
最后就是需要调用Mapper中的方法,这样就能实现一对一的联表查询。一对多的联表查询也是一样的,首先是创建数据库,然后是创建实体类,然后写Mapper接口,mapper.xml文件的写法如:
4总结
本次联表查询我采用的是使用嵌套结果映射来处理重复的联合结果的子集,我认为这种方式更容易理解,当然也可以通过执行另外一个SQL映射语句来返回预期的复杂类型。MyBatis中使用association标签来解决一对一的关联查询,association标签可用的属性如下:
property:对象属性的名称
javaType:对象属性的类型
column:所对应的外键字段名称
select:使用另一个查询封装的结果
MyBatis中使用collection标签来解决一对多的关联查询,ofType属性指定集合中元素的对象类型。
领取专属 10元无门槛券
私享最新 技术干货