Spring Boot MyBatis Plus 版本兼容問題(記錄)

Spring Boot & MyBatis Plus 版本兼容問題(Invalid value type for attribute 'factoryBeanObjectType': java.lang.String)

  • 問題描述
  • 問題排查
    • 1. 檢查 `@MapperScan` 的路徑
    • 2. 項目中沒有配置 `FactoryBean`
    • 3. 檢查 `Spring` 和 `MyBatis Plus` 版本兼容性
  • 解決方法

問題描述

當使用 spring-boot-starter-parent v3.2.0 以上版本;mybatis-plus-boot-starter 3.5.10 時,如:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version><relativePath/> <!-- lookup parent from repository -->
</parent><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.10</version>
</dependency>

會出現以下錯誤:

Invalid value type for attribute 'factoryBeanObjectType': java.lang.String

錯誤詳情:

org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'userMapper' defined in file [/Volumes/Macintosh/Workspace/Michael/michael-spica-mybatis-plus/target/classes/michael/spica/mybatis/plus/mapper/UserMapper.class]: Invalid value type for attribute 'factoryBeanObjectType': java.lang.Stringat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:858) ~[spring-beans-6.2.1.jar:6.2.1]at org.springframework.beans.factory.support.AbstractBeanFactory.getType(AbstractBeanFactory.java:742) ~[spring-beans-6.2.1.jar:6.2.1]at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAnnotationOnBean(DefaultListableBeanFactory.java:765) ~[spring-beans-6.2.1.jar:6.2.1]at org.springframework.boot.sql.init.dependency.AnnotationDependsOnDatabaseInitializationDetector.detect(AnnotationDependsOnDatabaseInitializationDetector.java:36) ~[spring-boot-3.4.1.jar:3.4.1]at org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor.detectDependsOnInitializationBeanNames(DatabaseInitializationDependencyConfigurer.java:152) ~[spring-boot-3.4.1.jar:3.4.1]at org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor.postProcessBeanFactory(DatabaseInitializationDependencyConfigurer.java:115) ~[spring-boot-3.4.1.jar:3.4.1]at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:363) ~[spring-context-6.2.1.jar:6.2.1]at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:197) ~[spring-context-6.2.1.jar:6.2.1]at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:791) ~[spring-context-6.2.1.jar:6.2.1]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:609) ~[spring-context-6.2.1.jar:6.2.1]at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.4.1.jar:3.4.1]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) ~[spring-boot-3.4.1.jar:3.4.1]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-3.4.1.jar:3.4.1]at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[spring-boot-3.4.1.jar:3.4.1]at michael.spica.mybatis.plus.MichaelSpicaMybatisPlusApplication.main(MichaelSpicaMybatisPlusApplication.java:42) ~[classes/:na]

問題排查

1. 檢查 @MapperScan 的路徑

@MapperScan 注解中提供的包路徑正確,并且能夠掃描到 UserMapper 類;路徑不正確可能導致 Spring 不能正確地創建和管理 Mapper Bean。

@SpringBootApplication
@MapperScan("michael.spica.mybatis.plus.mapper")
public class MichaelSpicaMybatisPlusApplication {public static void main(String[] args) {SpringApplication.run(MichaelSpicaMybatisPlusApplication.class, args);}
}

2. 項目中沒有配置 FactoryBean

從錯誤信息來看,factoryBeanObjectType 設置為了 String 類型,而應該是 Class 類型。

MyBatis 會自動生成 Mapper 接口的代理實現對象,而你不應該手動配置 FactoryBean

@Bean
public MapperFactoryBean<UserMapper> userMapper() {MapperFactoryBean<UserMapper> factoryBean = new MapperFactoryBean<>(UserMapper.class);factoryBean.setFactoryBeanObjectType(String.class);  // 錯誤配置,應該使用 Class 類型return factoryBean;
}

上面的 setFactoryBeanObjectType(String.class) 是錯誤的配置,應該刪除這段配置,讓 MyBatis 自動處理 Mapper 的代理對象。

正確方式:
MyBatis 和 MyBatis Plus 會自動處理 Mapper 的代理,因此一般不需要手動配置 FactoryBean

3. 檢查 SpringMyBatis Plus 版本兼容性

當使用的 Spring Boot 3.2.0+(含v3.2.0)MyBatis Plus 3.5.10 時,會出現錯誤;所以經排查,是 SpringMyBatis Plus 版本兼容性問題。

解決方法

降低 Spring Boot 的版本至 3.2.0 以下,如:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.12</version><relativePath/> <!-- lookup parent from repository -->
</parent>

即可解決問題 ~~

