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.DlzDbConfig | com.dlz.db.spring.config.DlzDbConfig |
com.dlz.db.spring.config.DlzDbProperties | com.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 中已删除,如有引用请迁移:
| 已删除 | 替换为 |
|---|---|
IDlzDao | ISqlExecutor(接口) |
DlzDao | ISqlExecutor(接口),或直接使用 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.x | v7.0 | 影响范围 |
|---|---|---|---|
| Maven artifactId | dlz-db | dlz-db-core / dlz-db-spring-boot-starter / dlz-db-solon-plugin | 所有用户 |
| 版本号 | 6.x | 7.0.0 | 所有用户 |
| 配置类包路径 | com.dlz.db.spring.config.* | com.dlz.db.spring.config.* | Spring Boot 用户 |
RowMapper | Spring 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 迁移但保持最小改动?
两步走:
- 把依赖改为
dlz-db-spring-boot-starter(Spring Boot 项目) - 更新配置类包路径
- 编译通过即可
迁移检查清单
- 更新 Maven 依赖 artifactId 和版本号
- 更新配置类 import 路径
- 替换
RowMapper导入 - 替换
DlzDao/IDlzDao注入 - 检查是否有
DataAccessException捕获 - 运行测试用例验证
- 确认日志输出正常