文章插图
在上篇文章分享了Mybatis框架实现了一对一查询操作,但是在开发中一对多查询操作更为常用 。其实在平时生活中一对多关系就有很多,就比如一个部门下面可以有多个员工,而其中的一个员工也属于一个部门等等 。
接下来我们就来学习一下如何在项目中实现一对多的查询操作呢 。
一对多查询与上一篇一对一查询的方式一致,但不同的是在mApper配置文件中一对一查询使用的是association标签,而一对多查询使用的是collection标签 。
这里以部门和员工为例讲解一对多级联查询操作,一个部门下面关联着多个员工 。
创建两张数据表,一个是部门表,一个是员工表,这两张表具有一对多的关联关系,在员工表添加外键dept_id字段去关联部门表的主键dept_id字段 。
t_dept 部门表
文章插图
t_employee 员工表
文章插图
创建两张表对应的实体bean类 。
Dept部门类
文章插图
文章插图
Employee员工类
文章插图
【Mybatis框架实现一对多查询两种不同的实现方式】
文章插图
现在让我们看看如何获取部门信息以及其所对应的员工列表信息 。
其实和一对一映射一样,我们可以两种方式实现,分别是嵌套结果和分步查询两种方式,都可以实现一对多映射查询 。
1.嵌套结果,执行一个SQL语句(类似于MySQL的连接查询)
我们可以使用嵌套结果resultMap方式获得部门及其员工信息,代码如下:
创建DeptMapper.xml配置文件,代码如下:
文章插图
文章插图
在mapper配置文件中,<collection>元素是用来将多行员工结果映射成一个部门Dept对象的一个List集合中 。
创建数据操作接口DeptMapper,并在接口中定义getDeptInfo方法 。
文章插图
创建调用数据接口的DeptService类 。
文章插图
创建DeptOperTest测试类并测试 。
文章插图
junit测试之后输出的结果:
文章插图
文章插图
2.分步查询,执行两个select查询语句(类似于mysql的子查询)
我们可以使用嵌套Select语句方式获得部门及其员工信息,代码如下:
创建DeptMapper.xml配置文件
文章插图
文章插图
创建DeptMapper接口
文章插图
创建DeptService类
文章插图
文章插图
创建DeptOperTest测试类
文章插图
测试之后输出的结果:
文章插图
注意:部门表和员工表的主键id字段名要唯一,例如不能都写id,如果一样的话,在查询的时候就会出现,关联查询出来的员工数据只有一条记录,查不到部门对应下面的所有员工 。我之前就是将两张表的主键id字段名都写为id,导致测试结果查询出来的员工数据只有一条的情况 。
好了,今天的分享就到这里了,希望对大家的学习有所帮助,也可以在下面留言交流 。
推荐阅读
- 亲自啃了一周,终于把Mybatis源码理清,以后简历请写精通二字
- 主流的四种限流策略,我都可以通过redis实现
- 框架的本质分析——Spring框架
- Spring MVC 框架搭建配置方法及详解
- reflector 带你彻底搞懂MyBatis的底层实现之反射工具箱
- Javascript实现两变量值的互换
- mybatis-plus整合clickhouse
- netty实现websocket客户端与服务端消息透传
- 核电站|不再100%进口!中国全球首次实现商用堆生产碳-14同位素
- 不要再封装各种Util工具类了,这个神级框架值得拥有