MyBatis-Plus-实用的功能自动填充字段

前言:

java项目用到了mybatis-plus,在一些类里面需要在更新时候,统一设置,修改人,修改ID,修改时间。新增时候设置 创建人,创建时间等

基础类:

@Data
public abstract class BaseModel implements Serializable {
    /**
     * 逻辑删除
     */
    @TableField(value = "is_delete", fill = FieldFill.INSERT)
    @TableLogic
    @ApiModelProperty(hidden = true)
    protected Integer deleted = 0;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(hidden = true)
    protected String createId;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(hidden = true)
    protected String createName;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(hidden = true)
    protected Date createDate;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(hidden = true)
    protected String modifiedId;
    @TableField(fill = FieldFill.INSERT_UPDATE,updateStrategy = FieldStrategy.NOT_NULL)
    @ApiModelProperty(hidden = true)
    protected String modifiedName;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(hidden = true)
    protected Date modifiedDate;

}

然后,每个业务类都要继承这个基础类:确保数据库字段也都有这些字段。比如:

@Data
public class ErpSaleOrderTransactionBill extends BaseModel {
    private static final long serialVersionUID = 561288556671900702L;
    /**
    * 主键id
    */
    @TableId(type = IdType.ASSIGN_ID)
    @NotEmpty
    private String id;
                
    /**
    * 账单号
    */  
    private String orderCode;
                
    /**
    * 单据类别
    */  
    private String confOrderCategory;
}

mybatis-plus框架,我们可以使用:  ,这里我们可以不设置,  modifiedName,modifiedDate等

updateBatchById(calculateRiskLevelListUpdate);

最重要的:mybatis-plus拦截执行

package com.alpha.erp.config;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.orderplus.core.auth.Audience;
import com.orderplus.core.util.JwtTokenUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;

@Slf4j
@Component
public class MetaDataObjectHandler implements MetaObjectHandler {

    @Autowired
    private HttpServletRequest request;

    @Autowired
    private Audience audience;


    /**
     * 获取请求参数 - 用户ID
     */
    protected String getUserId() {
        try {
            String token = request.getHeader(HttpHeaders.AUTHORIZATION);
            if (StringUtils.isEmpty(token)) {
                return "";
            }
            return JwtTokenUtil.getUserId(token.substring(7), audience.getBase64Secret());
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * 获取请求参数 - 用户ID
     */
    protected String getUsername() {
        try {
            String token = request.getHeader(HttpHeaders.AUTHORIZATION);
            if (StringUtils.isEmpty(token)) {
                return "";
            }
            return JwtTokenUtil.getUsername(token.substring(7), audience.getBase64Secret());
        } catch (Exception e) {
            return "";
        }
    }

    /**
     * 获取请求参数 - 集团代码
     */
    protected String getEnterpriseNumber() {
        try {
            String token = request.getHeader(HttpHeaders.AUTHORIZATION);
            if (StringUtils.isEmpty(token)) {
                return "";
            }
            return JwtTokenUtil.getEnterpriseNumber(token.substring(7), audience.getBase64Secret());
        } catch (Exception e) {
            return "";
        }
    }

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        this.strictInsertFill(metaObject, "deleted", Integer.class, 0);
//        this.strictInsertFill(metaObject, "createId", String.class, getUserId());
        this.strictInsertFill(metaObject, "createDate", Date.class, new Date());
//        this.strictInsertFill(metaObject, "createName", String.class, getUsername());
//        this.strictInsertFill(metaObject, "modifiedId", String.class, getUserId());
        this.strictInsertFill(metaObject, "modifiedDate", Date.class, new Date());
//        this.strictInsertFill(metaObject, "modifiedName", String.class, getUsername());
        this.strictInsertFill(metaObject, "groupCode", String.class, getEnterpriseNumber());
        this.strictInsertFill(metaObject, "brand", String.class, getEnterpriseNumber());

        this.fillStrategy(metaObject, "createId", getUserId());
        this.fillStrategy(metaObject, "createName", getUsername());
        this.fillStrategy(metaObject, "modifiedId", getUserId());
        this.fillStrategy(metaObject, "modifiedName", getUsername());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
//        metaObject.setValue("modifiedDate",null);
//        metaObject.setValue("modifiedId",null);
//        metaObject.setValue("modifiedName",null);
//        this.strictUpdateFill(metaObject, "modifiedDate", Date.class, new Date());
//        this.strictUpdateFill(metaObject, "modifiedId", String.class, getUserId());
//        this.strictUpdateFill(metaObject, "modifiedName", String.class, getUsername());

        metaObject.setValue("modifiedDate",null);
        this.strictUpdateFill(metaObject, "modifiedDate", Date.class, new Date());
        if(StrUtil.isNotBlank(getUserId())){
            metaObject.setValue("modifiedId",null);
            this.strictUpdateFill(metaObject, "modifiedId", String.class, getUserId());
        }
        if(StrUtil.isNotBlank(getUsername())){
            metaObject.setValue("modifiedName",null);
            this.strictUpdateFill(metaObject, "modifiedName", String.class, getUsername());
        }
    }
}

然后你可以看到,执行时候会自动赋值。

相关推荐

  1. Mybatis-plus 自动填充字段

    2024-07-10 19:38:04       15 阅读
  2. mybatis-Plus 自动填充

    2024-07-10 19:38:04       35 阅读
  3. Mybatis-plus神技:公共字段填充

    2024-07-10 19:38:04       25 阅读
  4. Mybatis-plus自动填充使用以及常见问题

    2024-07-10 19:38:04       8 阅读
  5. 【SpringBoot】SpringAOP实现公共字段自动填充

    2024-07-10 19:38:04       4 阅读
  6. mybatis-plus映射mysqljson类型字段

    2024-07-10 19:38:04       6 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 19:38:04       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 19:38:04       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 19:38:04       4 阅读
  4. Python语言-面向对象

    2024-07-10 19:38:04       7 阅读

热门阅读

  1. Amazon Bedrock 常用权限分类详解

    2024-07-10 19:38:04       7 阅读
  2. Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?

    2024-07-10 19:38:04       9 阅读
  3. AWS Glue 与 Amazon Redshift 的安全通信配置

    2024-07-10 19:38:04       12 阅读
  4. Elasticsearch7.5.2 常用rest api与elasticsearch库

    2024-07-10 19:38:04       9 阅读
  5. MySQL 的 Buffer Pool 的结构及有什么作用

    2024-07-10 19:38:04       11 阅读
  6. 【大模型】解锁语言模型潜能:提示工程的艺术

    2024-07-10 19:38:04       10 阅读
  7. docker run enteypoint怎么样使用呢?

    2024-07-10 19:38:04       9 阅读
  8. kafka中

    kafka中

    2024-07-10 19:38:04      10 阅读
  9. 探索Vue.js:构建高效前端应用的现代框架

    2024-07-10 19:38:04       7 阅读
  10. ffmpeg 获取视频时长的命令及其输出

    2024-07-10 19:38:04       10 阅读
  11. 使用Python绘制甘特图

    2024-07-10 19:38:04       12 阅读