跳到主要内容

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 / isNotNullIS NULL / IS NOT NULL
in / notInIN / NOT IN
between / notBetweenBETWEEN / NOT BETWEEN
like / likeLeft / likeRight / notLikeLIKE 四种变体

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", ...)

六、硬约束

  1. 无 Mapper/DAO/Wrapper 类,直接 DB.Pojo.*
  2. 占位符不混用:DB.Jdbc?DB.Sql / sql()#{key}
  3. queryOne/List/Page 返回 ResultMap,要 Bean 用 queryBean 系列
  4. 查询列用 columns() 不是 select().columns(User::getId, User::getName)
  5. LIKE 用 like() / likeLeft() / likeRight() / notLike(),不是 like() 一种
  6. 插入返回自增主键:.insertWithAutoKey() 不是 .execute()
  7. 物理删除 / 查询绕过逻辑删除:.ignoreLogicDelete(true)
  8. 预设 SQL key 以 "key." 开头
  9. count() 返回 int
  10. in() 不可传单值
  11. 批量操作用 DB.Batch.insert(users),不是 insertBatch()

七、Entity 约定

  • 表名:驼峰转下划线(User.classuser)。自定义:@TableName("t_user")
  • 字段:User::getUserNameuser_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); });