AI 速读
静态入口
DB.,链式 API,无 Mapper/XML。Spring Boot 和 Solon 下完全一致。
一、入口
| 入口 | 场景 | 占位符 |
|---|---|---|
DB.Pojo | 有 Bean 的 CRUD(首选) | 条件构造器 |
DB.Table | 动态表名 | 条件构造器 |
DB.Jdbc | 一次性 SQL | ? |
DB.Sql | 预设/复杂 SQL | #{key} |
DB.Tx | 编程式事务 | — |
DB.Batch | 批量写入 | — |
DB.Dynamic | 数据源切换 | — |
二、条件方法
所有方法支持三参 eq(boolean, field, value),false 时跳过。
| 方法 | SQL |
|---|---|
eq / ne / gt / ge / lt / le | = / <> / > / >= / < / <= |
isNull / isNotNull | IS NULL / IS NOT NULL |
in / notIn | IN / NOT IN |
between / notBetween | BETWEEN / NOT BETWEEN |
like / likeLeft / likeRight / notLike | LIKE 四种变体 |
in() 的 value:List、CSV 字符串或 "sql:子查询",不可传单值。
嵌套:or(o -> ...) / and(a -> ...)。自定义片段:sql("col = #{k}", map)。指定列:columns(fields...)(不是 select())。
三、返回值
| 方法 | 返回 |
|---|---|
queryBean() / queryBeanList() / queryBeanPage() | T / List\<T\> / Page\<T\> |
queryOne() / queryList() / queryPage() | ResultMap / List / Page |
queryOne(C) / queryList(C) / queryPage(C) | 指定类型 C |
count() | int |
queryStr/Int/Long/Double() | 单列标量 |
execute() | int |
规则:带 Bean → Bean;不带 → ResultMap;带 (Class) → 指定类型。写操作必须 .execute() 结尾。
四、事务
声明式:Spring Boot @Transactional,Solon @Tran。
编程式(框架无关):
DB.Tx.run(() -> { ... }); // 默认数据源
DB.Tx.run("slave", () -> { ... }); // 指定数据源
Long id = DB.Tx.run(() -> { insert(); return id; }); // 带返回值
Solon 不支持 REQUIRES_NEW / NESTED。
五、数据源切换
DB.Dynamic.use("slave", () -> DB.Pojo.select(...).queryBeanList());
DB.Dynamic.setDataSource(prop); // 动态注册
DB.Dynamic.use() 与 @Transactional / @Tran 独立。事务内切换用 DB.Tx.run("slave", ...)。
六、硬约束
- 无 Mapper/DAO/Wrapper 类,直接
DB.Pojo.* - 占位符不混用:
DB.Jdbc用?;DB.Sql/sql()用#{key} queryOne/List/Page返回ResultMap,要 Bean 用queryBean系列- 查询列用
columns()不是select()(.columns(User::getId, User::getName)) - LIKE 用
like()/likeLeft()/likeRight()/notLike(),不是like()一种 - 插入返回自增主键:
.insertWithAutoKey()不是.execute() - 物理删除 / 查询绕过逻辑删除:
.ignoreLogicDelete(true) - 预设 SQL key 以
"key."开头 count()返回intin()不可传单值- 批量操作用
DB.Batch.insert(users),不是insertBatch()
七、Entity 约定
- 表名:驼峰转下划线(
User.class→user)。自定义:@TableName("t_user") - 字段:
User::getUserName→user_name。自定义:@TableField("email_address") - 主键:
@TableId - 逻辑删除:Bean 含
isDeleted自动启用(查询加is_deleted = 0,DELETE 转 UPDATE)
八、代码模板
// CRUD
User u = DB.Pojo.select(User.class).eq(User::getId, 1).queryBean();
List<User> list = DB.Pojo.select(User.class).like(User::getName, "张").queryBeanList();
Page<User> page = DB.Pojo.select(User.class).eq(User::getStatus, 1).page(1, 10).queryBeanPage();
DB.Pojo.insert(user);
DB.Pojo.updateById(user);
DB.Pojo.delete(User.class).eq(User::getId, 1).execute();
// 批量
DB.Batch.insert(users);
// 原生 SQL
List<ResultMap> rows = DB.Jdbc.select("SELECT * FROM user WHERE id = ?", 1).queryList();
// 预设 SQL
List<User> r = DB.Sql.select("key.user.find").addPara("status", 1).queryList(User.class);
// 事务
DB.Tx.run(() -> { DB.Pojo.insert(order); DB.Pojo.insert(orderItem); });