跳到主要内容

1.2 选型与使用边界

本章只提供定性选型参考。启动时间、代码行数和吞吐量受项目规模、版本、数据库和测试方法影响;在没有可复现 benchmark 前,不在官方文档中给出“快多少倍”或固定秒数。

定性对比

维度DLZ-DBMyBatis/MyBatis-PlusJPAjOOQ
主要风格DB.* 静态门面 + WrapperMapper + SQL/XML/注解/WrapperRepository + 对象关系映射生成代码 + SQL DSL
简单 CRUD无需自写 MapperMP 可减少 CRUD 样板Repository 支持完整DSL 表达
复杂 SQLDB.jdbc 或预设 DB.sqlMyBatis SQL/XML/注解JPQL/Criteria/Native SQL类型安全 DSL
动态表/数据源DB.table / DB.ds 显式切换通常需要插件或项目封装通常需要 EntityManager/多持久化单元配置通过 DSLContext/连接配置
框架集成Spring Boot、Solon主要为 Spring 生态主要为 Jakarta/Spring 生态框架无关,可与 Spring 等集成
关联/对象图不自动管理,显式 SQLMyBatis 显式映射核心能力以 SQL/记录为主
成熟生态较小成熟

DLZ-DB 适合的场景

  • 项目愿意使用静态 DB.* 门面,并希望减少 Mapper/DAO 样板。
  • 业务以单表 CRUD 为主,复杂查询可以显式使用 SQL。
  • 需要在 Spring Boot 和 Solon 之间复用核心数据库 API。
  • 需要运行时动态注册、切换数据源,并接受“单数据源本地事务”边界。

应优先评估其他方案的场景

  • 依赖完整的对象关系级联、脏检查、一级缓存和持久化上下文:优先评估 JPA/Hibernate。
  • 希望复杂 SQL 的列、表和返回记录获得大规模编译期类型安全:优先评估 jOOQ。
  • 已经有大量成熟 Mapper/XML、插件与团队经验:继续使用 MyBatis/MyBatis-Plus 可能风险更低。
  • 要求成熟的多租户、分库分表、分布式事务或完整迁移生态:应以可验证的专门组件为准,不要仅依赖 DLZ-DB 的本地数据源切换。

DLZ-DB 当前硬边界

  • Wrapper 主要面向单表;JOIN、CTE、UNION、窗口函数和复杂聚合使用 DB.jdbc/DB.sql
  • DB.ds.use 不开启事务;DB.tx 只提供单数据源本地事务。
  • 自动更新表结构不是 Flyway/Liquibase 的完整替代,生产环境应关闭 helper.auto-update
  • 内置方言映射不等于所有数据库版本都经过完整集成测试。
  • 性能与其他框架的差异需要用自己的 SQL、数据集、连接池和运行环境 benchmark。