Java后端学习笔记MyBatis-Plus + SpringBoot
🧠 Java后端学习笔记(MyBatis-Plus + SpringBoot)
📌 基于今日学习内容整理(面试可用版)
一、枚举类(Enum)
public enum Status {
CANCEL(0, "已取消"),
WAIT_PAY(1, "待支付");
private final Integer value;
private final String desc;
}
📌 作用
- 表示固定状态
- 替代
0/1/2(魔法值) - 提高可读性和安全性
📌 总结
枚举用于限制状态范围,让代码更规范。
二、VO(View Object)
📌 定义
专门返回给前端的数据对象
📌 作用
- 隐藏敏感字段(password)
- 增加展示字段(状态中文)
- 调整返回结构
📌 总结
VO 是 Entity 的“加工版”,用于接口返回。
三、统一返回结果 Result ⭐
Result.ok(data);
Result.fail();
📌 返回格式
{
"code": 200,
"message": "成功",
"data": {}
}
📌 泛型解释
public static <T> Result<T>
T 表示任意类型(User / List / String)
📌 总结
Result 用于统一接口返回结构。
四、MyBatis-Plus 通用 CRUD ⭐⭐⭐
📌 常用方法
save(entity); // 新增
removeById(id); // 删除
updateById(entity); // 更新
getById(id); // 查询一个
list(); // 查询全部
saveOrUpdate(entity); // 有id更新,无id新增
📌 总结
通用 Service 可以直接完成单表 CRUD。
五、Wrapper(条件构造器)
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getStatus, 1);
📌 作用
- 构造 SQL 条件(where)
📌 对应 SQL
WHERE status = 1
📌 优点
- 不用写字符串字段
- 更安全(防止写错字段)
📌 总结
Wrapper 用来替代手写 SQL 条件。
六、逻辑删除 ⭐⭐⭐
@TableLogic
private Integer isDeleted;
📌 含义
- 0 → 未删除
- 1 → 已删除
📌 删除操作
service.removeById(id);
实际执行:
UPDATE table SET is_deleted = 1
📌 查询自动加条件
WHERE is_deleted = 0
📌 为什么用逻辑删除?
- 防止误删
- 可恢复数据
- 保留历史记录
📌 注意
👉 只对 MyBatis-Plus 自动方法有效
❌ XML 自写 SQL 不生效,需要手动加:
WHERE is_deleted = 0
七、数据库默认值 ⭐
is_deleted DEFAULT 0
📌 作用
- 防止 NULL
- 保证数据一致
- 配合逻辑删除
📌 总结
默认值是数据库的兜底机制。
八、自动填充(时间字段)⭐⭐⭐
📌 实体类
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@TableField(value = "update_time", fill = FieldFill.UPDATE)
private Date updateTime;
📌 填充处理器
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
}
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
}
}
📌 联动原理
- 注解:定义 什么时候填
- Handler:定义 填什么值
📌 流程
save → 触发 insertFill → 自动填充 createTime
update → 触发 updateFill → 自动填充 updateTime
九、接口开发(Controller)⭐⭐
📌 示例
@GetMapping("list")
public Result list() {
return Result.ok(service.list());
}
@PostMapping("saveOrUpdate")
public Result saveOrUpdate(@RequestBody PaymentType paymentType) {
service.saveOrUpdate(paymentType);
return Result.ok();
}
📌 常用注解
@GetMapping
@PostMapping
@DeleteMapping
@RequestBody
@RequestParam
十、Mapper 扫描
@MapperScan("com.xxx.mapper")
📌 作用
- 统一扫描 Mapper 接口
- 不用每个接口写
@Mapper
十一、常用注解总结 ⭐
MyBatis-Plus
@TableLogic // 逻辑删除
@TableField // 字段映射 + 自动填充
Spring
@Component // 交给Spring管理
Swagger / Knife4j
@Operation(summary = "接口说明")
Jackson
@JsonIgnore // 不返回给前端
浙公网安备 33010602011771号