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