mybatis记录随便(五)一对多映射实现方式
接上一节继续一对多的实现。上节为了介绍一对一映射,规定一个用户只能对应一个角色,其实在实际的RBAC权限系统中,一个用户往往对应多个角色,然后每个角色用对应多个权限,基于实际需求,现在通过用户-角色-权限这种一对多的关系来说明一对多映射实现方式。
一、collection 集合的嵌套结果映射
和association类似,集合的嵌套结果映射就是指通过一次 SQL 查询将所有的结果查询出来,然后通过配置的结果映射,将数据映射到不同的对象中去 。
在SysUser类中增加 List<SysRole> roleList 属性用于存储用户对应的多个角色。
SysUser.java
在UserMapper.xml创建resultMap
与上一节一对一映射相比其实就是把association标签替换为collection。
所以基于对association优化,同理也可以对collection进行优化,如下
UserMapper.xml
RoleMapper.xml
可以仿照上一节对于一对一映射查询,在UserMapper.xml添加select查询,如下
所有和角色相关的查询属性都添加了“role_”作为前缀列名。
UserMapper.java配置对应接口,如下
至此,当前查询配置完成,可以通过selectAllUserAndRoles进行查询。
二、collection 集合的多级嵌套映射
当前操作用户-角色之间一对多映射,同时角色和资源之间还是会存在一对多的映射关系,这就牵扯到多级关系映射查询。
假设角色和资源也是一对多的关系映射,具体资源表信息如下
序号 | 表名 | 对应实体 | 对应数据库接口 | 对应mapper | 备注 |
1 | sys_privilege | SysPrivilege |
PrivilegeMapper.java |
PrivilegeMapper.xml |
资源表 |
PrivilegeMapper.xml添加resultMap配置
在SysRole.java添加对应的List<SysPrivilege> privilegeList。
在RoleMapper.xml添加resultMap配置如下
创建角色权限映射,继承基础的roleMap,其嵌套了privilegeList属性,直接使用PrivilegeMapper.xml里的privilegeMap。
修改UserMapper.xml
在UserMapper.java添加对应接口,如下
两层嵌套完成,测试当前接口可以查询到用户-角色-资源信息。
【说明】这里要特别注意 sys_privilege 表中列的别名,因为 sys_privilege 嵌套在rolePrivilegeListMap 中,而 rolePrivilegeListMap 的前缀是“ role ”,所以rolePrivilegeListMap 中 privilegeMap 的前缀就变成了“ role_privilege一飞在嵌套中,这个前缀需要叠加, 一定不要写错。
三、collection 集合的嵌套查询
PrivilegeMapper.xml添加映射和对应查询方法
RoleMapper.xml添加映射和对应查询方法
【说明】在上面代码中要注意 column 属性配置的{ roleId=id}, roleId 是 select 指定方法selectPrivilegeByRoleId 查询中的参数, id 是当前查询 selectRoleByUserid 中查询出的角色 id 。
修改UserMapper.xml
最后在UserMapper.java添加查询接口即可,如下
List<SysUser> selectAllUserAndRolesSelect(Long id);
至此,完成。
开发工作着,生活快乐着,留下总结,相互交流,共同进步
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2018-07-30 从实战的角度谈微服务(二):服务注册与发现(Eureka服务端)