完整pom文件,如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.12</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>michael.spica.mybatis.plus</groupId><artifactId>michael-spica-mybatis-plus</artifactId><version>0.0.1-SNAPSHOT</version><name>michael-spica-mybatis-plus</name><description>michael-spica-mybatis-plus</description><properties><java.version>17</java.version> <!-- 定義項目使用的JDK版本 --><encoding>UTF-8</encoding> <!-- 定義項目編碼格式 --><project.build.sourceEncoding>${encoding}</project.build.sourceEncoding> <!-- 源代碼的編碼方式 --><project.reporting.outputEncoding>${encoding}</project.reporting.outputEncoding> <!-- 輸出報告編碼方式 --><skipTests>true</skipTests> <!-- mvn打包時,跳過所有的測試階段(包括編譯和執行);也可以這樣設置,如:<maven.test.skip>true</maven.test.skip> --><maven.compiler.parameters>true</maven.compiler.parameters> <!-- 開啟JDK參數 --><maven.compiler.source>${java.version}</maven.compiler.source> <!-- 設置JDK版本(即:配置 Maven 編譯時使用的源代碼的 Java 版本) --><maven.compiler.target>${java.version}</maven.compiler.target> <!-- 設置JDK版本(即:配置編譯生成的字節碼版本為指定的 Java 版本) --><maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss:SSS</maven.build.timestamp.format> <!-- 設置打包時間格式 --><!-- jars versione.g: <mybatis-plus.version>x.x.x</mybatis-plus.version>--><mybatis-plus.version>3.5.10</mybatis-plus.version><lombok.version>1.18.36</lombok.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency><!-- MySQL Connector Java--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version><scope>runtime</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>${mybatis-plus.version}</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.34</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.13.0</version><configuration><source>${java.version}</source><target>${java.version}</target><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></path></annotationProcessorPaths></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.4.1</version><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67166.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67166.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67166.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式學習筆記-雜七雜八

文章目錄 連續波光纖耦合激光器工作原理主要特點應用領域設計考慮因素 數值孔徑&#xff08;Numerical Aperture&#xff0c;簡稱NA&#xff09;數值孔徑的定義數值孔徑的意義數值孔徑的計算示例數值孔徑與光纖 四象限探測器檢測目標方法四象限劃分檢測目標的步驟1. 數據采集2.…

Java Web-Cookie與Session

會話跟蹤技術 會話跟蹤技術是一種在 Web 應用程序中跟蹤用戶會話狀態的機制&#xff0c;它允許服務器在多個請求之間識別和關聯屬于同一用戶的請求&#xff0c;以便在整個會話過程中保持用戶相關的信息。以下是幾種常見的會話跟蹤技術&#xff1a; Cookie 概念&#xff1a;Cook…

Spring Boot - 數據庫集成04 - 集成Redis

Spring boot集成Redis 文章目錄 Spring boot集成Redis一&#xff1a;redis基本集成1&#xff1a;RedisTemplate Jedis1.1&#xff1a;RedisTemplate1.2&#xff1a;實現案例1.2.1&#xff1a;依賴引入和屬性配置1.2.2&#xff1a;redisConfig配置1.2.3&#xff1a;基礎使用 2&…

STM32使用VScode開發

文章目錄 Makefile形式創建項目新建stm項目下載stm32cubemx新建項目IED makefile保存到本地arm gcc是編譯的工具鏈G++配置編譯Cmake +vscode +MSYS2方式bilibiliMSYS2 統一環境配置mingw32-make -> makewindows環境變量Cmake CmakeListnijia 編譯輸出elfCMAKE_GENERATOR查詢…

Oracle 12c 中的 CDB和PDB的啟動和關閉

一、簡介 Oracle 12c引入了多租戶架構&#xff0c;允許一個容器數據庫&#xff08;Container Database, CDB&#xff09;托管多個獨立的可插拔數據庫&#xff08;Pluggable Database, PDB&#xff09;。本文檔旨在詳細描述如何啟動和關閉CDB及PDB。 二、容器數據庫 (CDB) 2.1…

網絡仿真工具Core環境搭建

目錄 安裝依賴包 源碼下載 Core安裝 FAQ 下載源碼TLS出錯誤 問題 解決方案 找不到dbus-launch 問題 解決方案 安裝依賴包 調用以下命令安裝依賴包 apt-get install -y ca-certificates git sudo wget tzdata libpcap-dev libpcre3-dev \ libprotobuf-dev libxml2-de…

FPGA實現任意角度視頻旋轉(二)視頻90度/270度無裁剪旋轉

本文主要介紹如何基于FPGA實現視頻的90度/270度無裁剪旋轉&#xff0c;旋轉效果示意圖如下&#xff1a; 為了實時對比旋轉效果&#xff0c;采用分屏顯示進行處理&#xff0c;左邊代表旋轉前的視頻在屏幕中的位置&#xff0c;右邊代表旋轉后的視頻在屏幕中的位置。 分屏顯示的…

JavaEE:多線程進階

JavaEE&#xff1a;多線程進階 一、對比不同鎖策略之間的應用場景及其區別1. 悲觀鎖 和 樂觀鎖1.1 定義和原理1.2 應用場景1.3 示例代碼 2. 重量級鎖 和 輕量級鎖2.1 定義和原理2.2 應用場景2.3 示例代碼 3. 掛起等待鎖 和 自旋鎖3.1 定義和原理3.2 應用場景3.3 示例代碼 4. 幾…

