今天在学习SSM整合的时候,发生了这样一个错误
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
它的翻译就是 绑定异常,通常在整合Mybatis的时候会发生,说明找不到配置的映射文件,那这是为啥呢?
我是使用IDEA的,在配置Mybatis-spring的整合,和映射mapper的时候,需要做几件事。
- 在资源文件夹Resource中,创建包
(要注意:这里的包必须要跟src/main中的mapper层的包所处一致) - 创建映射文件,假设Dao层是AccountMapper.java,那你的映射文件就必须是AccountMapper.xml(映射文件名和Dao层文件名称一致)
- xml文件头是mybatis的mapper文件头
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- 创建namespace(namespace的值要设置为Mapper.java的全类名)
- 写SQL语句
- 在spring的配置文件中,整合mybatis
(配置数据源:druid的,c3p0的数据源等等。
SqlSessionFactoryBean:配置数据源、别名包扫描,配置位置等
MapperScannerConfigurer:配置Dao层包扫描等)
那有些人(包括我…)即使配置完之后还是会出问题,就摸不清头脑,到底怎么回事。检查以上的配置是否全部正确,还有一点很容易被忽略。
如果用惯了IDEA创建一个包,或者类,你可能会这么打
com.xxxx.dao.User 创建类的时候连着包一起创建
但是在资源部分创建包的时候,切记!切记一定要改掉
com/xxxx/dao 创建包的时候是路径名,所以必须要改成斜杠
我犯了这个错误,导致在进行测试的时候发现我的xml文件并没有跟Mapper绑定。
开了这个选项的时候切记一定要自己检查自己的resource包下面到底有没有创建错误,因为这两种创建包的方式长得是一样的!