MyBatis-plus 自动填充MetaObjectHandler不生效问题

x33g5p2x  于2022-05-25 转载在 其他  
字(1.3k)|赞(0)|评价(0)|浏览(847)

背景

在项目中经常遇到一些数据需要自动填充,填充方法都是同一种规则,例如创建时间等。

1 自动填充方法配置

1.1 实体类添加注解

1.2 在handler包下实现元对象处理器接口

  1. import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
  2. import org.apache.ibatis.reflection.MetaObject;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.stereotype.Component;
  6. import java.util.Date;
  7. @Component
  8. public class MyMetaObjectHandler implements MetaObjectHandler {
  9. private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);
  10. @Override
  11. public void insertFill(MetaObject metaObject) {
  12. LOGGER.info("start insert fill ....");
  13. this.setFieldValByName("createTime", new Date(), metaObject);
  14. this.setFieldValByName("updateTime", new Date(), metaObject);
  15. }
  16. @Override
  17. public void updateFill(MetaObject metaObject) {
  18. LOGGER.info("start update fill ....");
  19. this.setFieldValByName("updateTime", new Date(), metaObject);
  20. }
  21. }

1.3 在测试文件中进行测试

问题

在进行测试时发现配置的MyMetaObjectHandler并没有生效,即没有对数据库中的create_time和update_time进行自动填充。

原因及解决措施

1 Date对象使用(import)的包不一致

如图2所示,MyMetaObjectHandler.java中Date使用的包是import java.util.Date;,而实体类User.java中Date使用的包是import java.sql.Date,从而导致无法自动填充,解决方法: 修改实体类User.java中的包为import java.util.Date;

2 没有添加@Component注解

如图2所示,没有在MyMetaObjectHandler类上添加 @Component 注解。

3 启动类的位置不正确

如图所示,启动类DemoApplication.java的位置应该和entity、handler、mapper包在同一路径下,如果将启动类放在entity等包的下一级目录下就会出现无法自动填充问题。

相关文章