<返回更多

Mybatis框架实现一对多查询两种不同的实现方式

2021-06-04  今日头条  正义的板栗君
加入收藏
Mybatis框架实现一对多查询两种不同的实现方式

 

在上篇文章分享了Mybatis框架实现了一对一查询操作,但是在开发中一对多查询操作更为常用。其实在平时生活中一对多关系就有很多,就比如一个部门下面可以有多个员工,而其中的一个员工也属于一个部门等等。

接下来我们就来学习一下如何在项目中实现一对多的查询操作呢。

一对多查询与上一篇一对一查询的方式一致,但不同的是在mApper配置文件中一对一查询使用的是association标签,而一对多查询使用的是collection标签。

这里以部门和员工为例讲解一对多级联查询操作,一个部门下面关联着多个员工。

创建两张数据表,一个是部门表,一个是员工表,这两张表具有一对多的关联关系,在员工表添加外键dept_id字段去关联部门表的主键dept_id字段。

t_dept 部门表

Mybatis框架实现一对多查询两种不同的实现方式

 

t_employee 员工表

Mybatis框架实现一对多查询两种不同的实现方式

 

创建两张表对应的实体bean类。

Dept部门类

Mybatis框架实现一对多查询两种不同的实现方式

 


Mybatis框架实现一对多查询两种不同的实现方式

 

Employee员工类

Mybatis框架实现一对多查询两种不同的实现方式

 


Mybatis框架实现一对多查询两种不同的实现方式

 

现在让我们看看如何获取部门信息以及其所对应的员工列表信息。

其实和一对一映射一样,我们可以两种方式实现,分别是嵌套结果和分步查询两种方式,都可以实现一对多映射查询。

1.嵌套结果,执行一个SQL语句(类似于MySQL的连接查询)

我们可以使用嵌套结果resultMap方式获得部门及其员工信息,代码如下:

创建DeptMapper.xml配置文件,代码如下:

Mybatis框架实现一对多查询两种不同的实现方式

 


Mybatis框架实现一对多查询两种不同的实现方式

 

在mapper配置文件中,<collection>元素是用来将多行员工结果映射成一个部门Dept对象的一个List集合中。

创建数据操作接口DeptMapper,并在接口中定义getDeptInfo方法。

Mybatis框架实现一对多查询两种不同的实现方式

 

创建调用数据接口的DeptService类。

Mybatis框架实现一对多查询两种不同的实现方式

 

创建DeptOperTest测试类并测试。

Mybatis框架实现一对多查询两种不同的实现方式

 

junit测试之后输出的结果:

Mybatis框架实现一对多查询两种不同的实现方式

 


Mybatis框架实现一对多查询两种不同的实现方式

 

2.分步查询,执行两个select查询语句(类似于mysql的子查询)

我们可以使用嵌套Select语句方式获得部门及其员工信息,代码如下:

创建DeptMapper.xml配置文件

Mybatis框架实现一对多查询两种不同的实现方式

 


Mybatis框架实现一对多查询两种不同的实现方式

 

创建DeptMapper接口

Mybatis框架实现一对多查询两种不同的实现方式

 

创建DeptService类

Mybatis框架实现一对多查询两种不同的实现方式

 


Mybatis框架实现一对多查询两种不同的实现方式

 

创建DeptOperTest测试类

Mybatis框架实现一对多查询两种不同的实现方式

 

测试之后输出的结果:

Mybatis框架实现一对多查询两种不同的实现方式

 

注意:部门表和员工表的主键id字段名要唯一,例如不能都写id,如果一样的话,在查询的时候就会出现,关联查询出来的员工数据只有一条记录,查不到部门对应下面的所有员工。我之前就是将两张表的主键id字段名都写为id,导致测试结果查询出来的员工数据只有一条的情况。

好了,今天的分享就到这里了,希望对大家的学习有所帮助,也可以在下面留言交流。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>