整合MyBatis Plus报错:Invalid value type for attribute 'factoryBeanObjectType'

1,249 阅读2分钟

背景

今天在整理之前写的代码时,检查pom文件发现,项目中同时存在mybatis-spring-boot-starter和mybatis-plus-boot-starter两个依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.5</version>
</dependency>

问题出现

我记得这两个依赖是相互独立的,检查它们的POM文件,发现确实很多依赖如mybatis-springspring-boot-starter-jdbc等是重复的。考虑到代码中都是按MyBatis Plus写的,于是决定删除mybatis-spring-boot-starter依赖。

结果出现了标题所述的报错:

image.png

问题排查

首先,我怀疑代码中可能有使用mybatis-spring-boot-starter功能的地方,但编译器并未报错,所以排除了这个可能性。

找不到原因,我求助于GPT,它的回答是:

为什么去除 mybatis-spring-boot-starter 后出现 Invalid value type for attribute 'factoryBeanObjectType': java.lang.String 报错?

出现这种错误通常是因为 MyBatis Plus 在某些配置上依赖于 MyBatis 的基础配置,而这些配置在 mybatis-spring-boot-starter 中已经默认包含。去除 mybatis-spring-boot-starter 后,如果没有正确配置 MyBatis Plus 的相关属性,就可能导致某些 Bean 的配置错误,从而引发类似的异常。

我恍然大悟,发现确实如它所说,配置文件中确实没有 MyBatis Plus 所需的配置项,于是便添加了一些基本配置:

mybatis-plus:
  #实体类扫描
  type-aliases-package: com.daniu.pms.domain.entity
  configuration:
    #开启sql日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

信心满满的启动,却依然出现相同的报错。

发现GPT靠不住,于是我又去网上搜寻信息,发现大多类似问题都是MyBatis Plus版本导致的,于是我便把mybatis-plus-boot-starter换为最新版的3.6.5,但依然报错。

解决问题

无奈之下,只好去MyBatis Plus的官方文档看看有没有办法,结果发现:

image.png

原来Spring Boot 2和Spring Boot 3的依赖不同,尽管版本号相同😂。于是将依赖更换为:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.6</version>
</dependency>

问题得以解决。

下面还有MyBatis Plus官方的注意事项:

引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 mybatis-spring-boot-starterMyBatis-Spring,以避免因版本差异导致的问题。

或许最开始同时引入mybatis-spring-boot-startermybatis-plus-boot-starter却正常运行,才是最不正常的吧。

总结

升级为spring boot3后,MyBatis Plus的依赖要更换为mybatis-plus-spring-boot3-starter。

但因为引入mybatis-spring-boot-starter 3.0.3版本和mybatis-plus-boot-starter 3.5.5版本(其他版本未测试)却刚好正常运行,造成了迷惑,误以为mybatis-plus-boot-starter没有问题。

使用框架时一定要多查阅官方文档,尤其是使用新版本时,否则很容易在这种小问题上浪费时间。