1. 程式人生 > 其它 >SpringBoot專案中MyBatis無法找到mapper.xml中指定的refid

SpringBoot專案中MyBatis無法找到mapper.xml中指定的refid

技術標籤:錯誤記載SpringBootMyBatisCould not findrefid

專案場景:

SpringBoot專案,MyBatis 異常:xxxMapper.xml 中無法找到 refid 為 xxx 的 片段;更正之後,多次重新啟動仍然無法消除這個異常。

問題描述:

org.apache.ibatis.builder.IncompleteElementException: Could not find SQL statement to include with refid 'org.peanutvideo.system.mapper.AppUserInfoMapper.selectAppUser'
java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain value for org.peanutvideo.system.mapper.AppUserInfoMapper.selectAppUser
	at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:888) ~[mybatis-3.4.6.jar:3.4.6]
	at org.apache.ibatis.
builder.xml.XMLIncludeTransformer.findSqlFragment(XMLIncludeTransformer.java:96) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.builder.xml.XMLIncludeTransformer.applyIncludes(XMLIncludeTransformer.java:61) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.builder.xml.XMLIncludeTransformer.applyIncludes
(XMLIncludeTransformer.java:83) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.builder.xml.XMLIncludeTransformer.applyIncludes(XMLIncludeTransformer.java:51) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:88) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.session.Configuration.buildAllStatements(Configuration.java:788) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.session.Configuration.hasStatement(Configuration.java:758) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.session.Configuration.hasStatement(Configuration.java:753) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.binding.MapperMethod$SqlCommand.resolveMappedStatement(MapperMethod.java:249) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:219) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:49) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) ~[mybatis-3.4.6.jar:3.4.6] at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) ~[mybatis-3.4.6.jar:3.4.6] at com.sun.proxy.$Proxy62.selectAppUserCounter(Unknown Source) ~[na:na] at org.peanutvideo.system.service.app.impl.AppUserServiceImpl.selectAppUserCounter(AppUserServiceImpl.java:30) ~[classes/:na] at org.peanutvideo.web.controller.app.AppUserController.loginByCode(AppUserController.java:32) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_202] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_202] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_202] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_202] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE] at ………………………………………………………………………………

原因分析:

檢視異常的 xxxMapper.xml 檔案,找到問題片段, 片段確實在 引用之前, 中的 id 和 中的 refid 完全一樣。
在這裡插入圖片描述

開啟 target 目錄下的 xxxMapper.xml 檔案發現錯誤片段,專案重啟後並沒有更新程式碼到 target 目錄,引起了這次異常。

注: target 目錄是編譯後文件存放的地方


解決方案:

方法 I

每次更新程式碼後,build 一下。
在這裡插入圖片描述
方法 II

在 maven 的 pom.xml 中配置 build 選項。

具體參見:解決idea spring boot專案中target中沒有同步更新最新目錄檔案及資源