mp版本从3.1.0及以下版本升级到高版本,JDK8日期新类型LocalDateTime等无法映射(报错)

本文讲述了Spring Boot 2.2.0升级后Mybatis Plus (MP) 3.1.1遇到的LocalDateTypeHandler等日期类型处理问题,由于JDBC驱动版本限制导致报错。解决方法包括降级Spring Boot版本或升级ojdbc驱动。

MP_3.1.0及之前的版本,依赖的是mybatis 3.5.0,

MP_3.1.1升级了mybatis的依赖到3.5.1, 而mybatis 3.5.1 对于新日期类型,需要JDBC driver支持JDBC 4.2 API.

如果你的jdbc驱动版本不支持,那么就会出现新日期类型报错。

参考 blog.mybatis.org

There is one backward incompatible changes since 3.5.0.
    Because of the fix for #1478 , LocalDateTypeHandler, LocalTimeTypeHandler and LocalDateTimeTypeHandler now require a JDBC driver that supports JDBC 4.2 API.
    [EDIT] These type handlers no longer work with Druid. Please see #1516 .

#Failed to bind properties under 'mybatis-plus.configuration.incomplete-result-maps[0].assistant.configuration.mapped-statements[0].parameter-map.parameter-mappings[0]' to org.apache.ibatis.mapping.ParameterMapping

springboot 2.2.0 之前无此问题, springboot 2.2.0 出现此问题

现象: 1.本地启动无问题,打成war包部署到服务器报此问题

原因:springboot 2.2.0 构造器注入的问题, mybatis 私有构造器不能绑定属性, 造成依赖mybatis的框架比如MP报错 [参考issue](https://github.com/spring-projects/spring-boot/issues/18670) 此问题已在springboot2.2.1中修复

解决方案:1.将springboot降级到2.1.x或升级到2.2.1起 (建议springboot2.2.2)

                  2. 升级ojdbc到:ojdbc8

<!-- https://mvnrepository.com/artifact/com.oracle.ojdbc/ojdbc8 -->
<dependency>
   <groupId>com.oracle.ojdbc</groupId>
   <artifactId>ojdbc8</artifactId>
   <version>19.3.0.0</version>
</dependency>
<dependency>
   <groupId>com.oracle.ojdbc</groupId>
   <artifactId>orai18n</artifactId>
   <version>19.3.0.0</version>
</dependency>

 

<think>嗯,用户遇到了在Maven项目中升级JDK到21和Spring Boot到3.2.5后出现的&#39;invalid value type for factoryObjectBeanType&#39;错误。首先,我需要确定这个错误通常是什么原因引起的。根据经验,Spring框架的版本升级可能会导致一些配置或依赖不兼容的问题。比如,Spring Boot 3.x开始需要Jakarta EE的依赖,而之前可能使用的是javax包。所以,用户的项目中可能还有旧的依赖项没有更。 接下来,我应该考虑用户可能使用的相关库,比如MyBatis或者MyBatis-Spring,这些库的版本是否与Spring Boot 3.2.5兼容。例如,MyBatis-Spring 2.x可能与Spring Boot 3.x不兼容,需要升级到3.x版本。此外,JDK 21是一个较版本,可能存在一些库还未适配,需要检查所有依赖是否有支持JDK 21版本。 另外,用户可能在自己的配置文件中使用了过时的属性或标签,例如XML配置中的某些元素可能在Spring Boot 3.x中被废弃或修改。例如,旧的bean定义方式可能需要调整,或者属性注入的方式有变化。还有,检查是否有重复的bean定义,或者类型不匹配的情况,尤其是在工厂Bean的配置上,可能会导致这个错误。 然后,我需要建议用户逐步排查:首先检查依赖管理,确保所有相关库的版本兼容;然后检查配置文件和注解,更到Jakarta命名空间;清理并重构建项目,确保没有残留的旧版本文件;最后,查看具体的堆栈跟踪,定位出问题的代码位置。如果这些步骤不能解决,可能需要检查第三方库的兼容性或提供具体的代码片段进一步分析。</think>### 问题分析 在将Maven项目升级到JDK 21和Spring Boot 3.2.5后出现的`invalid value type for factoryObjectBeanType`错误,通常与Spring框架的依赖兼容性或配置方式相关。此错误可能由以下原因导致: 1. **过时的XML配置语法**:Spring Boot 3.x对部分XML标签的解析更严格 2. **依赖版本冲突**:未适配Spring Boot 3.2.5的第三方库(如MyBatis、Hibernate等) 3. **JDK 21兼容性问题**:某些库尚未完全支持JDK 21的特性 ### 解决方案步骤 #### 1. 检查基础依赖配置 在`pom.xml`中必须显式声明Spring Boot父级依赖: ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.5</version> </parent> ``` 确认Java版本配置: ```xml <properties> <java.version>21</java.version> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> </properties> ``` #### 2.相关依赖 Spring Boot 3.x需要Jakarta EE 9+依赖,检查所有`javax.*`引用是否已替换为`jakarta.*`。例如: ```xml <!-- 旧版JPA依赖 --> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency> <!-- 应替换为 --> <dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <version>3.1.0</version> </dependency> ``` 特别检查以下常见库的最低兼容版本: | 库名称 | 最低兼容版本 | |-----------------|--------------| | MyBatis-Spring | 3.0.3 | | Hibernate | 6.4.4.Final | | Spring Data JPA | 3.2.5 | #### 3. 验证Bean配置 错误示例(旧版配置): ```xml <bean id="myFactory" class="com.example.MyFactoryBean"> <property name="targetType" value="java.util.HashMap"/> </bean> ``` 修正方案: ```xml <bean id="myFactory" class="com.example.MyFactoryBean"> <property name="targetType"> <value type="java.lang.Class">java.util.HashMap</value> </property> </bean> ``` 注意`type`属性的显式声明,这是Spring 6.x的类型安全要求[^1] #### 4. 清理构建环境 执行Maven清理并重生成IDE配置: ```bash mvn clean install -U mvn idea:idea # IntelliJ用户 mvn eclipse:eclipse # Eclipse用户 ``` #### 5. 检查第三方插件 确认Maven插件支持JDK 21: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> </plugin> </plugins> </build> ``` ### 典型错误场景 假设在XML配置中存在这样的工厂Bean定义: ```xml <bean id="myMapperFactory" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="com.example.MyMapper"/> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean> ``` 需验证: 1. MyBatis-Spring版本是否 ≥ 3.0.3 2. `mapperInterface`是否正确定义为接口类型 3. 是否存在重复的Bean定义 ### 扩展建议 如果问题仍未解决,可通过以下命令生成依赖树分析冲突: ```bash mvn dependency:tree -Dincludes=org.springframework ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值