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. 返回结果