使用maven整合mybatis时出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
分析原因是mybatis的映射文件的问题,首先进行分析排查:
1.检查mapper接口和对应的xml文件的包名是否对应
2.检查xml文件的namespace与mapper接口的包名是否对应
3.检查mapper接口的函数名字与xml文件中的方法的id是否一致
4.如果是ssm整合工程的话,应该检查一下在spring-mybatis的配置文件applicationContext-dao.xml(这里的名字不唯一,这里是为了统一名字)有没有加载进web.xml中。
5.如果是普通的ssm项目,则这样配置:
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="druidDataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- 配置mapper文件的位置 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
一般的错误此时已经可以基本解决了。
如果还没有解决的话,我们可以考虑是xxxMapper.xml文件没有编译到classes文件中,或者是路径错误访问不到。
我们可以将xxxMapper.xml文件直接手动拖到对应的目录下,比如我将ItemMapper.xml拖到了classes中的与ItemMapper.class在一个目录,再次启动tomcat服务器就可以正常访问了。
这是一个治标不治本的方法,我们要从根本上找问题的话就是,我们在resources中创建目录用的方式是不对的。
正确的方式应该是这样的:
要使用/ 来分割目录,使用点 . 来分割的话创建的目录就是一个名称为com.atyyc.ssm.dao的目录,所以mybatis访问的话,路径就错误了,这是一个创建包的小细节,圈起来。