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

 

posted @ 2025-05-10 15:56  市丸银  阅读(97)  评论(0)    收藏  举报