Java mybatis org.apache.ibatis.binding.BindingException:无效的绑定语句(未找到)

Java mybatis org.apache.ibatis.binding.BindingException:无效的绑定语句(未找到),java,spring,spring-mvc,spring-mybatis,Java,Spring,Spring Mvc,Spring Mybatis,我使用SpringMVC和SpringMybatis来执行使用注释(@Insert,@Select等)的基本CRUD操作,并获得以下异常 org.apache.ibatis.binding.BindingException:无效的绑定语句(未找到): 这里有一个相关的问题,但这并不能解决我的问题,因为它使用XML(UserMapper.XML)映射查询,而我使用带有注释的java接口(UserMapper.java) 异常堆栈跟踪: org.springframework.web.util.Ne

我使用SpringMVC和SpringMybatis来执行使用注释(
@Insert
@Select
等)的基本CRUD操作,并获得以下异常

org.apache.ibatis.binding.BindingException:无效的绑定语句(未找到):

这里有一个相关的问题,但这并不能解决我的问题,因为它使用XML(
UserMapper.XML
)映射查询,而我使用带有注释的java接口(
UserMapper.java

异常堆栈跟踪:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.spring.mybatisdemo.mappers.UserMapper.selectNationality
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:827)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:801)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
    at org.eclipse.jetty.server.handler.ContextHandler.__doHandle(ContextHandler.java:1126)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1060)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113)
    at org.eclipse.jetty.server.Server.handle(Server.java:509)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:288)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:240)
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:539)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:620)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:540)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.spring.mybatisdemo.mappers.UserMapper.selectNationality
    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:196)
    at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:44)
    at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
    at com.sun.proxy.$Proxy41.selectNationality(Unknown Source)
    at com.spring.mybatisdemo.service.UserServiceImpl.selectNationalityById(UserServiceImpl.java:69)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.zeroturnaround.javarebel.fY.invoke(JRebel:1114)
    at java.lang.reflect.Method.invoke(Method.java)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at com.sun.proxy.$Proxy43.selectNationalityById(Unknown Source)
    at com.spring.mybatisdemo.controller.UserController.getUsers(UserController.java:65)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
我正在使用注释进行查询,下面是我从UserMapper.java接口获得的相关代码

@Select("SELECT nationalityId, name FROM nationality where nationalityId = #{nationalityId} ")
public Nationality selectNationality(Long nationalityId);
调用上述方法,如

Nationality nationality = userService.selectNationalityById(new Long("1"));
userserviceinpl.java
中,我注入了usermapperbean,并像

userMapper.selectNationality(nationalityId);
我用于选择
teamById
工作正常的相同查询

userMapper.getTeamById(teamId)

以及控制台中相应的teamById查询

[artifact:mvn] 2015-11-02 18:51:20 DEBUG SpringManagedTransaction:54 - JDBC Connection [com.mysql.jdbc.JDBC4Connection@1e846b60] will be managed by Spring
[artifact:mvn] 2015-11-02 18:51:20 DEBUG getTeamById:54 - ==>  Preparing: SELECT teamId, name FROM TEAM WHERE teamId = ? 
[artifact:mvn] 2015-11-02 18:51:20 DEBUG getTeamById:54 - ==> Parameters: 4(Long)
[artifact:mvn] 2015-11-02 18:51:20 DEBUG getTeamById:54 - <==      Total: 1
[artifact:mvn]2015-11-02 18:51:20调试SpringManagedTransaction:54-JDBC连接[com.mysql.JDBC。JDBC4Connection@1e846b60]将由Spring管理
[artifact:mvn]2015-11-02 18:51:20调试getTeamById:54-==>准备:选择teamId,teamId=?
[artifact:mvn]2015-11-02 18:51:20调试getTeamById:54-==>参数:4(长)

[artifact:mvn]2015-11-02 18:51:20调试getTeamById:54-我曾经犯过一个类似的错误,结果是目录不正确。
如果用户映射器的名称空间是
com.mybatisdemo.mappers.UserMapper
,请确保映射器位置是
src/resources/com/mybatisdemo/mappers/

有时我们可能会创建一个名为
com.mybatisdemo.mappers
的目录,然后它的位置变成
src/resources/com.mybatisdemo.mappers
,这是错误的

userMapper.getTeamById(teamId)
@Select("SELECT teamId, name FROM TEAM WHERE teamId = #{teamId}")
public Team getTeamById(Long teamId);
[artifact:mvn] 2015-11-02 18:51:20 DEBUG SpringManagedTransaction:54 - JDBC Connection [com.mysql.jdbc.JDBC4Connection@1e846b60] will be managed by Spring
[artifact:mvn] 2015-11-02 18:51:20 DEBUG getTeamById:54 - ==>  Preparing: SELECT teamId, name FROM TEAM WHERE teamId = ? 
[artifact:mvn] 2015-11-02 18:51:20 DEBUG getTeamById:54 - ==> Parameters: 4(Long)
[artifact:mvn] 2015-11-02 18:51:20 DEBUG getTeamById:54 - <==      Total: 1