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     // 不返回给前端

posted @ 2026-04-27 17:16  柳成荫y  阅读(7)  评论(0)    收藏  举报