1 问题描述
最近在对后台的学习又到了一个新的学习阶段,那就是学习如何使用MyBatis实现关联表查询。这是一个重要的应用,数据库设计后就必须要用到关联表查询。在学习之后也对关联表查询做了一些总结,现在就来分享一下我的总结。
2 问题分析
什么是关联表查询呢?将两个或两个以上的表按某个条件连接起来,从而选取需要的数据。多表联查是同时查询两个或两个以上的表时使用的。MyBatis实现关联表查询实现一对一、一对多以及多对多的操作其实就是对数据库进行操作,打到我们想要的数据关联。
3 解决方案
创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系。
创建classes实体类:
public class Classes {
private Integer id;
private String class_name;
private Integer teacher_id;
private Teachers teacher;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getClass_name() {
return class_name;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
public Teachers getTeacher() {
return teacher;
}
public void setTeacher(Teachers teacher) {
this.teacher = teacher;
}
public Integer getTeacher_id() {
return teacher_id;
}
public void setTeacher_id(Integer teacher_id) {
this.teacher_id = teacher_id;
}
}
创建teacher实体类:
public class Teachers {
private Integer id;
private String teacher_name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTeacher_name() {
return teacher_name;
}
public void setTeacher_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属性指定集合中元素的对象类型。