当前位置: 首页 > java >正文

FemalePower项目学习笔记

本文整理了 Spring Boot + MyBatis-Plus 开发中常用的注解和功能:

  • 全局异常处理(@RestControllerAdvice
  • 接口文档(Knife4j)
  • 逻辑删除(@TableLogic
  • 字段忽略(@JsonIgnore
  • saveOrUpdate 用法
  • 公共字段抽取
  • 枚举的持久化与序列化(@EnumValue / @JsonValue
  • 配置文件绑定(@ConfigurationProperties

1. @RestControllerAdvice — 全局异常处理

当在全局异常处理器类上加上 @RestControllerAdvice 注解后,所有返回 JSON 的接口发生异常时,都会被该类捕获并统一处理,从而避免接口异常信息杂乱无章。


2. Knife4j — 接口文档生成工具

  • @Tag
    写在类上,将接口进行分组,并添加描述。

    @Tag(name = "用户管理", description = "用户相关接口")
    public class UserController {}
    
  • @Operation
    写在方法上,为接口提供描述信息。


3. 逻辑删除

背景

逻辑删除是指在数据库中不真正删除记录,而是通过一个标识位(如 is_deleted)来标记记录是否被删除。

配置方式

步骤一:application.yml

mybatis-plus:global-config:db-config:logic-delete-field: flag         # 全局逻辑删除字段logic-delete-value: 1            # 删除时的值logic-not-delete-value: 0        # 未删除时的值

步骤二:实体类字段

@Schema(description = "逻辑删除")
@JsonIgnore
@TableLogic
@TableField("is_deleted")
private Byte isDeleted;

⚠ 注意:逻辑删除只对 MP 自动生成的 SQL 生效,自己写的 XML SQL 需要手动加条件。

执行 removeById 时,本质是执行更新语句,而不是物理删除。


4. @JsonIgnore — 忽略字段序列化

有些字段(如 create_timeupdate_timeis_deleted)在接口返回时无需展示,可使用:

@JsonIgnore
private Date createTime;

5. saveOrUpdate 方法

  • 主键为空 → 插入(insert

  • 主键有值 → 判断是否存在:

    • 存在 → 更新(update
    • 不存在 → 插入(insert

6. 公共字段抽取

可定义一个基类 BaseEntity 存放公共字段(如 idcreateTimeupdateTimeisDeleted),其他实体类继承即可,避免重复定义。


7. 枚举与 @EnumValue / @JsonValue

  • @EnumValue:数据库持久化时,MP 会用这个字段的值进行存储和查询。
  • @JsonValue:JSON 序列化时,返回该字段值,而不是枚举名。

示例:

@Getter
public enum ItemType {APARTMENT(1, "公寓"),ROOM(2, "房间");@EnumValue@JsonValueprivate final Integer code;private final String name;ItemType(Integer code, String name) {this.code = code;this.name = name;}
}

效果:

  • 数据库存储:1
  • JSON 返回:1

8. @ConfigurationProperties — 配置文件绑定

相比 @Value,它能批量绑定配置,代码更简洁。

配置文件

app:datasource:url: jdbc:mysql://localhost:3306/testdbusername: rootpassword: 123456

配置类

@Component
@ConfigurationProperties(prefix = "app.datasource")
public class DataSourceProperties {private String url;private String username;private String password;// Getter & Setter
}

使用

@Service
public class DataSourceService {@Autowiredprivate DataSourceProperties props;public void printInfo() {System.out.println(props.getUrl());}
}

http://www.xdnf.cn/news/17797.html

相关文章:

  • Prompt工程师基础技术学习指南:从入门到实战
  • Linux LNMP配置全流程
  • 学习:JS进阶[10]内置构造函数
  • Java开发主流框架搭配详解及学习路线指南
  • C++ stack and queue
  • 【motion】身体动作与面部表情捕捉5:Motion-X++ 数据集下载和选择
  • Java研学-RabbitMQ(六)
  • Docker:快速部署 Temporal 工作流引擎的技术指南
  • Lombok插件介绍及安装(Eclipse)
  • YOLO-v2-tiny 20种物体检测模型
  • 部署在linux上的java服务老是挂掉[排查日志]
  • 终端安全检测与防御
  • 5. synchronized 关键字 - 监视器锁 monitor lock
  • 2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?
  • MyBatis-Plus 分页失效问题解析:@Param 注解的影响与解决方案
  • “我店模式”:零售转型中的场景化突围
  • 万字长文全解析:五种主流归一化方法深入讲解(BN/LN/IN/GN/WN)
  • 资源查看-lspci命令
  • React useMemo 深度指南:原理、误区、实战与 2025 最佳实践
  • Linux网络性能调优终极指南:深度解析与实践
  • pt-online-schema-change 全解析:MySQL 表结构变更的安全之道
  • Jenkins(集群与流水线配置)
  • 神经网络的核心组件解析:从理论到实践
  • Qt字符串与数值相互转换
  • 蓝桥杯备赛 按键、LCD、定时器
  • 面试实战 问题二十七 java 使用1.8新特性,判断空
  • 3.Ansible编写和运行playbook
  • 基于 MybatisPlus 将百度天气数据存储至 PostgreSQL 数据库的实践
  • k8s中的微服务
  • HTTP 请求转发与重定向详解及其应用(含 Java 示例)