公共字段自动填充步骤及出现的问题

背景:

Mybatis Plus公共字段自动填充,也就是在插入或者更新的时候为指定字段赋予指定的值,使用它的好处就是可以
统一对这些字段进行处理,避免了重复代码。

实现步骤:


一、在实体类的公共字段属性上加入@TableField注解,指定自动填充的策略

 @TableField(fill = FieldFill.INSERT)//插入时填充
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)//插入和更新时填充
    private LocalDateTime updateTime;

    @TableField(fill = FieldFill.INSERT)//插入时填充
    private Long createUser;

    @TableField(fill = FieldFill.INSERT_UPDATE)//插入和更新时填充
    private Long updateUser;


二、按照框架要求编写元数据对象处理器(创建一个类),在此类中统一为公共字段赋值,此类需要实现MetaObjectHandler接口

  1. 创建一个类实现MetaObjectHandler
  2. 添加@Component将这个类交给IOC管理
  3. 实现MetaObjectHandler类中的insertFill()方法和updateFill()方法
  4. 给实体类中要自动填充的属性赋值
package com.yzy.common;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;

@Slf4j
@Component
public class MyMetaObjectThandler implements MetaObjectHandler {

    /***
     * 插入时自动填充
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("公共字段自动填充[insert]");
        log.info(metaObject.toString());
        metaObject.setValue("createTime",LocalDateTime.now());
        metaObject.setValue("updateTime",LocalDateTime.now());
        metaObject.setValue("createUser",1);
    }

    /***
     * 修改时自动填充
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("公共字段自动填充[update]");
        log.info(metaObject.toString());
        metaObject.setValue("updateTime",LocalDateTime.now());
        metaObject.setValue("updateUser",1);
    }
}

三、实验中出现的问题:

启动项目测试后,MyBatis-Plus 的公共字段自动填充器不起作用

四、解决办法:


可能的原因有:
1. **元数据处理器未配置**:需要在实体类中使用 `@TableField` 注解的 `fill` 属性来指定字段在什么情况下自动填充,并且需要实现 `MetaObjectHandler` 接口来定义填充规则。
2. **自动填充规则未正确实现**:在 `MetaObjectHandler` 实现类中,需要正确实现 `insertFill` 和 `updateFill` 方法来指定字段的填充值。
3. **实体类字段访问权限**:确保自动填充的字段在实体类中具有正确的访问权限(通常是 public 或通过 getter/setter 访问)。
4. **Spring Bean 未正确注册**:如果使用 Spring Boot,确保 `MetaObjectHandler` 实现类被注册为 Spring Bean。
5. **版本兼容性问题**:确保使用的 MyBatis-Plus 版本与 MyBatis、Spring Boot 等其他依赖库兼容。
6. **配置文件问题**:检查 MyBatis-Plus 的配置文件,确保没有错误的配置影响了自动填充的功能。
7. **缓存问题**:有时候,可能是由于缓存导致自动填充没有按预期工作。尝试清除缓存或重启应用程序。
8. **调试和日志**:开启调试日志,检查 MyBatis-Plus 的执行日志,看是否有关自动填充的相关信息。
解决方法:
- **检查实体类注解**:确保实体类中的字段使用了 `@TableField` 注解,并且 `fill` 属性设置正确。

9."版本问题":确保MP依赖的版本适配。

我的就是更换了最新版本

<dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.5.7</version>
      </dependency>

项目充走了自动装配器

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值