当我们需要从数据库获取的数据不光是一张表的数据,而是两张或两张表以上整合或分别提取的字段时,例如拿学生和班级的关系来说,查一个班级内所有学生的信息,因为班级表和学生表是分开定义的,这时候就需要用到多表联合查询。
那么要想在Mybatis中玩转联查,最主要的就是弄清表跟表之间的关系,谁对谁是一对一,谁对谁是一对多。
一对一关系
我们还是拿学生和班级的例子来说,要查一个学生所在班级的信息,一个学生对应着一个班级,所以是一对一的关系。前期的准备工作:我这里是创建了两个实体类学生和班级,也在数据库创建了两张对应的表。
学生类:
班级类:
student表:
class表:
下面是具体的代码实现:
方式一:sqlMapper配置文件形式
在resultMap标签中使用 association 标签
通过下面这条select语句去查询:
下面是查询结果,忽略这里的stulist,这是后面一对多查询时候用到的字段。
方式二:注解的形式
在@Results 注解中的@Result注解中使用@One注解
查询结果跟上面是一致的。
一对多/多对一
我觉得一对多和多对一查询起来都一样,比如说一个班级有多个学生,反过来就是多个学生对应一个班级,只是站的角度不一样,查询出来的结果是一样的,这里例子给出的是查询一个班级的所有学生信息。下面是实现代码:
方式一:sqlMapper配置文件形式
在resultMap 标签中使用collection 标签
通过下面这条select语句去查询:
下面是查询结果,忽略这里的bj,这是前面一对一查询时候用到的字段。
方式二:注解的形式
在@Results 注解中的@Result 注解中使用@Many注解
查出来的结果跟上面也是一致的。
总结:
MyBatis中有两种方式去实现多表联查:
方式一:sqlMapper配置文件
一对一:在resultMap标签中使用 association 标签
一对多:在resultMap 标签中使用collection 标签
方式二:注解
一对一:在@Results 注解中的@Result注解中使用@One注解
一对多:在@Results 注解中的@Result 注解中使用@Many注解
** 看完如果对你有帮助,记得点赞!点赞!点赞!**
版权归原作者 锡伯利亚 所有, 如有侵权,请联系我们删除。