跳到主要内容

2.4 核心概念

设计理念

DLZ-DB 的核心设计理念是:极简、直观、可追踪

常见 Mapper 模式:
业务代码 → Mapper → XML/注解 SQL → JDBC → 数据库

DLZ-DB 数据访问路径:
业务代码 → DB.* → JDBC → 数据库

DLZ-DB 减少的是数据访问样板,不要求应用取消 Service。事务、复用和业务边界明显时仍应保留 Service。

架构图

┌─────────────────────────────────────────────────────────────────────────┐
│ 应用层 │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ DB (统一入口) │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────── SQL Builder (SQL构建器) ────────────────┐ │
│ ▼ ▼ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌──────────┐ │
│ │ Pojo │ │ Table │ │ Jdbc │ | Sql │ | Batch │ │
│ │ (实体操作) │ │(表名操作)│ │ (原生SQL) │ │ (预设 SQL)│ │ (批处理) │ │
│ └───────────┘ └───────────┘ └───────────┘ └──────────┘ └──────────┘ │
│ │ │ │
│ └────────────────────────┼──────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ SQL Logger (日志) │ │
│ │ · 完整SQL · 耗时 · 代码定位 │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────┐ ┌─────────────┐ │
│ │ SqlExecutor (接口) │ < -------- > │ Database │ │
│ └────────────────────────────────┘ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │ 结果取值器 │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │ │
└────────────────────────────────────┼────────────────────────────────────┘

┌─────────────┐
│ 应用 │
└─────────────┘

核心组件

入口

使用模式职责说明
DB统一入口所有操作的起点

DB 入口样例

// 查询
DB.pojo.selectWrapper(User.class) // Pojo查询(推荐)
DB.table.selectWrapper("user") // Table查询
DB.jdbc.list(sql, args) // 原生 SQL 查询
DB.sql.list("key.xxx", params) // 预设 SQL 查询

// 插入
DB.pojo.insert(user)
DB.table.insert("user", values)
DB.jdbc.execute(sql, args)
DB.sql.execute("key.xxx")

// 更新
DB.pojo.updateWrapper(user)
DB.pojo.updateWrapper(User.class)
DB.table.updateWrapper("user")
DB.jdbc.execute(sql, args)
DB.sql.execute("key.xxx")

// 删除
DB.pojo.deleteWrapper(User.class)
DB.pojo.deleteById(User.class, id)
DB.table.deleteById("user", id)
DB.jdbc.execute(sql, args)
DB.sql.execute("key.xxx")

// 批量处理
DB.batch.insert(List)
DB.batch.execute(sql, List<Object[]>)

数据访问与横切能力

入口职责说明
DB.pojo实体操作基于实体类和 Lambda 的类型安全单表 CRUD
DB.table表名操作基于表名和字段名的动态单表 CRUD
DB.jdbc原生 SQL使用 ? 位置参数
DB.sql预设 SQL使用 #{key} 命名参数
DB.batch批量处理批量插入、更新和原生 SQL 执行
DB.ds数据源注册、切换和删除数据源
DB.tx事务编程式单数据源本地事务
DB.config初始化配置方言、插件和底层执行配置

数据库操作执行方法

取值方法结果类型说明
queryOne严格取得单条结果多条时抛异常,取不到结果返回 null;只取第一条用 queryFirst
queryPage取得带翻页结果集总条数和当前页结果
queryList查询结果集结果集查询为列表
count计算条数返回 long;复杂原生 SQL 需验证自动 count 改写
execute影响条数执行增加,删除,更新操作

工作流程

查询数据流程

1. 调用 DB.pojo.selectWrapper()

2. 链式添加条件 (.eq(), .like(), ...)

3. 链式添加排序、分页(`.orderByAsc()` / `.orderByDesc()` / `.page()`)

4. 构建 SQL

5. 按日志配置输出 SQL、耗时和 MDC 调用方信息

6. 执行 JDBC

7. 结果映射(Bean / Map / ResultMap)

8. 返回结果