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 字段。