MybatisPlus 统一管理创建人、更新人、创建时间、更新时间等公共字段

实体类父类:

package com.byx.communitycontrol.common.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;

import java.time.LocalDateTime;


@Data
public class BaseEntity {

    /**
     * 创建人
     */
    @TableField(value = "CREATEDBY", fill = FieldFill.INSERT)
    private String createdBy;

    /**
     * 创建时间
     */
    @TableField(value = "CREATEDTIME", fill = FieldFill.INSERT)
    private LocalDateTime createdTime;
    /**
     * 更新人
     */
    @TableField(value = "UPDATEDBY", fill = FieldFill.INSERT_UPDATE)
    private String updatedBy;
    /**
     * 更新时间
     */
    @TableField(value = "UPDATEDTIME", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedTime;
}

@TableLogic
框架提供的逻辑删除注解。
配合以下配置一起使用:
mybatis-plus.configuration.global-config.db-config.logic-delete-value=1 ##字段值为1时 表示逻辑删除
mybatis-plus.configuration.global-config.db-config.logic-delete-value=0 ##字段值为0时 表示未删除
当字段添加上@TableLogic后 框架在生成sql模板时 自动在后面添加上逻辑删除字段=0(配置文件中的配置) 的查询条件

@TableField
该注解用于标识非主键的字段。
存在多个属性,各个属性的用法如下:
value :指定映射的数据库字段名
el:映射为原生 #{ … } 逻辑,相当于写在 xml 里的 #{ … } 部分。新版本已经没有el表达式了
exist:是否为数据库表字段,默认为 true。
condition:字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s}。
update:字段 update set 部分注入,例如:update=“%s+1”:表示更新时会 set version=version+1(该属性优先级高于 el 属性)。
fill:字段自动填充策略,默认为 FieldFill.DEFAULT。
… 其他的自己去官网看…

本文主要用到 fill的自动填充策略

配置类:

package com.byx.communitycontrol.context.helper;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.byx.communitycontrol.common.entity.BaseEntity;
import com.byx.communitycontrol.context.user.JwtUser;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.Objects;


@Component
public class BaseEntityConfig implements MetaObjectHandler {
    /**
     * 使用mp做添加操作时候,这个方法执行
     *
     * @param metaObject 元对象
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        //this.setFieldValByName("createdTime", LocalDateTime.now(), metaObject);
        //this.setFieldValByName("updatedTime", LocalDateTime.now(), metaObject);
        if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) {
            BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject();
            LocalDateTime now = LocalDateTime.now();
            // 创建时间为空,则以当前时间为插入时间
            if (Objects.isNull(baseEntity.getCreatedTime())) {
                baseEntity.setCreatedTime(now);
            }
            // 更新时间为空,则以当前时间为更新时间
            if (Objects.isNull(baseEntity.getUpdatedTime())) {
                baseEntity.setUpdatedTime(now);
            }
            // 此处写获取用户及用户名的业务代码
            JwtUser user = WebAppContextHelper.getUser();
            // 当前登录用户不为空,创建人为空,则当前登录用户为创建人
            if (Objects.nonNull(user) && Objects.isNull(baseEntity.getCreatedBy())) {
                baseEntity.setCreatedBy(user.getUsername());
            }
            // 当前登录用户不为空,更新人为空,则当前登录用户为更新人
            if (Objects.nonNull(user) && Objects.isNull(baseEntity.getUpdatedBy())) {
                baseEntity.setUpdatedBy(user.getUsername());
            }
        }
    }

    /**
     * 使用mp做修改操作时候,这个方法执行
     *
     * @param metaObject 元对象
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updatedTime", LocalDateTime.now(), metaObject);
        // 此处写获取用户及用户名的业务代码
        JwtUser user = WebAppContextHelper.getUser();
        this.setFieldValByName("updatedBy", user.getUsername(), metaObject);

    }

}

子类: 

package com.byx.communitycontrol.common.entity.liveService;

import com.baomidou.mybatisplus.annotation.*;
import com.byx.communitycontrol.common.entity.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.ibatis.type.JdbcType;

import java.time.LocalDateTime;


@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "X_LIFEINFORMATION")
@KeySequence(value = "SEQ_X_LIFEINFORMATION")
public class LifeInformation extends BaseEntity {

    @TableId(value = "ID", type = IdType.INPUT)
    private Integer id;

    /**
     * 作者
     */
    @TableField(value = "AUTHOR")
    private String author;

    /**
     * 标题
     */
    @TableField(value = "TITLE")
    private String title;

    /**
     * 封面
     */
    @TableField(value = "COVER", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
    private String cover;

    /**
     * 摘要
     */
    @TableField(value = "SUMMARY", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
    private String summary;
    /**
     * 内容
     */
    @TableField(value = "CONTENT", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
    private String content;

    /**
     * 发布时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "PUBLISHTIME")
    private LocalDateTime publishTime;

    /**
     * 图片
     */
    @TableField(value = "PICS", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
    private String pics;

    /**
     * 附件
     */
    @TableField(value = "ATTACHMENTS", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
    private String attachments;

    /**
     * 状态
     */
    @TableField(value = "STATUS")
    private Integer status;

    /**
     * 类型
     */
    @TableField(value = "TYPE")
    private String type;
}

猜你喜欢

转载自blog.csdn.net/gp_911014/article/details/130637046