>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring》、《Spring Cloud Alibaba微服务开发零基础入门到实操》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 28728 个阅读者 刷新本主题
 * 贴子主题:  mybatis-plus 注解实现多表关联查询的最佳实践 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-06-20 08:57:50     消息  查看  搜索  好友  邮件  复制  引用

这里我们汇总梳理一下常用开发场景中需要涉及到 关联 的场景以及其要支持的绑定方式。

1. 注解自动绑定数据字典(自定义枚举)的显示值Label

开发过程中的枚举值,比如用户状态(ACTIVE:激活,LOCKED:锁定 ...)、身份证类型等,我们会将其名称name和值value定义在数据字典表,以支持扩展不改代码以及用户可编辑。其他数据表中关联该字典时,存储对应的value,显示时又需要查询字典表将value转换为对应的name。

通过注解绑定,我希望简单使用如这样:


@BindDict(type="USER_STATUS", field = "status")
private String statusLabel;

2. 注解自动绑定其他表的字段

如部门实体Department(department表的Java映射对象)对应的VO对象中需要关联组织Organization实体(organization表的映射对象)。

我希望简单使用如这样:


// 支持关联条件+附加条件绑定字段
@BindField(entity=Department.class, field="name", condition="department_id=id AND parent_id>=0")
private String deptName;

// 支持通过中间表的级联关联绑定字段
@BindField(entity = Organization.class, field="name", condition="this.department_id=department.id AND department.org_id=id")
private String orgName;

3. 注解自动绑定其他表实体Entity

如部门实体Department(department表的Java映射对象)对应的VO对象中需要关联组织Organization实体(organization表的映射对象)。

我希望简单使用如这样:


// 支持关联条件+附加条件绑定Entity
@BindEntity(entity = Department.class, condition="department_id=id")
private Department department;

// 通过中间表的级联关联绑定Entity(支持附加条件)
@BindEntity(entity = Organization.class, condition = "this.department_id=department.id AND department.org_id=id AND department.deleted=0")
private Organization organization;

4. 注解自动绑定其他表实体集合List<Entity>

如部门实体Department对应的VO对象中需要关联多个子部门Department实体。

我希望简单使用如这样:


// 支持关联条件+附加条件绑定多个Entity
@BindEntityList(entity = Department.class, condition = "id=parent_id")
private List<Department> children;

// 通过中间表的 多对多关联 绑定Entity(支持附加条件)
@BindEntityList(entity = Role.class, condition="this.id=user_role.user_id AND user_role.role_id=id")
private List<Role> roleList;

实现以上方案,开发过程中的大部分关联场景SQL都可以大大简化,使代码具备极好的可维护性。另外以上方案实现需要拆解成单表查询SQL通过主键去查询,可以充分利用数据库缓存,提高性能。
详细了解其实现代码,请至 Diboot - 简单高效的轻代码开发框架 (欢迎star)


----------------------------
原文链接:https://www.jianshu.com/p/b68a142509e7


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->Java常用类(上)
  JavaWeb开发-->数据类型
  JSP与Hibernate开发-->接口
  Java网络编程-->流程控制
  精通Spring-->数据类型
  Vue3开发-->使用Session(Ⅰ)
  好消息,《Spring Cloud Alibaba微服务开发零基础入门到实操...
  Spring Boot 入门,用 Spring Boot 写第一个 HelloWorld 程序
  Redis为什么单线程能够支持高并发
  使用IntelliJ IDEA开发Maven HelloWorld
  Redis 超详细总结笔记
  SpringCloud Feign的分析
  Spring API中JAVA反射—工具类ReflectionUtils
  使用Spring MVC多次读取请求Request Body的内容
  SpringMVC下的JUnit4单元测试
  Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)...
  Redis用作消息队列
  Spring Cloud 技术栈及架构一览
  Spring Boot集成shiro ehcache(使用shiro的缓存管理)
  vue项目编译75%时很慢的解决办法
  Spring MVC:切面的应用
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。