mybatis-plus自动填充失效

在数据插入时发现mybatis-plus自动填充失效了,于是就去查询mybatis-plus自动填充的配置

@Slf4j
@Component
public class MetaHandler implements MetaObjectHandler  {

    /**
     * 新增数据执行
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        Subject subject = SecurityUtils.getSubject();
        if(subject != null && subject.getPrincipal() != null) {
            User userEntity = (User) subject.getPrincipal();
            this.setFieldValByName("createTime", new Date(), metaObject);
            this.setFieldValByName("createBy", userEntity.getUsername(), metaObject);
            this.setFieldValByName("updateTime", new Date(), metaObject);
            this.setFieldValByName("updateBy", userEntity.getUsername(), metaObject);
        }
    }

    /**
     * 更新数据执行
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
         Subject subject = SecurityUtils.getSubject();
         if(subject != null && subject.getPrincipal() != null) {
            User userEntity = (User) subject.getPrincipal();
            this.setFieldValByName("updateTime", new Date(), metaObject);
            this.setFieldValByName("updateBy", userEntity.getUsername(), metaObject);
        }
    }

}

发现实现类没错,那么是不是没有把实现类导入到mybatis-plus的全局配置中

@Configuration
@MapperScan({"com.modules.**.dao.mapper"})
public class MybatisPlusConfig {

    /**
     * 自动填充功能
     * @return
     */
    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setMetaObjectHandler(new MetaHandler());
        return globalConfig;
    }

    /**
     * 分页插件,自动识别数据库类型
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

 全局配置中也将MetaHandler添加了

于是去查询实体类是不是字段或者表名写错了

@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
@ApiModel("DO父类")
public class BaseEntity implements Serializable {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @TableId(value = "id",type= IdType.AUTO)
    @ApiModelProperty(value="id",name="id")
    private Long id;

    @CreatedBy
    @Column(name="create_by")
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    @Check(name="创建人")
    @ApiModelProperty(value="创建人",name="createBy")
    private String createBy;

    /**
     * 创建时间
     * 在执行insert语句时候自动插入,jpa审计
     */
    @CreatedDate
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(name="create_time")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    @Check(name="创建时间")
    @ApiModelProperty(value="创建时间",name="createTime")
    private Date createTime;

    /**
     * 更新人
     * 最后修改人
     */
    @LastModifiedBy
    @Column(name="update_by")
    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) // 新增和更新执行
    @Check(name="更新人")
    @ApiModelProperty(value="更新人",name="updateBy")
    private String updateBy;

    /**
     * 更新时间
     * 最后一次修改时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @LastModifiedDate
    @Column(name="update_time")
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) // 新增和更新执行
    @Check(name="更新时间")
    @ApiModelProperty(value="更新时间",name="updateTime")
    private Date updateTime;
}

发现字段名和表对于的列名都没错,但是突然发现base类引入了JPA审计的自动填充功能,也就是

@CreatedBy @LastModifiedDate等注释,于是打开debug断点调试,最终发现是mybatis-plus的自动填充与JPA审计的自动填充引起了冲突,于是放弃mybatis-plus的自动填充,使用JPA审计的自动填充

@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
@ApiModel("DO父类")
public class BaseEntity implements Serializable {

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @TableId(value = "id",type= IdType.AUTO)
    @ApiModelProperty(value="id",name="id")
    private Long id;

    @CreatedBy
    @Column(name="create_by")
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    @Check(name="创建人")
    @ApiModelProperty(value="创建人",name="createBy")
    private String createBy;

    /**
     * 创建时间
     * 在执行insert语句时候自动插入,jpa审计
     */
    @CreatedDate
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(name="create_time")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    @Check(name="创建时间")
    @ApiModelProperty(value="创建时间",name="createTime")
    private Date createTime;

    /**
     * 更新人
     * 最后修改人
     */
    @LastModifiedBy
    @Column(name="update_by")
    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE) // 新增和更新执行
    @Check(name="更新人")
    @ApiModelProperty(value="更新人",name="updateBy")
    private String updateBy;

    /**
     * 更新时间
     * 最后一次修改时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @LastModifiedDate
    @Column(name="update_time")
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE) // 新增和更新执行
    @Check(name="更新时间")
    @ApiModelProperty(value="更新时间",name="updateTime")
    private Date updateTime;

    /**
     *  0是正常  1是删除  -1 是禁用
     */
    @Column(name="del_flag")
    @TableField(value = "del_flag")
    @ApiModelProperty(value="删除标识",name="delFlag")
    private Integer delFlag = 0;

    @Column(name="system_org_no")
    @TableField(value = "system_org_no", fill = FieldFill.INSERT)
    @Check(name="事业部编号")
    @ApiModelProperty(value="事业部编号",name="orgNo")
    private String systemOrgNo;

    @Column(name="system_org_name")
    @TableField(value = "system_org_name", fill = FieldFill.INSERT)
    @Check(name="事业部名称")
    @ApiModelProperty(value="事业部名称",name="parentOrgName")
    private String systemOrgName;

   
    @PrePersist
    public void perPersist() {
        Subject subject = SecurityUtils.getSubject();
        if (subject != null && subject.isAuthenticated()) {
            User principal = (User) subject.getPrincipal();
            addOrgInfo(principal);
        }
    }
    
    //添加登录用户的部门信息
    private void addOrgInfo(User principal){
        List<Department> departments = principal.getDepartments();
        if (departments.size()==1){
            this.systemOrgNo =departments.get(0).getOrgNo();
            this.systemOrgName = departments.get(0).getOrgName();
        }else {
            List<String> orgNo = departments.stream().map(Department::getOrgNo).collect(Collectors.toList());
            List<String> orgName = departments.stream().map(Department::getOrgName).collect(Collectors.toList());
            this.systemOrgNo = JSONObject.toJSONString(orgNo);
            this.systemOrgName = JSONObject.toJSONString(orgName);
        }
    }
}

最后成功填充

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值