跳到主要内容

v6.0.2 (2025-05-06)

<dependency>
<groupId>net.hasor</groupId>
<artifactId>dbvisitor</artifactId>
<version>6.0.2</version>
</dependency>

主要看点:

  1. API 注释更加完善。
  2. 安全性提升。

影响范围

query 的 eq 方法
LambdaTemplate lambda = ...
lambda.query(UserInfoDTO.class)
.eq(UserInfoDTO::getLoginName, null) // << 当出现空值时
...

// 生成语句从 where login_name = ? 变成 where login_name is null
query 的 ne 方法
LambdaTemplate lambda = ...
lambda.query(UserInfoDTO.class)
.ne(UserInfoDTO::getLoginName, null) // << 当出现空值时
...

// 生成语句从 where login_name !=? 变成 where login_name is not null
update 和 set 相关的所有方法
LambdaTemplate lambda = ...
lambda.update(UserInfoDTO.class)
.updateTo(UserInfoDTO::getLoginName, null) // << 当出现空值时
...

// 生成语句从 set login_name = ? 变成 set login_name = null
update 和 set 相关的所有方法
LambdaTemplate lambda = ...
lambda.update(UserInfoDTO.class)
.updateRow(...) // 整行更新方式 1
.updateRowUsingMap(...) // 整行更新方式 2
...

// 整行更新情况下 UserInfoDTO 映射对象如果没有标记主键列则会引发异常。
// 解决办法:标记对象的主键列。或者调用 allowUpdateKey 方法允许主键列更新。
// updateFreedom 模式使用整行更新时必须通过 allowUpdateKey 方法允许主键列更新,才可正常使用。

更新内容

  • [新增] 新增 dbvisitor-dependencies 工程用于统一管理 dbvisitor 的依赖。
  • [优化] 为所有主要接口 API 的类型和方法补充更加详细的文档。
  • [优化] Lambda API Query 模式下 eq/ne 在生成语句时如果传递的为空值,生成语句应该使用 xxx is null。
  • [优化] Lambda API Update 模式下 set 的列中如果有空值,生成语句应该使用 xxx = null。
  • [优化] Lambda API Update 模式下的 updateRowUsingMap 和 updateRow 两个方法默认不会更新主键列。
    • 本次新增:如果对象映射没有标记主键列则会进一步引发 need to flag the primary key to ignore, or allowUpdateKey. 异常。
    • 解决办法:标记对象的主键列。或者调用 allowUpdateKey 方法允许主键列更新。
  • [优化] jdbcTemplate.queryForList 方法参数支持使用 List 类型传递位置参数,效果等同于使用数组。
  • [优化] 删除 ConditionSqlDialect 接口的 randomQuery 方法,及其所有方言中的实现。该方法并未使用到。
  • [优化] ChooseDynamicSql 类的 addChildNode 方法在接收 DynamicSql 时如果不是 IfDynamicSql 则会引发异常。
  • [优化] XmlSqlConfigResolve 类的在处理文本时如果文本为空白字符序列则自动忽略文本以减少 DynamicSql 对象数量。
  • [修复] DefaultSqlDialect 类,不支持 custom.keywords 的问题是其继承自 AbstractDialect。