dingchaochao0 2019-06-30
Mybatis中针对一个单表的CRUD操作一般要在其对应Mapper中写SQL,表的字段名会多次出现,当字段变更,增减时都需要同步修改其Mapper,繁琐且易出错。针对于单表的CRUD是比较简单的,可以在Entity中将字段与数据库表的列进行绑定,然后借助一个通用Mapper实现通用的CRUD,这样针对单表CRUD的操作将不再需要写SQL。
Mybatis-plus v3.x版本除了提供通用Mapper之外,还具备了方便易用的基于Lambda的条件构造器以及逻辑删除乐观锁等解决方案。
另外也有其他轻量级的通用Mapper实现,比如Mapper 4.x,也是一个通用Mapper框架的选择。
如果只是单表的CRUD,通用mapper方案确实跟JPA类似,不过JPA在Java代码里写SQL和对于复杂查询的处理不便,都带来了开发维护的麻烦。依然选用Mybatis方案,既借助通用Mapper实现了类似JPA的单表处理便利性,又保留了Mybatis自定义SQL的灵活性优势。
对于多表关联的处理,通用Mapper并没有给出较好的解决方案,你可以通过自定义SQL关联查询绑定,每个都要去写SQL,这样很繁琐。另外一个方案就是类似JPA的通过注解绑定表关联关系,然后实现查询结果的绑定。这个方案可以将关联查询拆解成多个单表查询,然后根据绑定关系组装最终结果,后续我们通过自定义封装实现这个方案,按需定制你的关联绑定方案。
至于为何要将关联查询拆解成单表查询,可以到<高性能MySQL>一书中了解分解关联查询的好处