前言:
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)@NotEmptyprivate 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 {@Autowiredprivate HttpServletRequest request;@Autowiredprivate 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 "";}}@Overridepublic 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());}@Overridepublic 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());}}
}
然后你可以看到,执行时候会自动赋值。