学习springboot整合mytatis时,运行报错
org.apache.ibatis.binding.BindingException: Invalid bound statement
(not found): com.xbt.mapper.UsersMapper.add at
org.apache.ibatis.binding.MapperMethodSqlCommand.<init>(MapperMethod.java:214)[mybatis?3.4.0.jar:3.4.0]atorg.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48)[mybatis?3.4.0.jar:3.4.0]atorg.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)[mybatis?3.4.0.jar:3.4.0]atorg.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)[mybatis?3.4.0.jar:3.4.0]atcom.sun.proxy.SqlCommand.<init>(MapperMethod.java:214) ~[mybatis-3.4.0.jar:3.4.0] at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) ~[mybatis-3.4.0.jar:3.4.0] at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59) ~[mybatis-3.4.0.jar:3.4.0] at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52) ~[mybatis-3.4.0.jar:3.4.0] at com.sun.proxy.SqlCommand.<init>(MapperMethod.java:214) [mybatis?3.4.0.jar:3.4.0]atorg.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) [mybatis?3.4.0.jar:3.4.0]atorg.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59) [mybatis?3.4.0.jar:3.4.0]atorg.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52) [mybatis?3.4.0.jar:3.4.0]atcom.sun.proxy.Proxy56.add(Unknown
Source) ~[na:na]
…
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) [tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.coyote.AbstractProtocolConnectionHandler.process(AbstractProtocol.java:790)[tomcat?embed?core?8.5.27.jar:8.5.27]atorg.apache.tomcat.util.net.NioEndpointConnectionHandler.process(AbstractProtocol.java:790) [tomcat-embed-core-8.5.27.jar:8.5.27] at org.apache.tomcat.util.net.NioEndpointConnectionHandler.process(AbstractProtocol.java:790)[tomcat?embed?core?8.5.27.jar:8.5.27]atorg.apache.tomcat.util.net.NioEndpointSocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-embed-core-8.5.27.jar:8.5.27]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.27.jar:8.5.27]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
at java.util.concurrent.ThreadPoolExecutorWorker.run(ThreadPoolExecutor.java:617)[na:1.8.045]atorg.apache.tomcat.util.threads.TaskThreadWorker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45] at org.apache.tomcat.util.threads.TaskThreadWorker.run(ThreadPoolExecutor.java:617)[na:1.8.04?5]atorg.apache.tomcat.util.threads.TaskThreadWrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.27.jar:8.5.27]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
使用的工具为IDEA,项目结构如下: 将mapper接口和mapper.xml文件按照mybatis默认的方式放在一起,接口名与Mybatis的映射文件名保持一模一样,方便mybatis进行扫描
关于org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题原因可大致分为两种:
一、 mybatis的xxxMapper接口与xxxMapper.xml接口没映射成功可细分为如下几种原因
- xxxMapper.xml中的namespace是否绑定到对应的xxxMapper.java接口
- xxxMapper.xm语句中的id在xxxMapper.java中是否有方法声明与之对应
3.配置的扫描xxxMapper.java接口类的包名是否正确
4.检查接口中的返回值是否和xml中的ResultType一致,排除返回值装配错误问题。
5.还有些其mybatis配置文件和接口类书写方面的细节原因不再一一赘述
二、 (本人遇到的问题)maven项目的编译问题,导致编译后文件下没有包括xxxMapper.xml文件
maven 默认只把 src/main/java 中的.java文件进行编译到class中以及 src/main/resources 里面的非.java 文件(.xml/.properties/…)进拷贝到classes 中。若想要把src/main/java 中的.xml文件拷贝至编译目录(classes)
解决办法:在pom文件中添加下列配置(再到编译目录(classes)下查看,此时已有xml文件,问题也得到解决)
<build><resources><resource><directory>src/main/java</directory><includes>**/*.xml</includes></resource></resources> </build>