董事會辦公管理系統的需求設計和實現

該作者的原創文章目錄&#xff1a; 生產制造執行MES系統的需求設計和實現 企業后勤管理系統的需求設計和實現 行政辦公管理系統的需求設計和實現 人力資源管理HR系統的需求設計和實現 企業財務管理系統的需求設計和實現 董事會辦公管理系統的需求設計和實現 公司組織架構…

pytest自動化測試 - pytest夾具的基本概念

<< 返回目錄 1 pytest自動化測試 - pytest夾具的基本概念 夾具可以為測試用例提供資源(測試數據)、執行預置條件、執行后置條件&#xff0c;夾具可以是函數、類或模塊&#xff0c;使用pytest.fixture裝飾器進行標記。 1.1 夾具的作用范圍 夾具的作用范圍&#xff1a; …

esp32-C3 實現DHT11(溫濕度)

安裝DHT傳感器庫&#xff1a; 在Arduino IDE中&#xff0c;進入項目 > 加載庫 > 管理庫。搜索DHT sensor library并安裝。 編寫代碼 定義引腳和傳感器類型初始化傳感器判斷傳感器是否正常讀取數據 源碼 #include <DHT.h> #include <DHT_U.h>// 定義DHT傳感器…

java構建工具之Gradle

自定義任務 任務定義方式&#xff0c;總體分為兩大類:一種是通過 Project 中的task()方法,另一種是通過tasks 對象的 create 或者register 方法。 //任務名稱,閉包都作為參數println "taskA..." task(A,{ }) //閉包作為最后一個參數可以直接從括號中拿出來println …

【Pytest】生成html報告中,中文亂碼問題解決方案

import pytestif __name__ "__main__":# 只運行 tests 目錄下的測試用例&#xff0c;并生成 HTML 報告pytest.main([-v, -s, --htmlreport.html, tests])可以以上方式生成&#xff0c;也可以在pytest.ini中設置 [pytest] addopts --htmlreport.html --self-contai…

MyBatis最佳實踐:提升數據庫交互效率的秘密武器

第一章&#xff1a;框架的概述&#xff1a; MyBatis 框架的概述&#xff1a; MyBatis 是一個優秀的基于 Java 的持久框架&#xff0c;內部對 JDBC 做了封裝&#xff0c;使開發者只需要關注 SQL 語句&#xff0c;而不關注 JDBC 的代碼&#xff0c;使開發變得更加的簡單MyBatis 通…

《Java程序設計》課程考核試卷

一、單項選擇題&#xff08;本大題共10個小題&#xff0c;每小題2分&#xff0c;共20分&#xff09; 1.下列用來編譯Java源文件為字節碼文件的工具是&#xff08; &#xff09;。 A.java B.javadoc C.jar D.javac 2…

【25考研】人大計算機考研復試該怎么準備?有哪些注意事項?

人大畢竟是老牌985&#xff0c;復試難度不會太低&#xff01;建議同學認真復習&#xff01;沒有機試還是輕松一些的&#xff01; 一、復試內容 由公告可見&#xff0c;復試包含筆試及面試&#xff0c;沒有機試&#xff01; 二、參考書目 官方無給出參考書目&#xff0c;可參照…

vue3中Teleport的用法以及使用場景

1. 基本概念 Teleport 是 Vue3 提供的一個內置組件&#xff0c;它可以將組件的內容傳送到 DOM 樹的任何位置&#xff0c;而不受組件層級的限制。這在處理模態框、通知、彈出菜單等需要突破組件層級限制的場景中特別有用。 1.1 基本語法 <template><teleport to&quo…

使用openwrt搭建ipsec隧道

背景&#xff1a;最近同事遇到了個ipsec問題&#xff0c;做的ipsec特性&#xff0c;ftp下載ipv6性能只有100kb, 正面定位該問題也蠻久了&#xff0c;項目沒有用openwrt, 不過用了開源組件strongswan, 加密算法這些也是內核自帶的&#xff0c;想著開源的不太可能有問題&#xff…

基于AnolisOS 8.6安裝GmSSL 3.1.1及easy_gmssl庫測試國密算法

測試環境 Virtual Box&#xff0c;AnolisOS-8.6-x86_64-minimal.iso&#xff0c;4 vCPU, 8G RAM, 60 vDisk。最小化安裝。需聯網。 系統環境 關閉防火墻 systemctl stop firewalld systemctl disable firewalld systemctl status firewalld selinux關閉 cat /etc/selinux/co…

HTML從入門到精通:鏈接與圖像標簽全解析

系列文章目錄 01-從零開始學 HTML&#xff1a;構建網頁的基本框架與技巧 02-HTML常見文本標簽解析&#xff1a;從基礎到進階的全面指南 03-HTML從入門到精通&#xff1a;鏈接與圖像標簽全解析 文章目錄 系列文章目錄前言一、鏈接與圖像標簽&#xff08;HTML 標簽基礎&#xff…