springboot 逻辑删除、创建时间、更新时间实现 返回值 忽略 逻辑删除字段、创建时间字段和更新时间字段 不同时区(越南)
注意:创建实体类 父类 BaseEntity
@Data public class BaseEntity implements Serializable { @Schema(description = "主键") @TableId(value = "id", type = IdType.AUTO) private Long id; @Schema(description = "创建时间") @TableField(value = "create_time", fill = FieldFill.INSERT) @JsonIgnore private Date createTime; @Schema(description = "更新时间") @TableField(value = "update_time", fill = FieldFill.UPDATE) @JsonIgnore private Date updateTime; @Schema(description = "逻辑删除") @TableField("is_deleted") @TableLogic @JsonIgnore private Byte isDeleted; }
@TableLogic 逻辑删除
@TableField(value = "create_time", fill = FieldFill.INSERT)
@TableField(value = "update_time", fill = FieldFill.UPDATE)
一、逻辑删除
1、创建表时,字段默认为0
`create_time` DATETIME(0) NULL DEFAULT NULL COMMENT '头条发布时间', `update_time` DATETIME(0) NULL DEFAULT NULL COMMENT '头条最后的修改时间', `version` INT DEFAULT 1 COMMENT '乐观锁', `is_deleted` INT DEFAULT 0 COMMENT '头条是否被删除 1 删除 0 未删除',
2、配置yml文件或BaseEntity(实体类父类)
a、yml文件
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 用于打印框架生成的sql语句,便于调试
global-config:
db-config:
logic-delete-field: isDeleted #全局逻辑删除
b、BaseEntity(推荐)
@TableLogic private Byte isDeleted;
二、创建时间、删除时间
1、在BaseEntity的时间字段上添加
@TableField(value = "create_time", fill = FieldFill.INSERT) private Date createTime; @TableField(value = "update_time", fill = FieldFill.UPDATE) private Date updateTime;
2、创建自动填充类(mybatisplus)
package com.wt.lease.common.mybatisplus; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; @Component public class MybatisMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); } }
package com.foxlink.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.Date; /** * @Description: TODO * @Author: 1872428 * @Date: 2025/6/5 16:45 * @Version: 1.0 **/ @Component public class MybatisMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } @Override public void updateFill(MetaObject metaObject) { //this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } }
其他时区语法
package com.foxlink.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZoneOffset; /** * @Description: TODO * @Author: 1872428 * @Date: 2025/6/24 8:47 * @Version: 1.0 **/ @Component public class MybatisMetaObjectHandler implements MetaObjectHandler { private static final ZoneId EAST_7_ZONE = ZoneId.of("Asia/Bangkok"); @Override public void insertFill(MetaObject metaObject) { // 存储 UTC 时间 LocalDateTime now = LocalDateTime.now(EAST_7_ZONE); this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, now); this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, now); } @Override public void updateFill(MetaObject metaObject) { LocalDateTime now = LocalDateTime.now(EAST_7_ZONE); this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, now); } }
三、返回数据忽略字段
创建时间、更新时间、逻辑删除字段
添加注解:@JsonIgnore

浙公网安备 33010602011771号