SpringBoot專案中MyBatis無法找到mapper.xml中指定的refid
阿新 • • 發佈:2021-02-10
技術標籤:錯誤記載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 選項。