SpringMVC +Mybatis 一个问题 Invalid bound statement (not found):

googlg 2017-04-24 10:44:54
SpringMVC 和Mybatis 集成 出现了一个问题,搜索了半天也没有解决;


Console 输出的错误:
严重: Servlet.service() for servlet spring threw exception
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.test.www.dao.MainEntityMapper.selectByPrimaryKey
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:184)
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:38)
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:49)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:42)
at $Proxy12.selectByPrimaryKey(Unknown Source)
at com.test.www.service.impl.MainEntityServiceImpl.selectByPrimaryKey(MainEntityServiceImpl.java:24)
at com.test.www.controller.MyTestController.sayHello(MyTestController.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
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:617)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
at java.lang.Thread.run(Thread.java:619)

只跑SpringMVC是没有问题的,和 Mybatis 数据库结合就出问题了:

Spring的 配置文件:ApplicationContext.xml 的内容:

<!-- 配置数据库 --> <!-- 配置数据源 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:database.properties</value>
</list>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${mysql.database.driver}" />
<property name="url" value="${mysql.database.url}" />
<property name="username" value="${mysql.database.user}" />
<property name="password" value="${mysql.database.password}" />
</bean>
<!-- 配置spring的JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置SqlSessionFactory -->
<bean id="sqlMapClient" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" >
</property>
<!-- mybatis 全局配置文件 -->
<property name="configLocation" value="classpath:mybatisconfig/SqlMapConfig.xml"></property>
</bean>

<!-- 把加载了 配置文件的 sqlMapClient 注入 SqlSessionTemplate模板-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlMapClient" />
</bean>

<!-- 注册Mapper:也可不指定特定mapper,而使用自动扫描包的方式来注册各种Mapper ,配置如下:-->
<!-- mapper 扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.test.www.dao" />
</bean>

<context:annotation-config/> <!-- 开启注解 -->
<context:component-scan base-package="com.test.www" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
<context:include-filter type="annotation" expression="org.springframework.stereotype.Component" />
</context:component-scan>

目录结构:


不知道问题出在哪了,困扰了好几天了。
...全文
541 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
大都督CM 2019-06-06
  • 打赏
  • 举报
回复
dao文件夹里面的 studentMapper.xml文件的 select语句的 id 和 对应的studentMapper.java文件的 方法名 不一样
qq_33974959 2017-04-25
  • 打赏
  • 举报
回复
看你的Mapper.class 以及 Mapper.xml 1、如果不在一个目录下在mapper.xml中要 注明报名.mapper 2、看看mapper.class中的方法名与mapper.xml 中相关操作id一致
paddon 2017-04-25
  • 打赏
  • 举报
回复
你的配置有问题,细心点检查。
qq_24211853 2017-04-25
  • 打赏
  • 举报
回复
我感觉是 MainEntityMapper.selectByPrimaryKey 中的参数有问题 或者是在 mapper文件中获取参数错误
暖心大人 2017-04-25
  • 打赏
  • 举报
回复
MainEntityMapper.selectByPrimaryKey 可能是你的类型写错了 resulttype resultmap用得对不
hersing 2017-04-24
  • 打赏
  • 举报
回复
错误原因很明显了啊,就是你mapper中定义的方法和你mybatis中方法名称不一致,spring找不到这个方法selectByPrimaryKey,仔细确认下吧
googlg 2017-04-24
  • 打赏
  • 举报
回复
引用 1 楼 hersing 的回复:
参考
之前已经按照这个帖子 监察了 一遍,还是没有解决
hersing 2017-04-24
  • 打赏
  • 举报
回复
Intboy 2017-04-24
  • 打赏
  • 举报
回复
MainEntityMapper.xml和MainEntityMapper.class要在同一个目录下

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