MyBatis-Plus自动填充功能失效导致的原因及解决

作者:performer丶 时间:2023-05-11 13:16:08 

1:先检查 字段有没有加上注解 @TableField(fill = FieldFill.INSERT_UPDATE)


@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updatedTime;

2:有没有实现 MetaObjectHandler 接口 ,并且加入到 Spring 容器中


@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createdTime", Date.class, new Date());
this.strictInsertFill(metaObject, "updatedTime", Date.class, new Date());
}

@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updatedTime", Date.class, new Date());
}
}

3: @Component 是否扫码注入进去

4: baseMapper.update(null,Wrappers.<Users>lambdaUpdate()) 这样的写法是没有拦截到的,所以无效

xml 写的也无效

@update 注解也无效


baseMapper.update(null, Wrappers.<Users>lambdaUpdate()
.set(Users::getConcernType,2)
.eq(Users::getId,userId));

应该改为


baseMapper.update(users, Wrappers.<Users>lambdaUpdate()
.set(Users::getConcernType,2));

或者


Users users = new Users();
users.setId(userId);
users.setConcernType(1);
baseMapper.updateById(users);

MyBatis-Plus自动填充功能失效导致的原因及解决

这样可以拿到表相关信息,会执行我们的 MetaObjectHandler 实现接口

补充:SpringBoot+MyBatisPlus 公共字段自动填充 MybatisPlusConfig配置不生效解决

SpringBoot+MyBatisPlus MybatisPlusConfig配置不生效问题

先说下工程目录

MyBatis-Plus自动填充功能失效导致的原因及解决

典型的Maven工程,在common中配置MyBatisPlus配置信息,在Base中进行CRUD操作。

遇到的问题:

在MyBatisPlus中配置了公共字段(create_time,upate_time),想在插入数据时,自动插入这两条字段。

配置如下:

AbstractEntity 代码:


/**
* 实体父类
*/
@Data
public abstract class AbstractEntity extends Model implements Serializable {
private static final long serialVersionUID = 1L;
/**
 * ID
 */
@TableId
private String id;
/**
 * 创建时间
 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "create_time", fill = FieldFill.INSERT)
public Date createTime;
/**
 * 修改时间
 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "update_time", fill = FieldFill.UPDATE)
public Date updateTime;
}

MetaHandler代码:


@Slf4j
@Component
public class MetaHandler implements MetaObjectHandler {
/**
 * 新增数据执行
 * @param metaObject
 */
@Override
public void insertFill(MetaObject metaObject) {
 this.setFieldValByName("createTime", new Date(), metaObject);
 this.setFieldValByName("updateTime", new Date(), metaObject);
}
/**
 * 更新数据执行
 * @param metaObject
 */
@Override
public void updateFill(MetaObject metaObject) {
 this.setFieldValByName("updateTime", new Date(), metaObject);
}
}

MybatisPlusConfig 代码:


@Configuration
@MapperScan("com.lyf.account.**.mapper")
public class MybatisPlusConfig {
/*
 * 分页插件,自动识别数据库类型
 * 多租户,请参考官网【插件扩展】
 */
@Bean
public PaginationInterceptor paginationInterceptor() {
 return new PaginationInterceptor();
}
@Bean
public GlobalConfig globalConfig() {
 GlobalConfig globalConfig = new GlobalConfig();
 globalConfig.setMetaObjectHandler(new MetaHandler());
 return globalConfig;
}
}

配置后,启动BaseApplication,使用Postman 进行测试,发现数据成功插入,但是创建时间并没有插入

在MybatisPlusConfig 的 globalConfig.setMetaObjectHandler(new MetaHandler());处打断点进行调试,发现代码并没有执行到这个类 (╯▔皿▔)╯ 检查 BaseApplication 才发现,没有在启动类中扫描该配置文件@。@

以下是修改过的BaseApplication类:


@SpringBootApplication
@ComponentScan({"com.lyf.account.mybatis.config","com.lyf.account.base"})
public class BaseApplication {
public static void main(String[] args) {
 SpringApplication.run(BaseApplication.class, args);
}
@Bean
public IdWorker idWorker (){
 return new IdWorker(1,1);
}
}

加入扫描装配后,再次进行测试,插入数据完美将创建时间加入O(∩_∩)O

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

来源:https://blog.csdn.net/publicv/article/details/108582719

标签:MyBatis-Plus,自动,填充
0
投稿

猜你喜欢

  • 使用RecyclerView实现水平列表

    2022-04-25 19:27:13
  • 详解C# ConcurrentBag的实现原理

    2022-11-17 02:26:05
  • C#面向对象特征的具体实现及作用详解

    2023-11-14 06:43:39
  • Spring 实现excel及pdf导出表格示例

    2023-12-21 04:17:32
  • Android编程判断网络是否可用及调用系统设置项的方法

    2023-08-14 13:05:22
  • spring cloud将spring boot服务注册到Eureka Server上的方法

    2023-12-08 19:42:09
  • Android 开发中layout下的子文件夹

    2021-10-03 16:10:44
  • Spring Boot+Mybatis+Druid+PageHelper实现多数据源并分页的方法

    2023-09-06 19:53:30
  • 一篇文章带你入门Java变量

    2021-09-21 07:46:02
  • Java接口返回省市区树形结构的实现

    2021-10-16 05:07:05
  • Spring如何利用@Value注解读取yml中的map配置

    2023-07-24 21:18:00
  • Java详细分析String类与StringBuffer和StringBuilder的使用方法

    2022-04-23 15:23:30
  • Android开发获取重力加速度和磁场强度的方法

    2022-05-27 23:07:09
  • 在android中实现类似uc和墨迹天气的左右拖动效果

    2022-06-18 08:47:50
  • Mybatis Plugin拦截器开发过程详解

    2021-07-15 22:30:18
  • Spring Security自定义登录原理及实现详解

    2022-11-20 21:57:39
  • Fluent Mybatis零xml配置实现复杂嵌套查询

    2022-02-03 19:34:32
  • 分析Android Choreographer源码

    2022-09-04 07:25:12
  • C#中的timer与线程使用

    2023-08-21 00:13:11
  • Java中checkbox实现跨页多选的方法

    2023-10-14 11:01:20
  • asp之家 软件编程 m.aspxhome.com