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

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.dtcms.com/a/329031.html

相关文章:

  • ASP.NET 上传文件安全检测方案
  • 怎么使用python查看网页源代码
  • FreeRTOS创建多线程详解
  • 基于微信小程序的工作日报管理系统/基于asp.net的工作日报管理系统
  • USB批量传输数据为端点最大数据包(比如512字节)整数倍时接收端收不到数据
  • Linux系统文件完整性检查工具AIDE在生产环境中推送钉钉告警
  • 音视频处理新纪元:12款AI模型的语音转录和视频理解能力横评
  • MySQL 到 ClickHouse 明细分析链路改造:数据校验、补偿与延迟治理
  • 前端css学习笔记4:常用样式设置
  • 2025盛夏AI热浪:八大技术浪潮重构数字未来
  • RC4算法实现
  • 前后端分离项目在云服务器的部署
  • java实现sql解析器 JSQLParser
  • 16-docker的容器监控方案-prometheus实战篇
  • 30 HTB Soccer 机器 - 容易
  • 【Android】四种不同类型的ViewHolder的xml布局
  • 双写一致性问题如何解决?
  • Python 元类基础:从理解到应用的深度解析
  • 机器翻译:学习率调度详解
  • 小电视视频内容获取GUI工具
  • 长篇音频制作(小说自动配音)完整教程
  • 嵌入式 - linux软件编程: 目录 IO及时间相关的函数接口
  • 《Python学习之基础语法1:从零开始的编程之旅》
  • Verilog功能模块--SPI主机和从机(02)--SPI主机设计思路与代码解析
  • 电商项目微服务架构拆分实战
  • 使用TexLive与VScode排版论文
  • 内容索引之word转md工具 - markitdown
  • 华为 HCIE 大数据认证中 Linux 命令行的运用及价值
  • 【linux】--U盘挂载
  • 【CV 目标检测】③——目标检测方法