Mybatis单表CRUD与多表关联的无SQL实现方案_1: 无SQL实现单表CRUD

diboot 2.0版本框架的封装过程当中,咱们遇到的问题和最终的解决方案也许能够给此时的你提供些帮助和思路,因而就有了这些系列文章。此系列主题为“Mybatis单表CRUD与多表关联的无SQL实现方案”,目的是给出一套简单灵活易用的通用方案,能够作到1.利用通用Mapper框架实现单表CRUD无SQL,2.封装基于注解的多表关联自动绑定的无SQL实现方案。

1、Mybatis的CRUD通用解决方案

为何须要通用Mapper?

Mybatis中针对一个单表的CRUD操做通常要在其对应Mapper中写SQL,表的字段名会屡次出现,当字段变动,增减时都须要同步修改其Mapper,繁琐且易出错。针对于单表的CRUD是比较简单的,能够在Entity中将字段与数据库表的列进行绑定,而后借助一个通用Mapper实现通用的CRUD,这样针对单表CRUD的操做将再也不须要写SQL。mysql

通用Mapper框架的选择

Mybatis-plus v3.x版本除了提供通用Mapper以外,还具有了方便易用的基于Lambda的条件构造器以及逻辑删除乐观锁等解决方案。git

另外也有其余轻量级的通用Mapper实现,好比Mapper 4.x,也是一个通用Mapper框架的选择。github

用上了通用Mapper,感受越像JPA了?

若是只是单表的CRUD,通用mapper方案确实跟JPA相似,不过JPA在Java代码里写SQL和对于复杂查询的处理不便,都带来了开发维护的麻烦。依然选用Mybatis方案,既借助通用Mapper实现了相似JPA的单表处理便利性,又保留了Mybatis自定义SQL的灵活性优点。sql

多表关联如何处理?

对于多表关联的处理,通用Mapper并无给出较好的解决方案,你能够经过自定义SQL关联查询绑定,每一个都要去写SQL,这样很繁琐。另一个方案就是相似JPA的经过注解绑定表关联关系,而后实现查询结果的绑定。这个方案能够将关联查询拆解成多个单表查询,而后根据绑定关系组装最终结果,后续咱们经过自定义封装实现这个方案,按需定制你的关联绑定方案。数据库

至于为什么要将关联查询拆解成单表查询,能够到<高性能MySQL>一书中了解分解关联查询的好处缓存

归纳来说,优势 以下:app

  • 让缓存的效率更高,缓存的利用率会越高,效率固然就会越好。关联查询若是某个表发生变化,就没法使用缓存了。
  • 将查询分解后,执行单个查询能够减小锁的竞争。
  • 在应用层作关联,能够更容易的对数据库进行拆分,更容易作到高性能和高扩展性。
  • 查询自己效率也会提高。
  • 能够减小冗余记录的查询。
  • 更进一步,这样作至关于在应用中实现了哈希关联,而不是使用mysql的嵌套循环关联。某些场景哈希关联的效率要高不少。

Diboot - 简单高效的轻代码开发框架框架

相关文章
相关标签/搜索