解决在idea中SSM框架数据持久层中,找不到mapper接口中的方法问题:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.edu.cqust.services.BookService.selectById
网上解决办法(并没有解决我的问题),或许能够解决到你的问题:
- 检查xml文件所在的package名称是否和interface对应的package名称一一对应
- 检查xml文件的namespace是否和xml文件的package名称一一对应
- 检查函数名称能否对应上
- 去掉xml文件中的中文注释
- 随意在xml文件中加一个空格或者空行然后保存
在idea中:
-
在数据持久层dao的配置文件中,进行如下配置:
<!-- 扫描Dao包,创建动态代理对象,会自动存储到Spring IoC容器中--> <!-- 注意:这里的cn.edu.cqust.dao必须是一级一级的目录,而且必须是cn.edu.cqust.dao,与dao接口路径一致,并不是一个文件夹,所以需要一级一级的去进行建立--> <!-- 也可以使用<mybatis:scan base-package="cn.edu.cqust.dao"/>来进行代替,但都需要保证,在编译文件目录中的cn.edu.cqust.dao下面有编译的BookMapper.xml文件--> <!-- 因为最终的目的是需要:在编译生成的文件路径中,要保证,dao层接口与对应的xml映射文件在同一路径,这样dao层接口才能访问到对应的sql语句接口--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 一定要扫描的dao的包--> <property name="basePackage" value="cn.edu.cqust.dao"/> </bean> <!-- 程序配置使用自动扫描来识别容器中所有Mappe组件让程序自动扫描org.crazyit.app.dao包所有的Mapper组件--> <!-- <mybatis:scan base-package="cn.edu.cqust.dao"/>-->如果想要使用mybatis:scan这个标签的话,需要添加mybatis的schema路径,这里附上全部的schema:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mybatis="http://mybatis.org/schema/mybatis-spring" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd"> </beans> -
在idea中的resources下如果直接创建文件夹为cn.edu.cqust.dao,那么只会生成一个文件夹,且名称如cn.edu.cqust.dao,如下图所示:
正确、简介的创建文件夹方式为:
光标放在resources上,右键->new->Directory->cn/edu/cqust/dao,如下图所示:
-
所以需要自己手动,一个一个文件夹目录的生成,生成的目录结构如下图所示:
-
经过这样配置了之后,会发现,在经过idea编译之后,得到的编译文件,target下cn.edu.cqust.dao下面既有BookMapper接口也有BookMapper.xml配置文件,具体项目路径如下图所示: