项目环境

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/>
</parent>

自动填充功能

项目引入mybatis-plus后,尝试使用它的自动填充功能,按照官方文档步骤实现,下面列出部分具体代码

注解填充字段

@ApiModelProperty(value = "更新时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updatedTime; @ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT)
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createdTime;

自定义实现类TableMetaObjectHandler

@Component
public class TableMetaObjectHandler implements MetaObjectHandler { @Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createdTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updatedTime", LocalDateTime.class, LocalDateTime.now());
} @Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updatedTime", LocalDateTime.class, LocalDateTime.now());
}
}

自动填充字段代码未执行

由于MetaObjectHandler实现类中的代码未执行,所以我debug寻找mybatis-plus源码中执行 insertFill方法的类

com.baomidou.mybatisplus.core.MybatisParameterHandler

从图中可以看出,MetaObjectHandler没有注入到配置中

解决方案

  1. 检查MetaObjectHandler实现类是否使用@Component

    实体类字段使用注解 @TableField(fill = FieldFill.INSERT)

  2. 手动注入MetaObjectHandler

     	@Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
    //获取mybatis-plus全局配置
    GlobalConfig globalConfig = GlobalConfigUtils.defaults();
    //mybatis-plus全局配置设置元数据对象处理器为自己实现的那个
    globalConfig.setMetaObjectHandler(new TableMetaObjectHandler());
    mybatisSqlSessionFactoryBean.setDataSource(dataSource);
    //mybatisSqlSessionFactoryBean关联设置全局配置
    mybatisSqlSessionFactoryBean.setGlobalConfig(globalConfig);
    ...
    return mybatisSqlSessionFactoryBean.getObject();
    }
    1. 删除bean sqlSessionFactory, 这是最终解决我问题的方案

      这是我原来的Mybatis配置类,主要配置了mapper路径和配置文件路径,后来我删除了此类,将这两项配置写到了yml文件里

      出现这个问题的具体原因我没有再跟源码了,猜测是自定义Bean sqlSessionFactory 影响到了 globalConfig ,导致配置失效。

      @Configuration
      @EnableTransactionManagement
      public class MybatisConfig { private static final String CONFIG_XML_PATH = "classpath:mybatis-config.xml";
      private static final String MAPPER_XML_PATH = "classpath:mapping/**/*.xml"; @Bean(name = "sqlSessionFactory")
      public SqlSessionFactory sqlSessionFactoryBean(DataSource dataSource) throws Exception {
      MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
      PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
      sqlSessionFactory.setConfigLocation(pathMatchingResourcePatternResolver.getResource(CONFIG_XML_PATH));
      sqlSessionFactory.setMapperLocations(pathMatchingResourcePatternResolver.getResources(MAPPER_XML_PATH));
      sqlSessionFactory.setDataSource(dataSource); return sqlSessionFactory.getObject();
      } @Bean
      public DataSourceTransactionManager transactionManager(DataSource dataSource) {
      return new DataSourceTransactionManager(dataSource);
      }
      }

其他

以上第三种方案还解决另一个问题;使用MyBatis-Plus的 通用枚举 特性,进行数据库查询时报错:

No enum constant com.**.workbench.model.enums.SystemStatusEnum.1

这个问题的原因应该和上述自动填充失效一样;由于 global-config.type-enums-package 配置失效,所以枚举类未被扫描。

