{"id":51849217,"url":"https://github.com/dingkui/dlz-db","last_synced_at":"2026-07-23T17:01:31.033Z","repository":{"id":354132047,"uuid":"1222274768","full_name":"dingkui/dlz-db","owner":"dingkui","description":"DLZ-DB 一个不到 7000 行代码的 Java 数据库框架，让你写 SQL 像写本地代码一样直接。","archived":false,"fork":false,"pushed_at":"2026-07-02T11:47:47.000Z","size":3229,"stargazers_count":5,"open_issues_count":2,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T13:25:38.739Z","etag":null,"topics":["ai-assisted-development","ai-friendly","cursor","db","deep-path-access","java","microservice","token-optimization"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dingkui.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-27T07:52:44.000Z","updated_at":"2026-07-02T11:47:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dingkui/dlz-db","commit_stats":null,"previous_names":["dingkui/dlz.db","dingkui/dlz-db"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dingkui/dlz-db","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingkui%2Fdlz-db","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingkui%2Fdlz-db/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingkui%2Fdlz-db/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingkui%2Fdlz-db/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dingkui","download_url":"https://codeload.github.com/dingkui/dlz-db/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dingkui%2Fdlz-db/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35809505,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-23T02:00:06.683Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-assisted-development","ai-friendly","cursor","db","deep-path-access","java","microservice","token-optimization"],"created_at":"2026-07-23T17:01:30.290Z","updated_at":"2026-07-23T17:01:31.010Z","avatar_url":"https://github.com/dingkui.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DLZ-DB\n\n\u003e **一个不到 7000 行代码的 Java 数据库框架，让你写 SQL 像写本地代码一样直接。**\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n[![JDK](https://img.shields.io/badge/JDK-8+-green.svg)](https://www.oracle.com/java/)\n[![Build Status](https://github.com/dingkui/dlz-db/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/dingkui/dlz-db/actions/workflows/build-and-test.yml)\n[![Maven Central](https://img.shields.io/badge/Maven%20Central-7.1.0-orange.svg)](https://central.sonatype.com/artifact/top.dlzio/dlz-db-core)\n[![codecov](https://codecov.io/gh/dingkui/dlz-db/graph/badge.svg?token=UDX6ZH1R0Q)](https://codecov.io/gh/dingkui/dlz-db)\n\n```java\nList\u003cUser\u003e users = DB.Pojo.select(User.class)\n        .eq(User::getStatus, 1)\n        .like(User::getName, \"张\")\n        .orderByDesc(User::getCreateTime)\n        .queryBeanList();\n```\n\n没有 Mapper 接口，没有 Service 层，没有 XML。\n\n---\n\n## 版本说明\n\n当前版本 v7.1.0（开源初始版 v6.6.4）。\n\n这个项目不是从零开始的。它大约在 **2009 年**开始积累，**2014 年**左右成型，作为公司内部的数据库操作工具包投入使用。此后十年间，累计被数十个内部项目采用，适配过各种老旧系统、各种开源框架组合、各种奇奇怪怪的版本混搭。\n\n**2024 年**，我们决定将它开源。为此做了大量重构和删减——剥离内部依赖、清理历史包袱、提炼通用能力，最终发布了第一个公开版本 **6.6.4**。\n\n所以版本号不是从 1.0 开始的——因为你看到的是一个已经跑了十几年的工具，被数十个项目验证过，而不是一个刚起步的新项目。\n\n---\n\n## 为什么又一个数据库框架？\n\n如果你写过一段时间 Java，大概率经历过这些：\n\n- 为了一次简单的 CRUD，创建 6 个文件、200 行代码。\n- 线上日志一条 SQL，全局搜半小时找不到是谁执行的。\n- `@DS(\"slave\")` 写在注解里，新租户动态接入？对不起，字符串硬编码。\n- MyBatis 出异常，栈里 15 层代理，看不出错在哪一行业务代码。\n- 查询返回一个 JSON 字段，还得自己 `JSON.parseObject(...)` 一层层剥。\n\nDLZ-DB 想解决的不是\"没有框架\"，而是**\"框架长在了用户不想要它长的地方\"**。\n\n---\n\n## 四个你会立刻感受到的不同\n\n### 1. SQL 日志能直接跳到写它的那一行\n\n```\ncaller:(UserController.java:42) getList 15ms sql:SELECT * FROM user WHERE id = 1\n        ↑                                    ↑                 ↑\n   IDE 点这里直接跳转              真实耗时           参数已填充，复制即可执行\n```\n\nMyBatis 日志告诉你\"有一条 SQL 跑了\"，DLZ-DB 告诉你**\"是你的 UserController 第 42 行跑的\"**。生产排查时，这一条就值回票价。\n\n---\n\n### 2. 多数据源：运行时完全动态\n\n`@DS(\"slave\")` 在编译期就把数据源 key 写死了。想按租户、按 Header、按灰度规则路由？SpEL 补丁、手动 push/pop、AOP 顺序……每一步都在和框架较劲。\n\nDLZ-DB 把两端都做成字符串：\n\n```java\n// 运行时注册一个新数据源\nDB.Dynamic.setDataSource(prop);\n\n// 运行时用任意逻辑决定走哪个库\nString dsName = routeByTenant(tenantId);\nUser user = DB.Dynamic.use(dsName, () -\u003e\n    DB.Pojo.select(User.class).eq(User::getId, id).queryBean()\n);\n```\n\n**SaaS 多租户、动态数据源管理、ETL 工具、灰度迁移**——这些场景里注解派要绕一大圈，这里两行解决。\n\n---\n\n### 3. 核心代码不到 7000 行，2天能通读\n\n这不是\"功能少\"，是**\"不做你不需要的事\"**：\n\n- 不做 Mapper 接口和 XML 双向映射 → 省掉解析引擎。\n- 不做 SqlSession / Executor 分层 → 调用栈直通 JDBC。\n- 不做一二级缓存 → 交给 Redis / Caffeine，各司其职。\n\n你因此得到的实际好处：\n\n- **可通读**：整个框架没有黑盒，出 bug 能自己跟进源码。\n- **可定制**：想改一个行为？fork 下来一眼能看到改哪里。\n- **异常栈短**：查询异常直接告诉你 SQL 在哪，不需要穿越 10 层代理。\n- **部署轻**：jar 体积小、启动快、常驻内存低，适合微服务和工具类项目。\n\n\u003e 运行时单次查询性能与 MyBatis 相近——数据库才是瓶颈，框架层差距可以忽略。我们不在这个维度卷。\n\n---\n\n### 4. 查询结果自带深度取值\n\n```java\nResultMap result = DB.Table.select(\"user\").eq(\"id\", 1).queryOne();\n\nresult.getInt(\"age\", 0);\nresult.getStr(\"profile.address.city\", \"未知\");  // profile 是 JSON 字段\nresult.getList(\"orders\", Order.class);          // orders 是 JSON 数组\n```\n\n`ResultMap` 继承自 `JSONMap`，`a.b.c` 路径取值是原生能力，不用自己 `JSON.parseObject` 再一层层 `.get`。\n\n---\n\n## API 风格：显式 \u003e 魔法\n\nDLZ-DB 整个框架的审美是一致的：**用显式的 lambda 和链式，对抗隐式的注解和代理。**\n\n```java\n// 条件判断：三参形式，不用写 if\n.eq(name != null, \"name\", name)\n\n// 嵌套逻辑：lambda 就地表达\n.or(o -\u003e o.like(User::getName, \"关键词\").like(User::getAddress, \"关键词\"))\n\n// 数据源作用域：lambda 包起来\nDB.Dynamic.use(\"other_db\", () -\u003e { ... });\n\n// 空值自动忽略：SQL 里用方括号\n[AND status = #{status}]\n```\n\n**代码里能看见的控制流，才是真正可靠的控制流。**\n\n---\n\n## 30 秒上手\n\nDLZ-DB v7 采用多模块架构，可根据运行环境选择依赖：\n\n| 模块 | 说明 | 适用场景 |\n|------|------|---------|\n| `dlz-db-core` | 核心模块，零 Spring 依赖 | 手动集成、非 Spring 项目 |\n| `dlz-db-spring-boot-starter` | Spring Boot 自动配置 | Spring Boot 项目（推荐） |\n| `dlz-db-solon-plugin` | Solon 插件 | Solon 项目 |\n\n### Spring Boot 快速开始\n\n#### 1. 引入依赖\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003etop.dlzio\u003c/groupId\u003e\n    \u003cartifactId\u003edlz-db-spring-boot-starter\u003c/artifactId\u003e\n    \u003cversion\u003e7.1.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n#### 2. 配置数据源\n\n```yaml\nspring:\n  datasource:\n    url: jdbc:mysql://localhost:3306/test\n    username: root\n    password: 123456\n\n# DLZ-DB 配置（可选）\ndlz:\n  db:\n    logic-delete-field: deleted\n    log:\n      show-run-sql: true\n      show-caller: true\n```\n\n#### 3. 启用 DLZ-DB\n\n```java\n@Configuration\n@EnableConfigurationProperties(SpringDlzDbProperties.class)\npublic class DlzDbConfigs extends SpringDlzDbConfig {}\n```\n\n\u003e 包路径：`com.dlz.db.spring.config.SpringDlzDbConfig`、`com.dlz.db.spring.config.SpringDlzDbProperties`\n\n#### 4. 开始使用\n\n```java\n@Data\npublic class User {\n    private Long id;\n    private String name;\n    private Integer age;\n    private Integer deleted;      // 可选：存在即启用逻辑删除\n    private Date createTime;\n}\n\n@RestController\npublic class UserController {\n    @GetMapping(\"/user/{id}\")\n    public User getUser(@PathVariable Long id) {\n        return DB.Pojo.select(User.class).eq(User::getId, id).queryBean();\n    }\n}\n```\n\n**没了。** 不需要 Mapper，不需要 Service，不需要 XML。\n\n---\n\n### Solon 快速开始\n\n#### 1. 引入依赖\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003etop.dlzio\u003c/groupId\u003e\n    \u003cartifactId\u003edlz-db-solon-plugin\u003c/artifactId\u003e\n    \u003cversion\u003e7.1.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n#### 2. 配置\n\n```yaml\ndlz:\n  db:\n    logic-delete-field: deleted\n    log:\n      show-run-sql: true\n      show-caller: true\n```\n\nSolon 数据源配置（以 HikariCP 为例）：\n\n```yaml\ndatasource:\n  default:\n    jdbcUrl: jdbc:mysql://localhost:3306/test\n    username: root\n    password: 123456\n    driverClassName: com.mysql.cj.jdbc.Driver\n```\n\n#### 3. 使用\n\nSolon 下 API 完全一致，`DB.Pojo`/`DB.Table`/`DB.Jdbc`/`DB.Sql` 接口不变：\n\n```java\n@Component\npublic class UserService {\n    public User getUser(Long id) {\n        return DB.Pojo.select(User.class).eq(User::getId, id).queryBean();\n    }\n}\n```\n\nSolon 事务使用 `@Tran` 注解：\n\n```java\n@Tran\npublic void transfer(Long fromId, Long toId, BigDecimal amount) {\n    DB.Pojo.update(Account.class)\n        .setSql(\"balance = balance - #{amount}\", Params.of(\"amount\", amount))\n        .eq(Account::getId, fromId)\n        .execute();\n    DB.Pojo.update(Account.class)\n        .setSql(\"balance = balance + #{amount}\", Params.of(\"amount\", amount))\n        .eq(Account::getId, toId)\n        .execute();\n}\n```\n\n---\n\n## 常见操作速览\n\n```java\n// 查询\nUser u     = DB.Pojo.select(User.class).eq(User::getId, 1).queryBean();\nList\u003cUser\u003e list = DB.Pojo.select(User.class).eq(User::getStatus, 1).queryBeanList();\nPage\u003cUser\u003e page = DB.Pojo.select(User.class)\n        .setPage(Page.build(1, 10, Order.desc(\"create_time\")))\n        .queryBeanPage();\n\n// 插入\nDB.Pojo.insert(user);\nDB.Batch.insert(users, 100);\n\n// 更新\nDB.Pojo.update(user).eq(User::getId, id).execute();\nDB.Pojo.update(User.class).set(User::getName, \"新名字\").eq(User::getId, id).execute();\n\n// 删除（有 deleted 字段自动走逻辑删除）\nDB.Pojo.delete(User.class).eq(User::getId, id).execute();\n\n// 预设 SQL（xml / db 中定义，key 以 \"key.\" 开头）\nList\u003cUser\u003e users = DB.Sql.select(\"key.user.find\")\n        .addPara(\"status\", 1)\n        .queryList(User.class);\n```\n\n---\n\n## 六个入口，职责分工清晰\n\n```\n主操作入口（按 SQL 风格选一个）\n├─ DB.Pojo   ← 有 Bean 时首选，链式 + Lambda，类型安全\n├─ DB.Table  ← 动态表名场景，不需要 Bean\n├─ DB.Jdbc   ← 一行搞定的简单 SQL，? 占位符，秒迁 JdbcTemplate\n└─ DB.Sql    ← 复杂 / 动态 / 可复用 SQL，#{} 占位符 + 预设 SQL\n\n正交能力（任何时候可叠加）\n├─ DB.Batch    ← 批量写入\n└─ DB.Dynamic  ← 数据源切换作用域\n```\n\n---\n\n## 对 AI 也友好\n\n- 入口收敛到 `DB.`，决策树很浅。\n- 条件方法统一 `(condition, field, value)` 三参形式，特例少。\n- 返回值有机械规则：**带 `Bean` → Bean，不带 → Map，带 `(Class)` → 指定类型**。\n- 整个使用规范可以压进 **1000 token** 以内塞给 AI（见 [docs/第05章-AI辅助/5.1-AI速读.md](./docs/第05章-AI辅助/5.1-AI速读.md)）。\n\n---\n\n## 常见问题\n\n**Q：复杂 SQL 怎么写？**\n\n```java\n// 原生 SQL\nDB.Jdbc.select(\"复杂的SQL语句 where id=?\", id).queryList();\n\n// 预设 SQL\nDB.Sql.select(\"key.复杂查询\").addPara(\"x\", 1).queryList();\n\n// 条件构造器 + 自定义片段\nDB.Pojo.select(User.class)\n        .eq(User::getStatus, 1)\n        .sql(\"EXISTS (SELECT 1 FROM vip WHERE user_id=t.id AND level\u003e=#{lv})\",\n             new JSONMap(\"lv\", 3))\n        .queryBeanList();\n```\n\n**Q：如何调试 SQL？**\n\n打开 `dlz.db.log.show-run-sql=true`，日志会直接显示：\n1. 完整的可执行 SQL（参数已填充，可直接复制执行）\n2. 执行耗时\n3. 调用代码位置（IDE 中可点击跳转）\n\n**Q：性能如何？**\n\n底层直通 JDBC，无额外反射/代理损耗。与 MyBatis 运行时接近，不是我们的主要卖点——**我们卖的是简单和可控，不是性能。**\n\n**Q：能和现有 MyBatis / MP 项目共存吗？**\n\n可以。DLZ-DB 不依赖 MyBatis 体系，两者走各自的数据源和连接即可。迁移可以渐进——新模块用 DLZ-DB，老模块保持不动。\n\n**Q：v7 和 v6 的 API 兼容吗？**\n\n`DB.Pojo`/`DB.Table`/`DB.Jdbc`/`DB.Sql` 等核心 API 完全兼容。但 Maven 坐标、配置类包路径有变更，详见 [6.2-v6升级到v7](./docs/第06章-迁移与升级/6.2-v6升级到v7.md)。\n\n---\n\n## 版本历史\n\n### v7.1.0 — 2026-07-01\n\n架构级重构：插件化逻辑删除、API 命名统一、DbTable 一步式操作、测试覆盖大幅提升。\n\n#### ✨ 新增\n\n- **插件化架构**：新增 `SqlBuildInterceptor` 接口 + `DbPlugin` 注册中心，`LogicDeleteInterceptor` 从核心代码抽取为可插拔插件，后续可扩展租户隔离、数据权限等。\n- **`DbTable` 一步式操作**：新增 `insert(table, map)` / `insertWithAutoKey()` / `insertOrUpdate()` / `selectById()` / `selectByIds()` / `deleteById()` / `deleteByIds()` 直接执行 API，无需 Wrapper 链式调用。\n- **`DBDynamic.testConnection(DataSourceProperty)`**：测试数据源连接，不注册到配置池，返回成功/异常。\n- **`SqlHelper.listTables()`**：跨数据库通用表列表查询，走 JDBC `DatabaseMetaData.getTables()`，统一 MySQL/PostgreSQL/H2 行为。\n- **`PojoCache.getIdName(String tableName)`**：按表名查询主键字段名（支持 `DB.Table` 一步式操作）。\n\n#### 🔧 变更（Breaking）\n\n| 变更 | 旧 API (7.0.x) | 新 API (7.1.0) | 说明 |\n|------|----------------|----------------|------|\n| **DbPojo 方法重命名** | `DB.Pojo.select(User.class)` | `DB.Pojo.selectW(User.class)` | `select` / `delete` / `update` → `selectW` / `deleteW` / `updateW` |\n| | `DB.Pojo.select(conditionBean)` | 移除 | 请改用 `selectW(Class)` + 条件链 |\n| | `DB.Pojo.delete(conditionBean)` | 移除 | 同上 |\n| | `DB.Pojo.update(Class)` | `DB.Pojo.updateW(Class)` | 同上 |\n| **DbTable 方法重命名** | `DB.Table.select(\"user\")` | `DB.Table.selectW(\"user\")` | `select` / `insert` / `delete` / `update` → `selectW` / `insertW` / `deleteW` / `updateW` |\n| **DbBatch 方法重命名** | `DB.Batch.insert(list)` | `DB.Batch.pojoInsert(list)` | 区分 Pojo / Table / Jdbc 三种模式 |\n| | `DB.Batch.update(list)` | `DB.Batch.pojoUpdate(list)` | 同上 |\n| | — | `DB.Batch.tableInsert/tableUpdate/jdbcExecute` | 新增 Table/Jdbc 批量 API |\n| **DbJdbc 精简** | `DB.Jdbc.insert/update/delete` | 移除 | 统一用 `DB.Jdbc.execute()` |\n| **DbSql 精简** | `DB.Sql.insert/update/delete` | 移除 | 统一用 `DB.Sql.execute()` |\n| **逻辑删除** | 硬编码在 `IExecutorDelete` / `WrapperBuildUtil` | 抽取为 `LogicDeleteInterceptor` 插件 | 需通过 `DbPlugin.registerInterceptor()` 注册 |\n| **ISqlExecutor.doDb(Supplier)** | 公开默认方法 | 注释掉 | 改用 `doDb(SqlAction, msg)` 重载 |\n\n#### 🐛 修复\n\n- **`IExecutorDelete.execute()` 插件链**：逻辑删除从硬编码改为插件调用，修复 `ignoreLogicDelete` 作用域残留问题（`finally` 块确保清理）。\n- **PojoCache.getLogicDeleteInfo**：不再从 `WrapperBuildUtil.logicDeleteField` 静态变量获取，改为由 `LogicDeleteInterceptor` 构造参数注入。\n- **`NativeJdbcSupport`**：整文件注释掉（已废弃，替换为 `NativeSqlUtil`）。\n\n#### 🗑 移除\n\n- `NativeJdbcSupport.java`（已废弃两年）\n- `DbJdbc.insert/update/delete`（统一为 `execute`）\n- `DbSql.insert/update/delete`（统一为 `execute`）\n- `DbPojo.select(conditionBean)` / `delete(conditionBean)`（重命名为 `selectW/deleteW`）\n- `SqlHelper.getTableIndexs()`（未使用，替代方案为 JDBC `DatabaseMetaData.getIndexInfo()`）\n- 测试用废弃实体类：`Department` / `GoodsPrice` / `Room` / `Smoke` / `Vip`\n\n#### 📦 依赖\n\n- 版本号：`7.0.1-4` → `7.1.0`\n- `dlz-kit` → `6.6.5`\n- `dlz-spring` → `6.6.5`\n- `solon` → `3.0.6`\n\n#### ✅ 测试\n\n- 123 个文件变更，+4130 / −2410 行\n- 新增：`DbTableTest`（42 测试）、`ISqlExecutorTest`（15 测试）、batch 测试（5 文件）、wrapper 测试重构\n- `com.dlz.db.util` 包覆盖从 ~50% 提升至 ~90%\n- `IExecutorQuery` 默认方法覆盖达 100%\n\n---\n\n## 文档导航\n\n### 快速上手\n- [1.1 安装配置 - Spring Boot](./docs/第01章-快速入门/1.1-安装配置-SpringBoot.md)\n- [1.2 安装配置 - Solon](./docs/第01章-快速入门/1.2-安装配置-Solon.md)\n- [1.3 五分钟上手](./docs/第01章-快速入门/1.3-五分钟上手.md)\n- [1.4 核心概念](./docs/第01章-快速入门/1.4-核心概念.md)\n\n### 基础操作\n- [2.1 查询操作](./docs/第02章-基础操作/2.1-查询操作.md)\n- [2.2 插入更新删除](./docs/第02章-基础操作/2.2-插入更新删除.md)\n- [2.3 条件构造器](./docs/第02章-基础操作/2.3-条件构造器.md)\n- [2.4 分页排序](./docs/第02章-基础操作/2.4-分页排序.md)\n- [2.5 结果映射](./docs/第02章-基础操作/2.5-结果映射.md)\n\n### 高级特性\n- [3.1 预设 SQL](./docs/第03章-高级特性/3.1-预设SQL.md)\n- [3.2 多数据源](./docs/第03章-高级特性/3.2-多数据源.md)\n- [3.3 事务管理 - Spring Boot](./docs/第03章-高级特性/3.3-事务管理-SpringBoot.md)\n- [3.4 事务管理 - Solon](./docs/第03章-高级特性/3.4-事务管理-Solon.md)\n- [3.5 逻辑删除与批量操作](./docs/第03章-高级特性/3.5-逻辑删除与批量操作.md)\n- [3.6 日志调试](./docs/第03章-高级特性/3.6-日志调试.md)\n\n### 框架集成\n- [4.1 Spring Boot 完整配置](./docs/第04章-框架集成/4.1-SpringBoot完整配置.md)\n- [4.2 Solon 完整集成](./docs/第04章-框架集成/4.2-Solon完整集成.md)\n- [4.3 框架对比](./docs/第04章-框架集成/4.3-框架对比.md)\n- [4.4 FAQ](./docs/第04章-框架集成/4.4-FAQ.md)\n\n### 迁移与升级\n- [6.1 从 MyBatis / MP 迁移](./docs/第06章-迁移与升级/6.1-从MyBatis-MP迁移.md)\n- [6.2 v6 升级到 v7](./docs/第06章-迁移与升级/6.2-v6升级到v7.md)\n- [6.3 框架源码指南](./docs/第06章-迁移与升级/6.3-框架源码指南.md)\n\n### 其他\n- [5.1 AI 速读](./docs/第05章-AI辅助/5.1-AI速读.md)（AI 代码生成规范）\n- [5.1 AI Quick Reference (English)](./docs/Chapter05-AI/5.1-AI-Quick-Reference.md)（English AI Quick Reference）\n- [7.1 最佳实践](./docs/第07章-最佳实践/7.1-最佳实践.md)\n\n### English Documentation\n- [README (English)](./README_EN.md)\n\n---\n\n## License\n\n[Apache License 2.0](LICENSE) © DLZ KIT\n\n---\n\n\u003cdiv\u003e\n**简单的事情简单做，复杂的事情也能简单做。**\n如果觉得有帮助，请点个 ⭐ Star 支持一下！\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdingkui%2Fdlz-db","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdingkui%2Fdlz-db","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdingkui%2Fdlz-db/lists"}