dbVisitor 6.6.0 正式发布了!虽然从框架底层看,这次的改动不算翻天覆地,但落到实际开发体验上,提升感相当明显。两个最值得关注的点:一是规则终于支持多层嵌套了,二是新增了一套 case/when/else 规则结构。什么意思?简单说,你可以在 SQL 模板里直接写条件分支、做参数逻辑判断,用纯正的 SQL 风格来编排动态逻辑,再也不用在 XML 里堆那些又臭又长的标签了。
v6.6.0 (2026-01-25)
主要亮点
- 规则嵌套——任意规则都能作为子规则被其他规则调用,灵活性直接上了一个台阶。
- 新增
case/when/else规则,同时配套发布了完整的规则说明文档,上手成本很低。
影响范围
- 全面增强了 dbvisitor 动态 SQL 规则引擎(像
@{and}、@{or}、@{in}、@{case}这些)的稳定性、安全性和表达能力。动态 SQL 写起来更灵活,也更好控制。
更新详情
- 新增
- 引入
case/when/else规则,复杂条件分支终于有了原生支持。 - 开放规则嵌套能力,规则内部可以调用其他规则,甚至支持自身递归调用。
- 引入
- 优化
- 在
jdbc-elastic、jdbc-mongo、jdbc-redis的连接获取流程中加入了资源释放的兜底机制,异常场景下不再容易留下“僵尸连接”。 - 全面解除了
@{and}、@{or}等规则对参数数量的硬性限制,现在可以自然兼容in类多值规则的嵌套使用。
- 在
- 修复
MD5Rule无法处理SqlArg类型参数的问题,已修正。@{and}、@{or}的空值判定逻辑做了调整:当它们依赖的所有参数都是null时,对应的 SQL 片段会自动剔除——之前的行为存在不一致,现在统一了。- 动态表达式中如果字符串包含右大括号
}(例如#{ '}' }),解析器会误判为表达式终止符,导致后续内容被错误拼接到 SQL 里,存在潜在的注入风险——这个坑已经填平了。 - 引号内或函数参数中间出现逗号
,(比如@{rule, 'a,b'})时,解析器错误地将其识别为规则分隔符并截断,现在也修好了。 - 部分驱动适配器读取属性列表不全的问题,一并解决。
- 文档
- 新增
case/when/else规则专项文档,语法、示例、最佳实践都讲清楚了。 - 官网动态规则指南做了重构,新增了
Rule与传统XML方案的对比视图,高级规则(嵌套、组合、自定义)的用法说明也补全了。
- 新增
