2015-11-02 7 views
2

Я использую Spring MVC с Spring-Mybatis для выполнения основных операций CRUD с использованием аннотаций (@Insert, @Select и т.д.) и получить это следующее исключениеmybatis org.apache.ibatis.binding.BindingException: Invalid оценка утверждение (не найдено)

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

Вот связанный с этим вопрос, mybatis spring mvc application, getting Invalid bound statement (not found), но это не решает мою проблему, как он использует XML (UserMapper.xml) отображение для запросов, где я использую Java интерфейсы (UserMapper.java) с аннотациями.

Исключение StackTrace:

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) 

springConfig.xml

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="typeAliasesPackage" value="com.spring.mybatisdemo.model"/> 
    <property name="mapperLocations" value="classpath*:com/spring/mybatis/mappers/*.xml" /> 
</bean> 

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> 
    <constructor-arg index="0" ref="sqlSessionFactory" /> 
</bean> 

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
    <property name="basePackage" value="com.spring.mybatisdemo.mappers" /> 
</bean> 

Национальность POJO класс,

public class Nationality { 
    private Long nationalityId; 
    private String name; 

    //ignoring getters and setters 
} 

Я использую аннотацию для запросов и ниже мой соответствующий код из интерфейса UserMapper.java,

@Select("SELECT nationalityId, name FROM nationality where nationalityId = #{nationalityId} ") 
public Nationality selectNationality(Long nationalityId); 

Вызов выше метод, как,

Nationality nationality = userService.selectNationalityById(new Long("1")); 

И в UserServiceImpl.java я вводил UserMapper боб и использовать его как,

userMapper.selectNationality(nationalityId); 

тот же запрос я использовал для выбора teamById отлично работает,

userMapper.getTeamById(teamId) 

и

@Select("SELECT teamId, name FROM TEAM WHERE teamId = #{teamId}") 
public Team getTeamById(Long teamId); 

и соответствующий teamById запрос в консоли,

[artifact:mvn] 2015-11-02 18:51:20 DEBUG SpringManagedTransaction:54 - JDBC Connection [[email protected]] 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 

Я не могу, почему только национальность имеет эту проблему в то время как тот же самый метод для класса Team работает отлично , Что может быть проблемой в моем коде для получения данных о Национальности?

ответ

1

Однажды я сделал аналогичную ошибку, которая оказалась неправильной.
Если пространство имен UserMapper равно com.mybatisdemo.mappers.UserMapper, убедитесь, что координаты карты - src/resources/com/mybatisdemo/mappers/.
Иногда мы могли бы создать каталог с именем com.mybatisdemo.mappers, тогда его местоположение окажется src/resources/com.mybatisdemo.mappers, что неверно.