HTTP Status 500

        在使用Maven工程管理工具整合SSM框架时,Mybatis使用逆向工程生成的pojo,mapper接口及映射文件,把mapper接口和映射文件放在DAO工程的同一级src/main/java目录下。正常启动服务器,浏览器执行业务Console控制台抛出异常:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)。

一、异常描述:

  1 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
  2 cn.e3mall.mapper.TbItemMapper.selectByExample
  3 	at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:189)
  4 	at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:43)
  5 	at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58)
  6 	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51)
  7 	at com.sun.proxy.$Proxy31.selectByExample(Unknown Source)
  8 	at cn.e3mall.service.impl.ItemServiceImpl.getItemById(ItemServiceImpl.java:34)
  9 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 10 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 11 	at sun.reflect.DelegatingMethodAccessorImpl.invoke
 12 (DelegatingMethodAccessorImpl.java:43)
 13 	at java.lang.reflect.Method.invoke(Method.java:498)
 14 	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection
 15 (AopUtils.java:302)
 16 	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint
 17 (ReflectiveMethodInvocation.java:190)
 18 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed
 19 (ReflectiveMethodInvocation.java:157)
 20 	at org.springframework.transaction.interceptor.
 21 TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
 22 	at org.springframework.transaction.interceptor.TransactionAspectSupport.
 23 invokeWithinTransaction(TransactionAspectSupport.java:281)
 24 	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke
 25 (TransactionInterceptor.java:96)
 26 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed
 27 (ReflectiveMethodInvocation.java:179)
 28 	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke
 29 (ExposeInvocationInterceptor.java:92)
 30 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed
 31 (ReflectiveMethodInvocation.java:179)
 32 	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke
 33 (JdkDynamicAopProxy.java:208)
 34 	at com.sun.proxy.$Proxy34.getItemById(Unknown Source)
 35 	at cn.e3mall.controller.ItemController.getItemById(ItemController.java:27)
 36 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 37 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 38 	at sun.reflect.DelegatingMethodAccessorImpl.invoke
 39 (DelegatingMethodAccessorImpl.java:43)
 40 	at java.lang.reflect.Method.invoke(Method.java:498)
 41 	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke
 42 (InvocableHandlerMethod.java:222)
 43 	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest
 44 (InvocableHandlerMethod.java:137)
 45 	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.
 46 invokeAndHandle(ServletInvocableHandlerMethod.java:110)
 47 	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.
 48 invokeHandlerMethod(RequestMappingHandlerAdapter.java:814)
 49 	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.
 50 handleInternal(RequestMappingHandlerAdapter.java:737)
 51 	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle
 52 (AbstractHandlerMethodAdapter.java:85)
 53 	at org.springframework.web.servlet.DispatcherServlet.doDispatch
 54 (DispatcherServlet.java:959)
 55 	at org.springframework.web.servlet.DispatcherServlet.doService
 56 (DispatcherServlet.java:893)
 57 	at org.springframework.web.servlet.FrameworkServlet.processRequest
 58 (FrameworkServlet.java:969)
 59 	at org.springframework.web.servlet.FrameworkServlet.doGet
 60 (FrameworkServlet.java:860)
 61 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
 62 	at org.springframework.web.servlet.FrameworkServlet.service
 63 (FrameworkServlet.java:845)
 64 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
 65 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
 66 (ApplicationFilterChain.java:305)
 67 	at org.apache.catalina.core.ApplicationFilterChain.doFilter
 68 (ApplicationFilterChain.java:210)
 69 	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
 70 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
 71 (ApplicationFilterChain.java:243)
 72 	at org.apache.catalina.core.ApplicationFilterChain.doFilter
 73 (ApplicationFilterChain.java:210)
 74 	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal
 75 (CharacterEncodingFilter.java:121)
 76 	at org.springframework.web.filter.OncePerRequestFilter.doFilter
 77 (OncePerRequestFilter.java:107)
 78 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
 79 (ApplicationFilterChain.java:243)
 80 	at org.apache.catalina.core.ApplicationFilterChain.doFilter
 81 (ApplicationFilterChain.java:210)
 82 	at org.apache.catalina.core.StandardWrapperValve.invoke
 83 (StandardWrapperValve.java:222)
 84 	at org.apache.catalina.core.StandardContextValve.invoke
 85 (StandardContextValve.java:123)
 86 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke
 87 (AuthenticatorBase.java:502)
 88 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
 89 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
 90 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
 91 	at org.apache.catalina.core.StandardEngineValve.invoke
 92 (StandardEngineValve.java:118)
 93 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
 94 	at org.apache.coyote.http11.AbstractHttp11Processor.process
 95 (AbstractHttp11Processor.java:1041)
 96 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process
 97 (AbstractProtocol.java:603)
 98 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
 99 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
100 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
101 	at java.lang.Thread.run(Thread.java:748)

二、错误分析:

       此异常的原因是由于mapper接口编译后在同一个目录下没有找到mapper映射文件而出现的。由于maven工程在默认情况下src/main/java目录下的mapper文件是不发布到target目录下的。

三、解决办法:

方法1:将Mapper映射文件放到src/main/resources目录下,然后再建一个和mapper接口所在的包名一样的包。

方法2:在此工程pom文件中配置一下resources。

  1 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 -->
  2 <build>
  3 	<resources>
  4           <resource>
  5                <directory>src/main/java</directory>
  6                <includes>
  7                    <include>**/*.properties</include>
  8                    <include>**/*.xml</include>
  9                </includes>
 10                <filtering>false</filtering>
 11           </resource>
 12      </resources>
 13 </build>

四、注意事项:

       原配置文件默认放在src/main/resources目录下,这样配置了之后,就指定src/main/java它是资源目录,src/main/resources目录就会不起作用了。如果不想这样,需要在配置中再加上一个resource节点,把src/main/resources目录也添加进来,即:

  1 <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 -->
  2 <build>
  3 	<resources>
  4             <resource>
  5                 <directory>src/main/java</directory>
  6                 <includes>
  7                     <include>**/*.properties</include>
  8                     <include>**/*.xml</include>
  9                 </includes>
 10                 <filtering>false</filtering>
 11             </resource>
 12             <resource>
 13                 <directory>src/main/resources</directory>
 14                 <includes>
 15                     <include>**/*.properties</include>
 16                     <include>**/*.xml</include>
 17                 </includes>
 18                 <filtering>false</filtering>
 19             </resource>
 20         </resources>
 21 </build>
原文地址:https://www.cnblogs.com/justlove/p/7246064.html