@TableLogic(value = "0", delval = "unix_timestamp()") @TableField(select = false)@Schema(description = "是否删除", title = "是否删除:0=未删除 非0=删除") private Long isDeleted;
@TableLogic
注解作用:这个注解通常用于逻辑删除字段,配合 MyBatis-Plus 框架使用。
参数:
value = "0"
:表示未删除的值,在逻辑上表示记录未被删除。
delval = "unix_timestamp()"
:表示删除时的值,这里使用了 unix_timestamp()
函数,将删除时间记录为 Unix 时间戳。
使用 @TableLogic
注解,MyBatis-Plus 在执行删除操作时,不会物理删除记录,而是更新 isDeleted
字段为指定的删除值(这里是 Unix 时间戳)。
@TableField
注解作用:控制字段在数据库操作中的行为,主要用于 MyBatis-Plus 框架。
参数:
select = false
:表示在查询时该字段默认不会被选中。这有助于提高查询性能,避免不必要的数据传输。
@Schema
注解作用:通常用于 OpenAPI/Swagger 注解,用来生成 API 文档。
参数:
description = "是否删除"
:提供字段的描述信息。
title = "是否删除:0=未删除 非0=删除"
:提供字段的标题信息,详细说明字段的意义和可能的值。
上述注解配置的 isDeleted
字段可能会用于以下场景:
逻辑删除:通过 @TableLogic
注解实现逻辑删除操作,避免物理删除记录,从而保留历史数据。
查询优化:通过 @TableField(select = false)
注解在默认情况下不选择该字段,优化查询性能。
API 文档生成:通过 @Schema
注解生成更清晰的 API 文档,帮助开发者理解字段的用途。
假设你有一个实体类 User
,其中包含上述字段定义:
public class User { @TableLogic(value = "0", delval = "unix_timestamp()") @TableField(select = false) @Schema(description = "是否删除", title = "是否删除:0=未删除 非0=删除") private Long isDeleted; // 其他字段和方法}
配置 MyBatis-Plus 时,无需额外配置,框架会自动识别 @TableLogic
注解,并在执行删除操作时自动处理逻辑删除。
public void deleteUser(Long userId) { userMapper.deleteById(userId); // 这将执行逻辑删除操作,即更新 isDeleted 字段为 Unix 时间戳 } public List<User> getAllUsers() { return userMapper.selectList(null); // 默认情况下,查询结果不包含 isDeleted 字段 }
通过这种方式,可以方便地管理逻辑删除记录,并生成清晰的 API 文档。
注解解析:
MyBatis-Plus 在启动时会解析实体类中的@TableLogic
注解,确定哪个字段用于逻辑删除。
SQL自动拼接:
在执行查询、更新和删除操作时,MyBatis-Plus 会根据逻辑删除配置自动拼接 SQL 语句。
拦截器:
MyBatis-Plus 通过拦截器机制对 SQL 进行拦截和修改,增加逻辑删除相关的条件。
代码生成:
当生成 CRUD 方法时,MyBatis-Plus 会根据逻辑删除配置生成相应的 SQL 语句。