框架变更日志
10.3.24
本次版本组合:rabbit-common 3.2.16、rabbit-sql 10.3.24、rabbit-sql-spring-boot-starter 5.3.25。Starter 同步依赖 SQL,SQL 同步依赖 common;IDEA 插件本次不更新。
新增
ColumnMeta.booleanStorage,支持boolean/Boolean与数字0/1(NUMERIC)、字符串"0"/"1"(ZERO_ONE_STRING)、字符串"N"/"Y"(YES_NO)双向转换。覆盖实体查询、单条/批量写入、显式set和 WHERE 参数;支持自定义字段注解,校验字段类型和非法存储值,未配置时保持现有行为。用法见 实体操作 和 JPA 适配。新增实体主键方法
existsById(id)、deleteById(id)和条件查询终态exists()。存在性查询使用常量投影及一行分页,不加载实体、不执行计数,并关闭查询资源;空主键被拒绝,未匹配时分别返回false/0。支持枚举字段:查询名称字符串或合法数字序号可转换为枚举,写入默认使用
name()。通过ColumnMeta.enumerated配置名称或序号存储,统一作用于实体单条/批量 CRUD、显式 setter、主键及字段条件,适配器在columnMeta中设置即可;JPA 文档补充@Enumerated(STRING/ORDINAL)适配。原生 SQL 枚举参数默认按名称绑定,不自动读取实体注解。实体更新新增
update().only(Entity::getField)和update().exclude(Entity::getField),分别用于只更新指定字段和排除指定字段,支持单个实体和批量按主键更新。同种配置累加,两种模式在配置时互斥,且仅作用于当前 Update 对象。兼容继承属性、自定义列名和withNullValues(),保留主键及不可更新列约束;排除全部更新字段时返回零行结果,不执行 SQL。where().set()保持显式赋值方式,不与字段选择模式混用。完整说明见 实体操作。提取
SqlGenerator.appendOrderBy,未指定排序或排序构建器为空时不再拼接空的order by;多字段排序、分页和 count/exists 行为保持正确。rabbit-common
3.2.16新增ReflectUtils.getReturnGenericType(method, index),按索引获取返回类型的泛型参数,直接复用反射类型,不重新按类名加载。支持嵌套参数化类型的原始类和具体数组;未确定的类型变量、通配符及非法索引明确报错。Mapper 默认取第一个参数,并保留protected扩展入口。ReflectUtils.isBindableObject作为 Bean 候选类型筛选,正确排除 JDK 动态代理、枚举常量子类,以及数字、文本、日期和容器的业务子类;读取参数对象不要求无参构造器,结果实例化错误仍由映射阶段处理。用法见 实用工具。
10.3.23
本次同步更新:rabbit-common 3.2.15、rabbit-sql 10.3.23、rabbit-sql-spring-boot-starter 5.3.24。IDEA 插件同步更新到 2.4.67.231-263,内置 rabbit-sql 10.3.23 和 rabbit-common 3.2.15。
- rabbit-common 新增
com.github.chengyuxing.common.tree.Tree与TreeNode<T, ID>,提供扁平数据建树、查找、路径、增删改、子树移动和保留祖先的筛选。Java 版校验重复 ID、父链成环及非法结构修改;保留缺失父节点的索引分支,支持深层树的迭代遍历。用法与边界见 实用工具。 - 文档站前端 Tree 同步增加
moveNode、filterTree:移动保留子树实例,筛选返回独立结构并保留当前顺序;两端均覆盖孤立节点、非法移动和深层树的回归测试。 ValueUtils.adaptValue(UUID.class, value)兼容标准 36 位 UUID 字符串和无横线的 32 位十六进制字符串,支持大小写;UUID 对象及null保持不变,非法格式会报错,不接受缩短分组或超长分组的宽松解析。DataRow.toEntity()和使用ValueUtils.adaptValue的实体元数据提供者可将查询字符串映射为 UUID 字段,支持 UUID 类型的单一主键。- UUID 参数改用
setString绑定带横线的标准 36 位字符串,不统一改成setObject(UUID)。文本列需能容纳 36 个字符;旧的 32 位文本主键仍可读取,但按 UUID 参数查询、更新或删除前需统一存储格式,或按原始字符串显式执行 SQL。 - 补充 UUID 转换、参数绑定和实体主键增删改查回归测试,连同错误信息回归测试,在 Java 8、Java 17 下各通过 72 项相关测试;实体增删改查使用 SQLite 文本列验证,未将原生 UUID 列视为跨数据库通用能力。
- 改善实体映射异常:查询转换与 setter 失败时包含实体、属性、列名、来源类型、目标类型及 setter;实体转 Map 的 getter 失败同样带上上下文,原始原因保留为 cause。
- 改善动态 SQL 编译及执行异常:包含资源文件、完整 SQL 名称和原始原因,覆盖词法错误、模板及常量展开后的重新编译;语法位置信息以实际编译的 SQL 片段为准。
#check、#guard保留业务异常类型和自定义提示。 - 补充实体校验说明:
@Column(length)不触发存储前长度检查,@Size、@NotNull与映射独立,业务需通过@Valid或Validator显式触发校验。
相关用法见 实体操作、JPA 适配、配置项、实用工具 和 升级与迁移。
IDEA 插件 2.4.66
插件此前已递增到 2.4.66.231-263:修复 IDEA 数据库表重命名触发的异常,XQL 文件监听器忽略非本地虚拟文件,保留本地 SQL 文件的自动重载。该版本内置 rabbit-sql 10.3.22 和 rabbit-common 3.2.14。
IDEA 插件 2.4.67
新建 Pipe 弹窗的初始预览改用合法示例类名 MyPipe,避免把 <IPipe> 当作文件名导致 Windows 的非法路径字符异常。覆盖预览文件名及输入变化的回归测试已加入。插件升级到 2.4.67.231-263,内置 rabbit-sql 10.3.23 和 rabbit-common 3.2.15,同步 UUID 值转换、实体映射及动态 SQL 异常定位改进;推荐搭配 Starter 5.3.24。
10.3.22
本次同步更新:rabbit-common 3.2.14、rabbit-sql 10.3.22、rabbit-sql-spring-boot-starter 5.3.23、IDEA 插件 2.4.65.231-263。
- 修复公共类型转换改用完整解析后,对 SQL 风格带偏移时间字符串的兼容性回退。
2026-10-10 10:35:57.672+08可直接映射到日期或 Java 时间类型,时刻为2026-10-10T02:35:57.672Z。 - 兼容日期与时间以空格分隔、秒数省略、偏移量前一个空格,以及
+08、+0800、+08:30、带秒偏移和Z等已有偏移表示;支持的小数秒仍为 1~9 位。 - 修复
MostDateTime.of(String)从文本提取 SQL 风格时间时忽略偏移量的问题;ISO/SQL 和 RFC-like GMT 提取不会再把+08:30截成+08。createISODateTime与createRFCLikeDateTime同步修复。 ValueUtils.adaptValue继续使用MostDateTime.parse(String)完整校验,解析失败不退回文本提取;非法日期、非法偏移和未识别的前后缀仍会报错。- SQL、Starter 和 IDEA 插件同步升级内置或传递依赖。显式锁定
rabbit-common的项目也需更新到3.2.14。
10.3.21
本次同步更新:rabbit-common 3.2.13、rabbit-sql 10.3.21、rabbit-sql-spring-boot-starter 5.3.22、IDEA 插件 2.4.64.231-263。
实体查询与 JDBC 日期处理
- 新增
baki.entity(Entity.class).findById(id),使用实体元数据提供的单一主键查询,支持继承字段及自定义列名。主键通过预编译参数绑定,拒绝null,未匹配记录时返回Optional.empty();现有query(queryId)仍表示查询标识。 - JDBC 日期子类映射到
java.util.Date字段时转换为普通Date,保留毫秒时间值,解决查询实体后调用toInstant()或更新时的异常;显式声明的 SQL 日期类型保留对应类型。 - JDBC 参数按实际类型分别使用
setDate、setTime、setTimestamp;普通Date按毫秒值绑定为时间戳,Timestamp保留纳秒精度。
MostDateTime 与公共类型转换
- 修复中文时间读取错误、小数秒精度丢失、RFC 月份大小写处理,以及自定义格式忽略时区的问题;支持 1~9 位小数秒,紧凑日期和指定格式严格校验非法日期。
- 新增
MostDateTime.parse(String)完整校验输入;of(String)保留从文本提取日期的能力。ValueUtils.adaptValue的日期和时间字符串转换使用完整校验,转换到Timestamp和支持纳秒的 Java 时间类型时保留精度。 - 明确
of(Temporal, ZoneId)的时区为目标时区,保留源时刻;不传时区时保留输入已有的时区。纯时间统一使用其所属时区的今天,缺少年份使用当前年份。 - 新增
toLocalDateTime()、getZonedDateTime();旧的无参toZonedDateTime()已更名为toLocalDateTime(),旧调用需要修改。 - SQL 日期转
LocalDate、SQL 时间转LocalTime保留日历值,其他转换使用 epoch 时间值和指定时区;MostDateTime同步修复 SQL 日期子类不支持toInstant()的问题。
SQL 日志高亮
SqlHighlighter改为直接扫描原始 SQL,修复末尾分号和换行丢失、大量字符串占位符碰撞,以及字符串内注释标记被误识别的问题。- 支持反引号、PostgreSQL dollar quoting、嵌套块注释、单字母函数和相邻数字;dollar quoted 内容整体作为字符串着色,RabbitScript、元数据和内联模版注释保留内部表达式配色。
升级注意:日期和时间字符串转换会拒绝未识别的前后缀和非法日期;需要文本提取时请显式使用 MostDateTime.of(String)。java.util.Date 为毫秒精度,需要纳秒精度时使用 Timestamp 或支持纳秒的 Java 时间类型。
相关用法已同步到 实体操作、配置项、JPA 适配、实用工具、故障排查 和 升级与迁移。
10.3.20
本次同步更新:rabbit-common 3.2.12、rabbit-sql 10.3.20、rabbit-sql-spring-boot-starter 5.3.21、IDEA 插件 2.4.63.231-263。
实体映射与单表操作
- 修复 JavaBean 子类重写 getter 后无法找到父类字段的问题,支持多层继承;子类同名字段优先,保留对应字段的注解信息。
Args、DataRow的实体转换同步受益。 - 支持布尔属性的
isXxx()方法引用,并按 JavaBean 规则处理属性名;未对应实体字段的方法引用会给出明确错误。 - 实体 CRUD 明确要求一个主键,拒绝复合主键、重复映射列名以及空表名、空列名,避免生成错误的更新或删除条件。
- 更换
EntityMetaProvider时清除元数据缓存,并同步元数据创建、替换和关闭操作;更换后需要重新获取实体执行器。 - 所有插入入口统一校验
NONE策略的非空主键,按主键更新的各入口也会拒绝空主键。 - 只有主键或没有可更新列的实体可查询、插入和删除;更新时明确报错。仅有
IDENTITY主键时允许生成insert ... default values,需确认目标数据库支持该语法。 - 修复插入 setter 在
save()时重复应用初始赋值的问题,后续同一字段的最后一次.set(...)生效,重复使用时保留最新赋值。 - 条件构建器递归忽略空的
and/or分组,避免产生多余连接符;空分组不视为更新、删除所需的有效条件。
批处理、JDBC 与参数解析
- 预编译批处理只遍历输入一次,不再丢失只能遍历一次的
Iterable的首行;每行参数映射只执行一次。 - 逐行解析动态 SQL 和参数,修复 XQL 循环生成的参数沿用上一行值的问题;各行预编译 SQL 必须一致,结构变化会明确报错。已执行分批的整体回滚需要事务。
- 原始 SQL 批处理使用语句快照,避免监听器和异常处理再次消费输入;
table().enableBatch()的插入、更新支持空输入和只能遍历一次的输入。 - 默认参数处理器将
File/Path读取为字节数组后绑定,避免内部打开的文件流泄漏;大文件可传入由调用方管理生命周期的InputStream。 - 命名参数解析跳过 PostgreSQL 的
$$...$$/$tag$...$tag$字符串及 MySQL 反引号标识符(包括双反引号转义),避免将其中的冒号误识别为参数。 - 校验页码、每页条数和批量大小为正数,拒绝负数记录总数及超出支持范围的分页偏移,修复分页计算的整数溢出。
事务、Mapper 与 XQL 管理
- 内置
Tx明确拒绝同一线程上的嵌套事务,保留原事务状态,并且不执行内层回调。 - 修复连接初始化失败时的资源释放;事务提交失败会尝试回滚,业务异常优先保留,回滚与清理失败作为 suppressed exceptions 附加,清理失败仍会继续释放其他连接并清除线程状态。
- 修复 Mapper 代理的
equals、hashCode、toString;父接口未标记@XQLMapper时继承方法使用子接口别名,父接口已标记时保留父接口别名。default方法仍不支持。 - XQL 初始化与重载基于上次成功配置快照决定资源复用;常量等配置改变时,即使文件名和修改时间未变也会重新解析。
- 同名管道可切换实现类;仅在加载的
Class相同时复用实例,支持类加载器变化后的替换。 - 成功初始化时统一发布资源、管道和配置快照;失败时保留上次成功的资源和管道,可修正后重试。
close()与初始化互斥,并清理缓存和快照。 - 默认 Maven 测试选择无需外部数据库的回归用例,方便独立执行验证。
Spring Boot Starter 5.3.21
- 升级依赖至
rabbit-sql 10.3.20,同步依赖示例和版本说明。本次没有新增 Starter 配置项。
IDEA 插件 2.4.63
- 完整版本号为
2.4.63.231-263,兼容 IDEA2023.1–2026.3(build231–263.*),内置rabbit-sql 10.3.20和rabbit-common 3.2.12,推荐搭配 Starter5.3.21。 - 从 Maven / Gradle 编译输出目录重新加载管道类,并更新类加载器;保存已注册的
.xql和.sql文件均可刷新。 - 不同文件的动态 SQL 控制台与数据库执行会话独立,避免连接和事务状态相互影响。
- 重载时保留当前激活配置,并以快照支持并发读取。
- 改善 Mapper 输出路径及配置文件读写错误处理、通知调度和项目关闭时的资源清理。
相关使用规则见 实体操作、事务、批量操作、XQL 文件管理器 和 IDEA 插件。
10.3.19
- 修复接口映射方法参数为实体为继承关系,或者实体内没有字段的判定严格问题,内部逻辑改为转为空
Map
10.3.18
- ✅ 修复
Baki#entity操作实体子类无法找到父类字段的 bug
10.3.17
- ✅
MostDateTime优化重构,支持格式化包含时区XXX,例如:MostDateTime#toString("yyyy-MM-dd'T'HH:mm:ss.SSSXXX") - ✅ 脚本解析引擎增加方法:
RabbitScriptEngine#eval:支持传入一个布尔条件表达式执行独立解析,例如::id != null - ✅ IDEA 插件 Rabbit SQL 更新版本
2.4.62:- ✅ 主要针对修复了 IDEA 2026.3 的 XQL 管理器树节点双击跳转定义的 bug
10.3.16
- ✅ 修复动态 SQL 中
blank的判断对于Iterable类型参数的 bug - ❌ 移除方法
StringUtils#isEmpty - ✅
rabbit-sql-spring-boot-starter更新版本5.3.17 - ✅ IDEA 插件 Rabbit SQL 更新版本
2.4.61
10.3.15
- ✅ 新增方法:
DataRow#accessAsIgnoreCase支持键名忽略大小写获取一个值 - ✅ 实体管理器增加内置默认简易实现:
EntityMetaProvider - ⚠️ 方法互相重命名:
StringUtils#isEmpty和StringUtils#isBlank - ✅
rabbit-sql-spring-boot-starter更新版本5.3.16 - ✅ IDEA 插件 Rabbit SQL 更新版本
2.4.60
10.3.14
- ✅ 修复实体映射转换实体时数据不存在将实体字段写入
null覆盖默认值的问题 - ✅
rabbit-sql-spring-boot-starter更新版本5.3.15
10.3.13
- ❌ 动态 SQL 脚本解析器移除内置管道
type - ✅
FileResource优化,增加ConnectionInterceptor支持配置请求 HTTP 类型资源的参数选项 - ✅ SQL 高亮优化,支持内联模板、元数据定义高亮
- ✅ 对象路径表达式新增语法
['key']支持获取 Map 中指定键名的数据,例如:user.name['first-name'] - ✅ 新增方法:
DataRow#walkAs支持目录表达式获取值user/addresses/0 - ✅ 修复 XQL 接口映射查询方法返回
Boolean类型的 bug - ⚠️
BakiDao#executionWatcher优化,方法重命名:onStart->before,onStop->after - ✅ XQL 元数据
-- @name value解析优化,逻辑调整为一直往后找,直到没有--行注释为止 - ❌ 移除方法:
Baki#insert,Baki#update,Baki#delete,使用Baki#execute替代 - ⚠️ 批量执行修改返回类型为
BatchResult,支持获取每一行数据的执行情况 - ✅ XQL 接口映射支持批量执行标记
XQL type = batch返回类型为BatchResult的方法 - ✅
rabbit-sql-spring-boot-starter更新版本5.3.14
插件工具
- ✅ Rabbit SQL CLI Releases 更新版本
3.0.3 - IDEA 插件 Rabbit SQL 更新版本
2.4.59,新增特性和优化如下:
- ✅ XQL File Manager 控制面板完全支持解析和修改所有属性节点:
filespipesconstantscharsetnamed-param-prefix - ✅ XQL File Manager 控制面板管道节点支持显示和定位源码内置管道实现
- ✅ 项目启动和重建索引触发 XQL 配置解析逻辑优化
- ✅ XQL 接口代码生成器支持配置参数
returnType,paramType,pageHelperProvider自动生成和管理 Java 类文件 - ✅ XQL 接口代码生成器添加 SQL 类型、参数类型、返回类型之间关系的规则约束,降低配置错误率
- ✅ XQL 接口代码生成器支持新的返回类型:
BatchResult,当 SQL 类型为batch时,参数类型定义变为泛型类型,接口将自动将参数包装为Iterable<T> - ✅ XQL 文件编辑器中添加元数据的高亮
-- @name value - ✅ XQL 文件编辑器内支持高亮内联模板变量名,支持模板定义
-- //TEMPLATE-BEGIN:xxx和使用位置${xxx}互相导航跳转 - ✅ XQL 文件解析 SQL 名自动完成提示建议过滤模板定义变量名称
- ✅ 代码生成器模板优化
- ✅ 操作
Selected opened file修复定位不准确的 bug - ✅ 修复操作
Create XQL fragment没有正常弹出的 bug - ❌ 移除 Kotlin 源码文件目录的检测操作
- ✅ 弹窗 UI 表单布局调整优化
- ✅ 一些代码和逻辑优化
rabbit-sql-spring-boot-starter
- ✅ XQL 接口映射动态代理注入逻辑优化
- ✅ 更新版本
5.3.13
10.3.12
- ✅ 分页查询逻辑优化
- ✅ XQL 文件结构化解析逻辑优化
- ✅ SQL 构建器优化
- 实体管理器
EntityManager:- ✅ 构建 SQL 逻辑优化,提升性能
- ✅
EntityMeta增加主键生成策略,支持类型IDENTITY,对应 JPA 注解@GeneratedValue的策略,在执行insert时,不包含此列,默认为数据库的自增或序列
- ✅
rabbit-sql-spring-boot-starter更新版本5.3.12 - ✅ Rabbit SQL CLI Releases 更新版本
3.0.2 - ✅ 对整体核心功能进行了一些优化
- 🥤 喝了一瓶可乐
10.3.10
- ✅ 工具类增加方法:
StringUtils#foreachWindow(遍历匹配项周围一个区域的文本) - ✅
MostDateTime支持解析中文字符日期格式,例如:二〇二六年六月二十六日,日期时间提取识别更宽松 - ✅
rabbit-sql-spring-boot-starter更新版本5.3.10 - ✅ Rabbit SQL CLI
3.0.1支持除存储过程/函数以外的 SQL 和 redis 查询结果导出文件(连接 redis 至少需要 jdk11) - ✅ 对核心功能进行了一些优化
10.3.9
- ✅ 新增属性接口:
BakiDao#databaseInfoProvider,在动态数据源框架下,无需重写BakiDao#databaseInfo - ✅
BakiDao#executionWatcher环绕执行器优化 - ❌ 删除接口
ExecutionWatcher - ✅
rabbit-sql-spring-boot-starter更新版本5.3.9- ✅ 自动配置逻辑优化
- ✅ 增加自动装配
DatabaseInfoProvider接口 Bean - ⚠️ 自动装配
ExecutionWatcher改为AroundExecutor<Execution>
10.3.8
- ✅ 修改方法:
IPageable#disableDefaultPageSql接收2个参数start和end - ❌ 移除方法:
IPageable#rewriteDefaultPageArgs - ✅ XQL 映射接口新增支持返回类型:
StringBoolean - ✅
rabbit-sql-spring-boot-starter更新版本5.3.8 - ✅ IDEA 插件更新版本
2.4.52- ✅
@XQLMapperScan支持导航到@XQLMapper接口 - ✅ 接口代码生成器返回类型分页查询支持配置
@PageableConfig注解属性,用以实现自定义分页 SQL 配置自由度
- ✅
10.3.7
- ✅ 修复只有一个关键字时 SQL 高亮产生的bug
- ✅ XQL 内联模板引用格式化优化
- ✅
IOutput工具重构优化 - ✅ 新增方法
BakiDao#databaseInfo,内部调用优化,支持重写:- 默认情况下初始化一次,单数据源和多实例多数据源默认即可
- 动态路由数据源(不同类型数据库)通过重写此方法,来实时获取准确的数据库信息,以保证自动识别分页查询 SQL 的正确性
- ❌ 移除方法
BakiDao#databaseId,BakiDao#metadata - ⚠️ 动态 SQL 运行时常量
_databaseId具体类型改为com.github.chengyuxing.sql.types.DatabaseInfo,通过_databaseId.name获取数据库名字 - ✅ 新增命令行版本工具:Rabbit SQL CLI,支持 Linux/macOS/Windows 等终端
10.3.3
- ✅ 修复了当 JDBC 驱动不支持设置
queryTimeout属性时抛出异常错误的问题,若BakiDao#queryTimeoutHandler返回 0,则不进行设置
10.3.2
- ✅ 实体转换
DataRow#toEntity提供的参数fieldMapper支持获取父类字段,增强继承实体的处理能力 - ✅
rabbit-sql-spring-boot-starter更新版本5.3.2增加默认的EntityManager.EntityMetaProvider简单实现以满足简单实体处理需求
10.3.1
- ✅ 修复
MostDateTime#of转化指定日期格式yyyyMMdd不包含时间部分的bug - ✅
rabbit-sql-spring-boot-starter更新版本5.3.1支持启动参数--xql.config.constants.[name]=[value]替换内置常量
10.3.0
- ✅ 一些小优化,并喝了一杯奶茶
10.2.9
- ✅ 修复
MostDateTime转化时间格式yyyyMMdd的bug
10.2.8
- ✅
XQLInvocationHandler接口映射逻辑优化 - ✅
rabbit-sql-spring-boot-starter修复数据源异常时导致的 SQL 异常翻译出现空指针的问题
10.2.7
- ✅ 实体查询增加方法
Query#forEach
10.2.6
- ✅ 实体
where条件构建器增加支持构建动态条件 - ✅ 接口
Baki#table移除方法where,增加方法by通过传入数据库列名构建条件
10.2.5
- ✅
XQLFileManager增加支持 SQL 对象定义元数据-- @name value,通过Sql#getMetadata获取,例如:/*[queryUsers]*/ -- @cache 30m -- @rules admin,guest select * from users; - ✅
rabbit-sql-spring-boot-starter升级到5.2.5 - ✅ IDEA 插件更新版本
2.4.42,支持 Live template:xql:metadataxql:new-inline-template
10.2.4
FOR 指令语法变更
⚠️ 动态 SQL #for 指令语法调整,最新的语法结构为:
#for item of :list [| pipe1 | pipeN | ... ] [;index as i] [;last as isLast] ...
...
#done
- ❌ 移除关键字:
delimiter,open,close - ✅ 增加关键字:
as - ✅ 增加上下文属性变量:
index,first,last,odd,even使用as关键字创建变量引用别名 - ✅
rabbit-sql-spring-boot-starter最新支持版本5.2.4
XQL 管理器
- ✅
XQLFileManager增加支持内联模板解析,其他 SQL 可根据名字直接引用,避免单独提取为模板片段对象:
内联模板不可嵌套,且必须成对,如下例子:-- //TEMPLATE-BEGIN:<name> ... -- //TEMPLATE-END/*[queryList]*/ select * from guest where -- //TEMPLATE-BEGIN:myInLineCnd -- #if :id id = :id -- #fi -- //TEMPLATE-END ; /*[queryCount]*/ select count(*) from guest where ${myInLineCnd}; - ✅ 动态 SQL 布尔条件判断支持单目语法:
!:isAlien,等效于:isAlien == false - ✅ 动态 SQL 脚本引擎逻辑优化,增加支持动态 SQL 编译缓存
- ✅ 路径表达式解析优化
- ✅ IDEA 插件最低版本支持:
2.4.41
10.2.3
- 修复动态 SQL
#for指令循环体命名参数解析 BUG - 动态 SQL 词法分析解析字符串安全优化
10.2.2
- ✅
StringUtils#isNumber优化判断 - ✅ 对象路径表达式支持下标取值语法
[],例如:user.addresses[0].name - ✅
XQLFileManager解析文件优化 - ⚠️ 属性命名参数前缀
namedParamPrefix从BakiDao中移到XQLFileManager作为全局配置项 - ✅
StringUtils#isNonNegativeInteger非负整数判断优化 - ✅
ValueUtils#getDeepValue性能优化 - ✅ 动态 SQL 解析词法分析优化
- ❌
XQLFileManager移除属性databaseId
10.2.1
- ✅ 新增标识符:
Baki#identifier - ✅
Baki#entity.query第一个可选参数作为查询 ID 带入参数中,可通过Baki#identifier获取,为根据参数拦截 SQL 提供帮助 - ✅ XQL 接口映射参数解析优化
- ✅ SQL 异常拦截统一包装为:
com.github.chengyuxing.sql.exceptions.DataAccessException - ✅ Spring Boot Starter(5.2.1)实现 SQL 异常翻译对接到 Spring 的
DataAccessException,支持拦截DuplicateKeyException等异常 - ⚠️ 包名
com.github.chengyuxing.sql.utils重命名为com.github.chengyuxing.sql.util - ⚠️ 包名
com.github.chengyuxing.common.utils重命名为com.github.chengyuxing.common.util - ⚠️ 重命名以及性能优化:
JdbcUtil->JdbcUtilsSqlutil->SqlUtilsXQLMapperUtil->XQLMapperUtilsStringUtil->StringUtilsObjectUtil->ValueUtilsReflectUtil->ReflectUtils
- ✅ 新增工具类:
NamingUtils - ⚠️ 实体映射解析逻辑调整以符合 Java Bean 规范,从找字段改为找属性,例如:
getName->name - ✅ 新增方法:
DataRow#deepGetAs - ❌ 移除:
ImmutableList - ✅
MostDateTime新增识别时间字符串格式:yyyyMMddHHmmssSSSyyyy[-/]MM[-/]dd HH:mm:ss.[SSS|ffffff|nnnnnnnnn]
- ✅ 动态 SQL 解析性能优化
10.1.2
- ✅ 实体操作
insert优化了对主键为null的约束判断
10.1.1
- ✅ 实体查询增加方法:
query#select(...)可选择字段 - ❌ 移除了实体解析内置的默认实现:
EntityMetaProvider
10.1.0
- ✅ 新增简单实体操作接口方法:
Baki#entity - ✅ 新增实体解析通用接口:
EntityMetaProvider - ❌ 移除接口:
EntityValueMapper,EntityFieldMapper - ✅ Spring Boot Starter(5.1.1)增加自动配置 Bean:
EntityMetaProvider
10.0.9
- ✅ Baki 批量修改操作接口参数新增支持实体集合映射到Map函数:
<T> int insert(@NotNull String sql, @NotNull Iterable<T> data, @NotNull Function<T, ? extends Map<String, ?>> argMapper);
10.0.8
- ⚠️
Baki#insert一级接口第一个参数表名改为传入完整sql - ✅ 新增方法
Baki#table支持根据数据对单表生成简单insert, update, delete语句执行(批量)修改操作
10.0.7
- ⚠️ 查询缓存管理器重构优化,内部取消同步锁,更新和获取机制完全由接口实现控制:
@NotNull Stream<DataRow> get(@NotNull String sql, Map<String, ?> args, @NotNull RawQueryProvider provider); - ✅ XQL 映射拦截注入接口重构优化,提高自由度
- ❌ Spring Boot Starter(5.0.8)自动配置移除了多数据源配置项
- ✅ Spring Boot Starter(5.0.8)默认单数据源自动注入配置优化,
BakiDao中所有接口对象类型属性都支持自动配置(@Bean或@Component),例如:
缓存管理器将自动注入到 Baki 中@Component public class RedisCacheManager implements QueryCacheManager { final RedisTemplate<Object, Object> redisTemplate; ... }
10.0.6
- ✅ 兼容 spring boot 4.0
- ⚠️ 移除了
SqlParseChecker,功能迁移到SqlInterceptor - ✅
BakiDao内置分页查询优化,SQL 名解析为条数查询和记录查询语句优化
10.0.5
- ✅ 一些内部优化
10.0.4
- ✅ 管道参数增加支持变量,例如:
:a | plus(:b) - ✅
#switch的#case支持变量 - ✅ 动态 SQL
#var定义变量支持出现在#for循环内作为局部变量 - ✅ 动态 SQL
#for解析逻辑优化 - ✅ 动态 SQL 强制用户参数和
#var变量定义不能重复
10.0.3
- ❌
XQLFileManager移除字段delimiter,内部重新优化解析逻辑,强制以单个;分割每个 SQL 对象,若 SQL 对象为过程语句包含多段 SQL,则在分号结尾使用行注释--来防止被提前截断,例如:/*[plsql]*/ begin select 1;-- select 2;-- end; - ❌ 字符串模板
${}解析优化,移除TemplateFormatter、NamedParamFormatter - ✅ 动态 SQL 解析参数覆盖逻辑调整:用户参数覆盖内部
#var定义的参数 - ✅
PagedResource增加方法:to
10.0.2
- ✅ 动态 SQL 新增管道
in - ✅
ClasspathResource内部优化。
10.0.1
- ✅ 动态 SQL 流程控制语句增加支持守卫语句,如果条件满足则执行分支处理逻辑,否则执行
#throw抛出异常信息并终止后面的所有操作。-- #guard :id > 0 ... -- #throw 'message' - ✅ 动态 SQL 支持前置条件检查语句,如果条件满足,则抛出异常:
-- #check :id == null throw 'message' - ✅ 动态 SQL 支持变量定义语句,并可以在 SQL 参数中使用变量:
-- #var newId = :id -- #var list = 'a,b,c' | split(',') - ✅ 管道支持不定长参数,例如:
split(','),如果没有参数,不需要加括号。 - ✅ 内置管道增加:
split,nvl,type。 - ❌ 移除管道:
pairs。 - ✅ 动态 SQL 解析抛出异常增加具体的位置行号列号。
- ✅ 查询缓存管理器
get方法增加第二个参数,SQL 执行期间的参数字典:Stream<DataRow> get(String uniqueKey, Map<String, ?> args); - ✅ 修复执行 oracle pl/sql 语句导致
end结尾分号被去掉的问题。
10.0.0
- ⚠️ Rabbit SQL 从
10.0.0开始,将只维护一个版本,默认最低支持 JDK 1.8;Starter 最低兼容 Spring Boot 2.7(JDK 1.8) - ❌ 移除了对于内置 JPA 实体映射的支持,转而采用更灵活的映射接口扩展来支持自定义实现:
- ✅
EntityFieldMapper - ✅
EntityValueMapper
- ✅
- ❌ 移除了
SaveExecuter、EntityExecuter、GenericExecutor。 - ✅ Baki 重新调整,增加一级接口
insert、update、delete、execute、call。 - ✅ BakiDao 增加
ExecutionWatcher属性,支持更灵活的 SQL 执行监听操作。 - ❌ BakiDao 移除
SqlWatcher属性。 - ✅ PageHelper 增加方法
countSql,支持重写专有的内置条数查询语句。