框架变更日志
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#forechWindow(遍历匹配项周围一个区域的文本) - ✅
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 的支持 Springboot 最低兼容版本为 2.7(JDK 1.8) - ❌ 移除了对于内置 JPA 实体映射的支持,转而采用更灵活的映射接口扩展来支持自定义实现:
- ✅
EntityFieldMapper - ✅
EntityValueMapper
- ✅
- ❌ 移除了
SaveExecuter、EntityExecuter、GenericExecutor。 - ✅ Baki 重新调整,增加一级接口
insert、update、delete、execute、call。 - ✅ BakiDao 增加
ExecutionWatcher属性,支持更灵活的 SQL 执行监听操作。 - ❌ BakiDao 移除
SqlWatcher属性。 - ✅ PageHelper 增加方法
countSql,支持重写专有的内置条数查询语句。