跳到主要内容

2.3 第一个 CRUD

请先完成 Spring Boot 快速开始Solon 快速开始。下面的 CRUD API 在两种运行环境中保持一致。

以下核心 DB.* 操作在 Spring Boot 和 Solon 下调用形式一致;数据源初始化方式见各自的集成章节。

创建数据表

CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`age` int DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
`deleted` tinyint DEFAULT 0,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);

INSERT INTO user (name, age, email) VALUES
('张三', 25, 'zhangsan@example.com'),
('李四', 30, 'lisi@example.com'),
('王五', 28, 'wangwu@example.com');

创建实体类

@Data
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
private Integer deleted;
private Date createTime;
}

开始使用

查询

// 单条查询
User user = DB.pojo.selectWrapper(User.class).eq(User::getId, 1).queryBean();

// 条件查询
List<User> users = DB.pojo.selectWrapper(User.class)
.like(name != null, User::getName, name)
.orderByDesc(User::getCreateTime)
.queryBeanList();

// 分页查询
Page<User> page = DB.pojo.selectWrapper(User.class)
.like(name != null, User::getName, name)
.page(Page.build(pageNum, pageSize))
.queryBeanPage();

新增

User user = new User();
user.setName("张三");
DB.pojo.insert(user); // 自动回填主键
Long id = user.getId();

更新

// 方式1:更新实体中所有非 null、非 ID 字段
DB.pojo.updateWrapper(user).eq(User::getId, user.getId()).execute();
// 注意:updateWrapper(user) 会从 user 取得待更新字段

// 方式2:手动指定要更新的字段
DB.pojo.updateWrapper(User.class)
.set(User::getName, "新名字")
.set(User::getAge, 26)
.eq(User::getId, id)
.execute();

删除

DB.pojo.deleteWrapper(User.class).eq(User::getId, id).execute();

查看日志

开启 show-run-sql 后,DLZ-DB 生成的日志消息为单行;方法名和耗时会随实际操作变化,例如:

getList 12ms sql:SELECT * FROM user WHERE id = 1 AND deleted = 0

show-caller: true 只把调用方信息写入 MDC,不会自动追加一行 [调用]。要显示文件名和行号,应用的 Logback/Log4j2 pattern 还必须输出对应的 MDC 字段。