mybatis的一对多,多对一,以及多对对的配置和使用
1. 本文章是无意中看见易百教程的 Mybatis 教程才注意到这个问题, 平时都仅仅是在用 CRUD, 忽略了这方面的问题, 真实十分羞愧
2. 首先我们开始对 mybatis 的一对多的探究
根据这个应用场景, 我们需要获取在查询一个用户信息的时候还要去读取这个用户发布的帖子
现在我们来看一看用户级联文章在 JavaBean 中的编写方式, 这就是一对多在 JavaBean 中的配置
现在我们再来看一看 Mybatis 的 Mapper 该如何编写一对多? 很简单, 就是在 resultMap 标签中配置 <collection> 标签, 用来存储查询到的文章列表, 注意 posts 代表的是用户实体的文章 List 集合
这样 Sql 查询到的内容就映射到 User 用户实体中的属性中啦, 这就是一对多的查询
3. 现在我们再来探究一下 Mybatis 的多对一, 现在有一个需求如下
现在我们来看一看文章级联用户在 JavaBean 中的编写方式, 这是多对一在 JavaBean 中的配置
现在我们再来看一看 Mybatis 的 Mapper 该如何编写多对一? 很简单, 就是在 resultMap 标签中配置 <association></association> 标签关联所属的用户实体
4. 最后我们来探究一下 Mybatis 的多对多, 在很多时候我们较好的运用多对多可以处理很多现实的逻辑问题, 比如现在我们有下面这样一个需求
当前, 一个用户可以拥有多个组, 一个组也可以拥有多个用户, 这样的关系就是多对多, 为了解决这个问题, 我们需要再用户和组之间建立一张关联的表, 用于存储他们之间的对应关系, 用户和组都通过这个关联的表, 来查询他们之间的关系
现在我我们先来看一看这个关联对象的 JavaBean 和其 Mybatis 的 Mapper 文件是怎么样的
首先是 JavaBean
再来看看这个实体对应的 Mapper 文件, 只有两个功能
现在我们开始来看我们的主角 Users 用户和 Group 组这两位的 JavaBean 和 Mapper 文件时怎么写的
先看 Users(用户实体)
Users 的 Mapper
这样查询到的的 User 对用户象就是这样的, 把这个用户所对应的组都查了出来
Users{id=0, username='yiibai', mobile='13838009988', groups=[Group{groupId=1, groupName='Group-1', users=null}, Group{groupId=2, groupName='Group-2', users=null}]}
再来看看 Group(组实体), 其实就是和 Users 实体是一样的哈
还是看 Group 的 JavaBean
再看看看 Group 的 Mapper
这样再查询 Group 的时候就会把这个组的所有成员都查询出来了
Group{groupId=0, groupName='Group-1', users=[Users{id=1, username='yiibai', mobile='13838009988', groups=null}, Users{id=2, username='User-name-1', mobile='13838009988', groups=null}]}
5. 各位看官注意哈, 本文中并没有给出所有源码, 而是仅仅看重点, 当前本文中的所有示例都是在下根据易百教程的 Mybatis 教程https://www.yiibai.com/mybatis/中的案例所测试, 在下就仅仅介绍点重点和个人见解了