MybatisPlus 发布 3.5.3.2 版本,你要的功能都更新了


Mybatis-Plus 是一款 MyBatis 的增强工具包,简化 CRUD 操作。启动加载 XML 配置时注入单表 SQL 操作 ,为简化开发工作、提高生产率而生。Mybatis-Plus 启动注入动态 SQL 脚本、性能更优,让你专注业务快速敏捷开发。  

演示例子:https://gitee.com/baomidou/mybatis-plus-samples

官方文档:https://baomidou.com/

 

回应用户关于同类框架对比说明:

MP 不会去做无意义的对比(很多设定一开始就是不公平的,或者说非生产环境的模拟一些简单 SQL 的执行对比毫无意义),也不会片面的夸大自身优势,把自己有的功能别人没有的列出来,别人有的功能自己没有的不列出来(当然也不排斥客观公正的对比,好坏让用户自己去感受)。

MP 相关特性是完全支持 XML  动态 SQL 执行的,理论上性能会低于那些静态硬编码框架的执行速度(但是差距也是 ms 毫秒之间的,对于实际生产无任何意义真正的性能瓶颈在 DB IO 上面),因为 MP 存在动态 OGNL 判断以及复杂 SQL 智能优化存在耗时(这部分耗时是值得的,优化后的 SQL 会在 DB 执行上面取得更加优秀的执行速度)。

 

当前版本亮点

1,动态 SQL 智能优化支持本地缓存加速解析,更完善的租户复杂 XML 动态 SQL 支持,静态注入缓存如下:

static {// 默认支持序列化 FstSerialCaffeineJsqlParseCache,JdkSerialCaffeineJsqlParseCacheJsqlParserGlobal.setJsqlParseCache(new JdkSerialCaffeineJsqlParseCache((cache) -> cache.maximumSize(1024).expireAfterWrite(5, TimeUnit.SECONDS)));}

2,代码生成器支持更多的自定义特性,查看测试用例

com.baomidou.mybatisplus.generator.samples.H2CodeGeneratorTest;

3,大幅度减少堆内存占用加速启动速度,优化动态 SQL 解析注入方法精简,实测近500张表的超级单体减少40%+的堆内存占用。

4,完善 Spring Boot3 + JDK 17 本地 Native 的构建,暂不支持 Lambda 方法的使用。

5,增星瑞格数据库支持( 其它国产数据库需要支持欢迎 PR )

6,mybatis 升级 3.5.13 版本

7,乐观锁支持 java.time.Instant 内置执行 SQL 做了查询提前优化

8,完善 Wrapper 支持 TypeHandler 类型转换查询及其它 SQL 参数的动态映射配置

Wrappers.<H2User>lambdaQuery().apply("name={0,typeHandler=" + H2userNameJsonTypeHandler.class.getCanonicalName() + "}""{\"id\":101,\"name\":\"Tomcat\"}"))

9,脚本维护 DDL 功能支持存储过程脚本执行、支持自定义分隔符

