1.MyBatis-Plus: 谨慎入坑
2.MybatisPlus中QueryWrapper用法详解
3.你还在手写 join 联表查询?MyBatis-Plus 这样写太香了!源码
4.MybatisPlus中几种条件构造器运用
MyBatis-Plus: 谨慎入坑
在尝试使用Spring-Boot、源码MyBatis与MyBatis-Plus(简称MP)进行后端开发的源码项目中,我遇到了不少问题,源码以下是源码对其中几个关键问题的总结,旨在为后来者提供参考。源码swoole的源码安装
首先,源码我对于MyBatis-Plus的源码文档评价为“垃圾”。官方文档既不详尽也不及时,源码甚至鼓励用户直接阅读源代码以解决问题。源码文档中对于“条件构造器”的源码解释模糊不清,仅仅罗列了函数列表和参数说明,源码并没有深入解释设计思想和功能用途,源码这导致用户在初次接触时难以理解其作用。源码以第一个boolean condition为例,源码文档提到其用途模糊,实际上它用于在执行查询时动态添加条件,避免了多次if语句的繁琐编写,简化了代码。然而,nodemcu源码分析文档中对于这类常见且重要的功能解释不足,使得用户难以快速上手。
其次,MP的架构设计存在强制性,其推崇的架构思想在特定场景下有效,但在大多数业务开发场景中并不适用。例如,它建议避免表间外键、简化业务逻辑以减少数据库负担。然而,对于数据结构复杂、业务流程复杂的项目来说,这种简化可能导致数据不一致的问题,反而需要更复杂的数据处理逻辑。MP在设计上倾向于将关系数据库作为NoSQL数据库使用,忽略了关系数据库的精髓,如确保数据一致性等重要功能。对于违背这种设计前提的情况,MP的目录系统源码分页插件可能无法正确返回结果,如在存在left join的表中获取额外信息时,可能导致数量计算错误。
MP在一些设计细节上还需完善,比如QueryWrapper接口中直接使用字符串作为key,允许直接设置SQL语句作为条件,这在API层面混用不同的设计,降低了IDE的代码检查能力,增加了出错的风险。此外,乐观锁插件只支持在Update时校验Version,不支持删除时校验Version,这种功能上的局限性在一定程度上限制了其应用范围。
综上所述,MyBatis-Plus在某些方面表现出了局限性和设计上的不足,但也有其优势和适用场景。对于数据架构与MP设计思想一致的项目,MP可以提供一些便利。然而,对于复杂业务场景,马大叔源码建议考虑使用MyBatis Generator简化单表操作,或者选用JPA(或Spring Data JPA)等更灵活的框架。
MybatisPlus中QueryWrapper用法详解
1、MybatisPlus
MyBatisPlus 是在 MyBatis 基础上增强的工具,扩展了多种功能,保持原有功能不变,旨在简化开发流程,提升开发效率。
MyBatisPlus 依赖:mybatis-plus-boot-starter(版本稳定)
2、wrapper介绍
LambdaQueryWrapper和QueryWrapper查询功能相同,但LambdaQueryWrapper使用Lambda语法,使用起来更方便,更易于理解。
(1)、Mapper方法
Mapper方法继承BaseMapper,BaseMapper 接口中封装了一系列 CRUD 常用操作,可以直接使用。
(2)、Service方法
Service方法继承IService接口,disconf框架源码IService中封装了BaseMapper 接口,可以直接使用一系列 CRUD 常用操作。
(3)、Impl方法实现类
Impl继承ServiceImpl,实现Service接口,其中对应的Mapper和对应的实体类。
3、QueryWrapper函数方法
QueryWrapper方法常用方法,以及简单使用方式
LambdaQueryWrapper方法常用方法,以及简单使用方式,和QueryWrapper类型,如下:
4、UpdateWrapper函数更新方法
(1)、UpdateWrapper更新方法
更新的字段使用set,条件字段使用查询语句中的方法
更新语句:将name=张三的年龄设置成
(2)、使用QueryWrapper更新方法
实体类使用set方法进行设值,该实体类中id必须要有值,id是指实体类中主键,然后使用updateById进行更新该条数据。
(3)、使用LambdaUpdateWrapper
这和第一种方式类似,只是使用Lambda语法
(4)、批量保存方法
也就是内部封装的saveBatch方法,存在一些问题,使用的时候需要多加注意
(1)、数据库问题
部分数据库不支持使用saveBatch方法,例如SQLService,像MySQL、Oracle等数据库就可以安心使用了,这是一个需要注意的地方
(2)、saveBatch方法问题
saveBatch源码实现是每实现插入一批数据发给数据库,再插入一批进行相同的操作,直到完成,这样导致效率很低,这个也需要注意的地方。
解决方法:在MySQL数据库url加上一个属性就可以解决这个问题,但是每个数据库的情况不相同,所对应的解决方法也是不同的。如下示例:
今日简单一更,溜了!skr~
你还在手写 join 联表查询?MyBatis-Plus 这样写太香了!
在使用MyBatis-Plus进行开发时,你可能已经熟悉了它对join查询的局限。通常,它的mapper封装并不支持这种操作,但这并不意味着你必须自己动手实现。实际上,对于大多数依赖多表关联的业务场景,关系型数据库的优势就体现出来了。
我曾分享过一套精心编写的教程,旨在帮助开发者理解并掌握join查询的实现。这份教程深入浅出,适合在面试中提升你的技术能力,尤其是对求职中的Java开发者、前端和数据库管理员来说,非常实用。教程不仅提供了详细的实例,还包括了如何通过框架间接实现join功能的说明。
好消息是,经过实践和优化,我开发了一个jar包,巧妙地封装了这个功能。你可以选择直接安装,或者通过克隆代码并执行mvn install命令,然后引入相应的依赖,但请注意,这个jar包适用于MyBatis-Plus版本3.4.0以上。
核心类MPJLambdaWrapper和MPJQueryWrapper提供了强大的功能。比如,一个简单的三表查询对应的SQL可以这样使用MPJLambdaWrapper:
对应SQL:
MPJLambdaWrapper的功能远不止于此,它还支持分页查询,例如:
对应SQL:
当然,还有其他操作方式,但有些并不推荐,具体如下:
对应SQL:
如果你对这个jar包感兴趣,欢迎下载源码,深入学习和探索更多的可能性!
MybatisPlus中几种条件构造器运用
本文将介绍在MybatisPlus 3.5.3.1版本下,结合SpringBoot 3.1.0、druid-spring-boot-starter 1.2.4、mysql-connector 8.0.,如何运用QueryWrapper进行条件构造。QueryWrapper是MybatisPlus提供的一种强大的查询工具,它简化了SQL条件的构建过程。
QueryWrapper提供了多种方法,如:用于构造查询条件的实例方法,LambdaQueryWrapper用于Lambda表达式的条件构建,以及UpdateWrapper用于更新操作的条件构造。使用这些工具,你可以更直观、简洁地表达复杂的查询需求。
对于想要获取完整源码的朋友,只需关注公众号"架构殿堂",回复 "SpringBoot+mybatisplus+wrapper",即可获取相关代码示例。此外,如果你对Java技术栈的其他文章感兴趣,如AIGC、Java基础面试题、Netty、Spring Boot或Spring Cloud等,别忘了关注我们,我们会定期发布各类技术干货,让你随时获取最新知识。