跳到主要内容

6.2 v6 升级到 v7

从 v6.x 升级到 v7.0 的 breaking changes 与迁移步骤

为什么要升级到 v7?

v7.0 是 DLZ-DB 的一次架构级重构,核心变化:

  • 去 Spring 化:核心模块彻底剥离 Spring 依赖,不再强绑定 Spring 生态
  • 多框架适配:同时支持 Spring Boot 和 Solon,API 完全一致
  • 面向接口编程:核心抽象为 ISqlExecutor/ITxExecutor/ICacheExecutor 等接口,易于扩展
  • 更轻量:core 模块 jar 仅依赖 JDBC + dlz-kit + slf4j

迁移步骤

第一步:更新 Maven 依赖

v6 写法(单模块):

<dependency>
<groupId>top.dlzio</groupId>
<artifactId>dlz-db</artifactId>
<version>6.6.4</version>
</dependency>

v7 写法(按运行环境选择):

<!-- Spring Boot 项目 -->
<dependency>
<groupId>top.dlzio</groupId>
<artifactId>dlz-db-spring-boot-starter</artifactId>
<version>7.0.0</version>
</dependency>

<!-- Solon 项目 -->
<dependency>
<groupId>top.dlzio</groupId>
<artifactId>dlz-db-solon-plugin</artifactId>
<version>7.0.0</version>
</dependency>

<!-- 手动集成(非 Spring / 非 Solon) -->
<dependency>
<groupId>top.dlzio</groupId>
<artifactId>dlz-db-core</artifactId>
<version>7.0.0</version>
</dependency>

第二步:更新配置类

配置类包路径变更:

v6 路径v7 路径
com.dlz.db.spring.config.DlzDbConfigcom.dlz.db.spring.config.DlzDbConfig
com.dlz.db.spring.config.DlzDbPropertiescom.dlz.db.spring.config.DlzDbProperties

Spring Boot 项目修改示例:

-import com.dlz.db.spring.config.DlzDbConfig;
-import com.dlz.db.spring.config.DlzDbProperties;
+import com.dlz.db.spring.config.DlzDbConfig;
+import com.dlz.db.spring.config.DlzDbProperties;

第三步:检查 API 调用

以下核心 API 完全兼容,无需修改

  • DB.Pojo.select(...).eq(...).queryBean() → 不变
  • DB.Table.select(...) → 不变
  • DB.Jdbc.select(sql, args) → 不变
  • DB.Sql.select("key.xxx") → 不变
  • DB.Batch.insert(...) → 不变
  • DB.Dynamic.use(name, () -> ...) → 不变
  • DB.Tx.run(() -> ...) → 不变

第四步:检查已删除的类

以下类在 v7 中已删除,如有引用请迁移:

已删除替换为
IDlzDaoISqlExecutor(接口)
DlzDaoISqlExecutor(接口),或直接使用 DB.Pojo/DB.Jdbc

如果你的代码中直接注入了 DlzDao

-@Autowired
-private DlzDao dlzDao;
+// 方案 A:直接使用 DB.xxx 静态方法(推荐)
+// DB.Pojo.select(...), DB.Jdbc.select(...)
+
+// 方案 B:注入 ISqlExecutor
+@Autowired
+private ISqlExecutor sqlExecutor;

第五步:RowMapper 变更

如有自定义 RowMapper 实现,需要从 Spring 的 RowMapper 改为自定义的 com.dlz.db.core.RowMapper

-import org.springframework.jdbc.core.RowMapper;
+import com.dlz.db.core.RowMapper;

第六步:事务注解

  • Spring Boot:保持使用 @Transactional(由 spring-boot-starter 的 Spring JDBC 提供支持)
  • Solon:使用 @Tran 注解(Solon 原生事务注解)

Breaking Changes 清单

变更项v6.xv7.0影响范围
Maven artifactIddlz-dbdlz-db-core / dlz-db-spring-boot-starter / dlz-db-solon-plugin所有用户
版本号6.x7.0.0所有用户
配置类包路径com.dlz.db.spring.config.*com.dlz.db.spring.config.*Spring Boot 用户
RowMapperSpring org.springframework.jdbc.core.RowMapper自研 com.dlz.db.core.RowMapper自定义 RowMapper 用户
IDlzDao / DlzDao存在已删除直接注入 DlzDao 的用户
ISqlExecutor不存在新增接口-
ITxExecutor不存在新增接口-
ICacheExecutor不存在新增接口-
throws DataAccessException方法签名中有已移除捕获此异常的用户
@Lazy部分类上有已移除(改用抽象接口)极少

常见问题

Q1:我的项目只用了 DB.Pojo/DB.Table 等静态 API,需要改代码吗?

不需要。 所有 DB.xxx 静态 API 完全兼容,只需更新 Maven 依赖和配置类路径即可。

Q2:升级后启动报 ClassNotFoundException?

检查 Maven 依赖是否已改为新的 artifactId。v7 不再提供 dlz-db 这个 artifact。

Q3:Solon 下事务怎么用?

Solon 下使用 @Tran 注解替代 Spring 的 @Transactional,API 调用方式不变。

Q4:我想从 v6 迁移但保持最小改动?

两步走:

  1. 把依赖改为 dlz-db-spring-boot-starter(Spring Boot 项目)
  2. 更新配置类包路径
  3. 编译通过即可

迁移检查清单

  • 更新 Maven 依赖 artifactId 和版本号
  • 更新配置类 import 路径
  • 替换 RowMapper 导入
  • 替换 DlzDao/IDlzDao 注入
  • 检查是否有 DataAccessException 捕获
  • 运行测试用例验证
  • 确认日志输出正常