@Componentpublic class MysqlDdl implements IDdl {
/** * 执行 SQL 脚本方式 */@Overridepublic List<String> getSqlFiles() {return Arrays.asList("db/tag-schema.sql",// `3.5.3.2` + 版本,支持执行存储过程,如下文件追加 `#$$` 其中 `$$` 为自定义执行完整 SQL 分隔符,// 存储过程执行脚本 `END` 结尾追加分隔符 `END;$$` 表示脚本结束"db/procedure.sql#$$","D:\\db\\tag-data.sql");}}
// 切换到 mysql 从库,执行 SQL 脚本ShardingKey.change("mysqlt2");ddlScript.run(new StringReader("DELETE FROM user;\n" +"INSERT INTO user (id, username, password, sex, email) VALUES\n" +"(20, 'Duo', '123456', 0, '[email protected]');"));

10,参数填充器支持多参数填充

11,更加完善的注入脚本检测处理方法

Wrappers.query()// 开启自动检查 SQL 注入.checkSqlInjection().orderByDesc("任意前端传入字段")
// 手动校验方式SqlInjectionUtils.check("任意前端传入字段")

 

其它亮点看升级日志,感恩一路支持。

升级日志

  • feat: 升级mybatis至3.5.13,mybatis-spring至2.1.1

  • feat: jsqlparser提供统一解析类,可配置解析函数,并加入缓存选项

  • feat: 增加Sequence初始化debug日志

  • feat: 参数填充器支持多参数填充

  • feat: BaseMapper新增selectMaps(page, wrapper)与selectList(page, wrapper)方法

  • feat: 乐观锁字段支持 java.time.Instant

  • feat: wrapper#apply支持配置mapping比如column={0,javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler}

  • feat: 调整 QueryWrapper 需要主动开启检查 SQL 注入过滤(移除掉wrapper的orderby的sql过滤功能)

  • feat: 新增星瑞格数据库支持

  • feat: updateWrapper#setSql方法支持动态入参参考wrapper#apply方法

  • feat: 自动 SQL 维护 DDL 支持 SQL 执行存储过程

  • perf: ktWrapper加强泛型限制

  • fix: 修复在选择springdoc文档注释时entity描述异常

  • fix: 在主键的IdTypeAUTO的情况下,Table#getAllInsertSqlColumnMaybeIf("xx.")所生成sql错误问题

  • fix: 租户插件支持update set subSelect的情况

  • fix: 修复高版本Jdk提示非法反射警告(Illegal reflective access by com.baomidou.mybatisplus.core.toolkit.SetAccessibleAction)

  • fix: 修复高版本Jdk插件动态代理反射错误 (Unable to make field protected java.lang.reflect.InvocationHandler java.lang.reflect.Proxy.h accessible)

  • fix: 修复路径替换将原有的“.”替换成了文件分隔符“/”

  • fix: 修复Beetl模板引擎无法生成注释

  • fix: 修复Types.DOUBLE类型无法映射

  • fix: 修复转换父类公共字段报错

  • fix: 修复生成器无法通过cfg.取值

  • fix: 修复单元测试下MockBean时事务回滚失败

  • fix: 修复Warpper类nonEmptyOfWhere方法命名不规范,导致Ognl未正确缓存带来的执行开销

  • fix: ClickHouseQuery类的tableComment()方法返回表注释字段为comment

  • fix: 修复在选择springdoc文档注释时entity描述异常问题

  • fix: Table#getAllInsertSqlColumnMaybeIf("xx.")下的sql生成错误问题

  • fix: Db类增加根据实体不为空的字段条件查询方法重载

  • fix: 生成器对于Kotlin的Entity文件的superEntityClass的错误

  • fix: 修复springdoc freemarker模式下 表注释取值取不到

  • opt: 增强参数填充处理器,防止因参数名称与填充名称一致类型不匹配导致转换错误

  • opt: 优化方法注入,去除SelectPage,SelectMapsPage,SelectByMap,DeleteByMap注入

  • opt: 减少MappedStatement堆内存占用

  • opt: 解决PluginUtils重复获取元数据带来的性能消耗

  • opt: 注入方法去除多余的换行符

  • opt: 去除SqlRunner持有的sqlSessionFactory变量

  • opt: 解决Sequence初始化多次问题(自定义情况下可不创建默认主键生成器)

  • opt: 优化 SqlHelper#getMapper 返回泛型

  • opt: 去除SqlRunner持有的sqlSessionFactory变量

  • docs: 修正DdlHelper注释错误


相關推薦

2022-10-13

甚至被不同国家的几十名开发者自发翻译成了不同的语言版本。 “用好 Git 很难: 很容易就犯错了,然后想自己弥补犯下的错,简直太难了。查阅 Git 文档简直就像是个先有鸡还是先有蛋的问题,你得知道你要的是啥 ,但

2024-08-12

MongoPlus v2.1.3 已经发布,像 MyBatisPlus 一样优雅操作 MongoDB 此版本更新内容包括: 恢复id字段默认存入类型 修复sort操作符 优化使用Spring事务 优化驼峰转下划线优先级 数据变动记录插件增加添加到数据库功能 详情查

2023-01-04

mybatisplus-plus1.7.2 现已发布,具体更新内容包括: 支持mpp的多主键@MppMultiId可以和mp的单主键@TableId兼容,同时修饰同一个entity的field mybatisplus-plus1.7.2支持继承多主键entity 对mybatisplus-plus在逻辑saveorupdate时的效果,对ds多数据

2024-09-20

opt: 主键生成策略(uuid)不支持的类型打印警告日志 opt: MybatisPlusException转化为PersistenceException子类

2022-08-21

近迁移到了 Java 17。 尽管仍然编译了一些模块与旧 Java 版本兼容,以支持在老版本 Java 下运行用户的项目。但现在大多数平台和插件模块都使用 Java 17,而即将推出的所有基于 IntelliJ 的 IDE 的 2022.3 版本都需要 Java 17 才能启动。

2022-11-07

方法名 new Address(toAddress), // 参数1,值随意传,反正我们要的方法签名,不是完整的inputData new Uint256(new BigInteger("1000000000000000000")) // 参数2,值随意传,反正我们要的方法签名,不是完整的inputData,如果还有其他参数,可以继续

2024-03-07

Swift 5.10 现已发布,此版本在并发语言模型中实现了完全的数据隔离。公告称,“这一重要的里程碑经过了多年的积极开发,历经多个版本。” 并发模型是在 Swift 5.5 中引入的,包括async/await、actors 和结构化并发 (structured concurre

2023-02-28

户操作体验; 项目介绍 一款 Java 语言基于 SpringBoot2.x、MybatisPlus、Vue、ElementUI、MySQL 等框架精心打造的一款前后端分离框架,致力于实现模块化、组件化、可插拔的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后

2023-07-21

远的年轻,但很少有人能做到。对于大多数人来说,之前发布的观点会产生类似于意识形态的影响,只是数量为1。 [25] 在1630年代早期,丹尼尔·麦蒂恩斯创作了一幅画,描绘了亨丽埃塔·玛丽亚向查尔斯一世递交月桂冠的场景

2022-07-05

,无须安装其它依赖。 版本0.1.0 基础功能说明 Wooca目前发布出来的版本是0.1.0。该版本实现了对Wooca的基础设想,也就是对SpringBoot应用的运行状态的管理。主要功能如下: 创建Wooca项目,选择一个空白的目录,即可创建一个

2022-08-09

反馈的问题; 项目介绍 一款 Java 语言基于 SpringBoot2.x、MybatisPlus、Vue、ElementUI、MySQL 等框架精心打造的一款前后端分离框架,致力于实现模块化、组件化、可插拔的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后

2022-09-11

目介绍 一款 Java 语言基于 SpringBoot2.x、Layui、Thymeleaf、MybatisPlus、Shiro、MySQL 等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建后台管理系统,本着简化开发、提升开发效率的初衷

2022-12-24

目介绍 一款 Java 语言基于 SpringBoot2.x、Layui、Thymeleaf、MybatisPlus、Shiro、MySQL 等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建后台管理系统,本着简化开发、提升开发效率的初衷

2022-10-01

部同步更新; 项目介绍 一款 Java 语言基于 SpringBoot2.x、MybatisPlus、Vue、ElementUI、MySQL 等框架精心打造的一款前后端分离框架,致力于实现模块化、组件化、可插拔的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后