Mybatis plus配置MetaObjectHandler无效的更多相关文章

  1. 笔记:MyBatis XML配置详解

    MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息.文档的顶层结构如下: configuration 配置 properties ...

  2. SpringMVC+Spring+mybatis项目从零开始--Spring mybatis mysql配置实现

    上一章我们把SSM项目结构已搭建(SSM框架web项目从零开始--分布式项目结构搭建)完毕,本章将实现Spring,mybatis,mysql等相关配置. 1.    外部架包依赖引入 外部依赖包引入 ...

  3. Java-MyBatis:MyBatis 3 配置

    ylbtech-Java-MyBatis:MyBatis 3 配置 1.返回顶部 1. XML 映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings) ...

  4. Mybatis XML配置

    Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  5. MyBatis Cache配置

    @(MyBatis)[Cache] MyBatis Cache配置 MyBatis提供了一级缓存和二级缓存 配置 全局配置 配置 说明 默认值 可选值 cacheEnabled 全局缓存的开关 tru ...

  6. win7下IIS错误:"无法访问请求的页面,因为该页的相关配置数据无效"的解决方法(转)

    今天新装win7,然后在IIS下布署了一个网站,布署完成后运行,提示如下错误:HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效 ...

  7. spring和mybatis整合配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  8. SSM ( Spring 、 SpringMVC 和 Mybatis )配置详解

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  9. HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。

    HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 BeginReques ...

  10. "HTTP 错误 500.19 请求的页面的相关配置数据无效" 解决办法

    HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 问题"详细错误信息模块 IIS Web Core通知 Begin ...

随机推荐

  1. web自动化08-下拉选择框、弹出框、滚动条

    1.下拉选择框操作 下拉框就是HTML中<select>元素:   先列需求: 需求:使用'注册A.html'页面,完成对城市的下拉框的操作 1).选择'广州' 2).暂停2秒,选择'上海 ...

  2. 使用c#实现23种常见的设计模式

    使用c#实现23种常见的设计模式 设计模式通常分为三个主要类别: 创建型模式 结构型模式 行为型模式. 这些模式是用于解决常见的对象导向设计问题的最佳实践. 以下是23种常见的设计模式并且提供c#代码 ...

  3. “AI Earth”人工智能创新挑战赛:助力精准气象和海洋预测Baseline[1]、NetCDF4使用教学、Xarray 使用教学,针对气象领域.nc文件读取处理

    1."AI Earth"人工智能创新挑战赛:助力精准气象和海洋预测Baseline[1].NetCDF4使用教学.Xarray 使用教学,针对气象领域.nc文件读取处理 比赛官网: ...

  4. .NET 8 Preview 5发布,了解一下Webcil 是啥

    2023年6月13日 .NET 8 Preview 5,.NET 团队在官方博客发布了系列文章: Announcing .NET 8 Preview 5 ASP.NET Core updates in ...

  5. GPT3的内部结构:基于自回归、注意力机制等技术的语言处理框架

    目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 4. 应用示例与代码实现讲解 6. 结论与展望 7. 附录:常见问题与解答 GPT-3 是当前最为先进的自然语言处理框架之一,由 Open ...

  6. SSM项目整合思路以及代码

    当前真实的企业开发中,SpringBoot已经统一Java企业应用开发,很少有在使用SSM项目来进行项目开发的. 可是在教学阶段,还是很有必要给学生讲解Java开发中一套很经典的框架,SSM框架.作为 ...

  7. springboot下使用rabbitMQ之开发配置方式(一)

    springboot下使用rabbitMQ之开发配置方式(一) 距离上次发布博客已经小一年了,这次...嗯,没错,我又回来啦... 本次结合着B站某MQ视频以及最近在MQ上的实践聊一聊个人在使用rab ...

  8. 【最新】Delphi XE7 绿色版下载,亲测可用!

    最后更新时间 2017-12-05. 本文整理自2ccc盒子iny的帖子 → 链接到原贴 破解 → 链接 一.绿色版介绍 绿色版除了不包含 FastReport(RAD Studio自带的FastRe ...

  9. java发送http请求(jquery发送http请求,前后端看这一篇文章够了,很完整)

    为什么写这篇博客? 1.目前很多系统使用了微服务架构,那么各个微服务之间进行内部通信一般采用http协议的方式,springcloud中提供了ribbon,feign,openFeign等组件. 但是 ...

  10. loopback4:单元测试冻结时间

    解决方案 import {expect} from '@loopback/testlab'; import sinon from 'sinon'; describe('example test', ( ...