共计 905 个字符,预计需要花费 3 分钟才能阅读完成。
在 diboot 2.0 版本框架的封装过程中,我们遇到的问题和最终的解决方案也许可以给此时的你提供些帮助和思路,于是就有了这些系列文章。此系列主题为“Mybatis 单表 CRUD 与多表关联查询的通用方案”,目的是给出一套简单灵活易用的通用方案,可以做到 1. 利用通用 Mapper 框架实现单表 CRUD,2. 自己动手封装基于注解的多表关联实现方案。
一、Mybatis 的 CRUD 通用解决方案
为什么需要通用 Mapper?
Mybatis 中针对一个单表的 CRUD 操作一般要在其对应 Mapper 中写 SQL,表的字段名会多次出现,当字段变更,增减时都需要同步修改其 Mapper,繁琐且易出错。针对于单表的 CRUD 是比较简单的,可以在 Entity 中将字段与数据库表的列进行绑定,然后借助一个通用 Mapper 实现通用的 CRUD,这样针对单表 CRUD 的操作将不再需要写 SQL。
通用 Mapper 框架的选择
Mybatis-plus v3.x 版本除了提供通用 Mapper 之外,还具备了方便易用的基于 Lambda 的条件构造器以及逻辑删除乐观锁等解决方案。
另外也有其他轻量级的通用 Mapper 实现,比如 Mapper 4.x,也是一个通用 Mapper 框架的选择。
用上了通用 Mapper,感觉越像 JPA 了?
如果只是单表的 CRUD,通用 mapper 方案确实跟 JPA 类似,不过 JPA 在 Java 代码里写 SQL 和对于复杂查询的处理不便,都带来了开发维护的麻烦。依然选用 Mybatis 方案,既借助通用 Mapper 实现了类似 JPA 的单表处理便利性,又保留了 Mybatis 自定义 SQL 的灵活性优势。
多表关联如何处理?
对于多表关联的处理,通用 Mapper 并没有给出较好的解决方案,你可以通过自定义 SQL 关联查询绑定,每个都要去写 SQL,这样很繁琐。另外一个方案就是类似 JPA 的通过注解绑定表关联关系,然后实现查询结果的绑定。这个方案可以将关联查询拆解成多个单表查询,然后根据绑定关系组装最终结果,后续我们通过自定义封装实现这个方案,按需定制你的关联绑定方案。
至于为何要将关联查询拆解成单表查询,可以到 < 高性能 MySQL> 一书中了解分解关联查询的好处
Diboot 轻代码开发框架