Invalid bound statement (not found):

╰半橙微兮° 2022-02-05 02:27 432阅读 0赞

异常信息

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

五月 04, 2019 2:52:58 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [spring] in context with path [/MsProject] threw exception [Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.yaosiyuan.dao.MsUserMapper.insert] with root cause
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.yaosiyuan.dao.MsUserMapper.insert
at org.apache.ibatis.binding.MapperMethod S q l C o m m a n d . < i n i t > ( M a p p e r M e t h o d . j a v a : 223 ) a t o r g . a p a c h e . i b a t i s . b i n d i n g . M a p p e r M e t h o d . < i n i t > ( M a p p e r M e t h o d . j a v a : 48 ) a t o r g . a p a c h e . i b a t i s . b i n d i n g . M a p p e r P r o x y . c a c h e d M a p p e r M e t h o d ( M a p p e r P r o x y . j a v a : 59 ) a t o r g . a p a c h e . i b a t i s . b i n d i n g . M a p p e r P r o x y . i n v o k e ( M a p p e r P r o x y . j a v a : 52 ) a t c o m . s u n . p r o x y . SqlCommand.(MapperMethod.java:223) at org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:48) at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52) at com.sun.proxy. SqlCommand.(MapperMethod.java:223)atorg.apache.ibatis.binding.MapperMethod.(MapperMethod.java:48)atorg.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)atorg.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)atcom.sun.proxy.Proxy33.insert(Unknown Source)
at com.yaosiyuan.service.MsUserService.insert(MsUserService.java:38)
at com.yaosiyuan.action.MsUserAction.add(MsUserAction.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:178)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:442)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:430)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol A b s t r a c t C o n n e c t i o n H a n d l e r . p r o c e s s ( A b s t r a c t P r o t o c o l . j a v a : 607 ) a t o r g . a p a c h e . t o m c a t . u t i l . n e t . J I o E n d p o i n t AbstractConnectionHandler.process(AbstractProtocol.java:607) at org.apache.tomcat.util.net.JIoEndpoint AbstractConnectionHandler.process(AbstractProtocol.java:607)atorg.apache.tomcat.util.net.JIoEndpointSocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)


场景描述


异常原因

包名/域名空间/返回类型/xml丢失/文件异常


解决方案

1.检查xml文件所在package名称是否和Mapper interface所在的包名

2、mapper的namespace写的不对!!!注意系修改。
3、UserDao的方法在UserDao.xml中没有,然后执行UserDao的方法会报此
4、UserDao的方法返回值是List,而select元素没有正确配置ResultMap,或者只配置ResultType!
5、看下mapper的XML配置路径是否正确、或者out/war文件夾是否包含xml文件。
如果不包含,就是因为maven没打包,忽略掉xml了。请在pom的build中加入以下。

  1. <resources>
  2. <resource>
  3. <directory>src/main/java</directory>
  4. <includes>
  5. <include>**/*.xml</include>
  6. </includes>
  7. <filtering>false</filtering>
  8. </resource>
  9. </resources>

6/检查application.properties配置文件是否添加以下配置信息(我就是因为这个原因导致报错的,添加之后问题解决):

  1. mybatis.mapperLocations=classpath:mapper/*Mapper.xml
  2. mybatis.typeAliasesPackage=com.gugr.springboot.entity
  3. <!-- spring和MyBatis完美整合 -->
  4. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  5. <!-- 指定数据源 -->
  6. <property name="dataSource" ref="dataSource"/>
  7. <!-- 具体指定xml文件,可不配 -->
  8. <property name="configLocation" value="classpath:mybatis-config.xml"/>
  9. <!-- 自动扫描mapping.xml文件,**表示迭代查找 ,,也可在mybatis-config.xml中单独指定xml文件 -->
  10. <!-- <property name="mapperLocations" value="classpath:com/yaosiyuan/dao/xml/MsMerchantMapper.xml"/>
  11. --> <property name="mapperLocations">
  12. <array>
  13. <value>classpath:com/yaosiyuan/dao/xml/MsMerchantMapper.xml</value>
  14. <value>classpath:com/yaosiyuan/dao/xml/MsMerchantMapper.xml</value>
  15. <!-- <value>classpath:mybatis/mapper/database/*.xml</value> -->
  16. </array>
  17. </property>
  18. </bean>

6/配置xml映射文件需要满足特定要求

  1. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
  2. p:dataSource-ref="dataSource" p:configLocation="classpath:mybatis-config.xml">
  3. <property name="mapperLocations">
  4. <list>
  5. <value>classpath*:mapper/com/xxx/**/*Mapper.xml</value>
  6. <value>classpath*:dao/com/xxx/**/*Mapper.xml</value>
  7. </list>
  8. </property>
  9. </bean>

如上只有Mapper结尾的xml文件才会被Mybatis扫描到,这个时候如果忘记了这个规则,xml使用了其他名称,如xxxDao.xml。这样xml的配置就不会加入到Mybatis存储配置的一个map对象里去,也会出现 Invalid bound statement 的错误。解决方法就是把xml文件改名即可。

7、如果你确认没有以上问题,请任意修改下对应的xml文件,比如删除一个空行,保存,或者新建一个文件,确认编码格式,dtd无误后,复制粘贴。


推荐阅读
>>清欢的博客
>>学习交流或获取更多资料欢迎加入QQ群:874514813➤TG群

发表评论

表情:
评论列表 (有 0 条评论,432人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Invalid bound statement (not found):

    今天突然想用spring Boot 集成Mybatis搭建一个项目,项目搭建完成后准备试试自己的成果,哪知道启动项目后,发现运行报错,在网上找了很多解决方案,终于能够正常运行,