解决Mybatis中出现的Invalid bound statement (not found)问题
目录
背景
在配置SpringMVC项目的过程中,同一个项目在eclipse上能运行,页面也能正常显示,但是在idea上就会运行该项目识就会出现Invalid bound statement (not found)问题,期间不知道问题是什么原因造成的的,导致无法正确定位问题,还爬了很对坑,现在将问题记录下来,惊醒自己。
问题
问题描述
在访问一个页面时弹出一下提示:
Invalid bound statement (not found): org.loushang.fdemoramework..user.dao.UserMapper.findAll
加载映射文件有四种方式
1.resource方式加载映射文件
<mappers> <!-- 这是resource方式加载配置文件 --> <mapper resource="sqlmap/UserMapper.xml"/> </mappers>
2.class方式:这里需要注意:接口类和映射文件放在同一个目录下,并文件名要一致
<mappers> <!-- class方式加载配置文件:class指定的是 mapper接口的地址 但是这时候就需要将接口类 和映射文件放在同一个目录下--> <mapper class="com.mo.mapper.UserMapper"/> </mappers>
3.包扫描加载映射文件 : 接口类 和映射文件放在同一个目录下,并文件名要一致
<mappers> <!-- 批量mapper的扫描 --> <package name="com.mo.mapper"/> </mappers>
4.使用本地文件(不推荐)
<mappers> <mapper url="file:///c:/mapper/UserMapper.xml"/> </mappers>
原始文件目录
问题位置
当使用IDEA编译器的时候,这样做其实是不行的,原因是IDEA编译后默认会把resource下的文件放到target的classpath下,但是src下的只有Java文件编译生成.class文件放入classpath下,其他文件会忽略的。
也就是说,放在mapper下的StudentMapper.xml是会被忽略的。
这个很有可能会报Invalid bound statement (not found)
解决方法
其实这些问题在eclipse中是不会出现的,解决方案就是让IDEA不要忽略src目录下的xml文件,在pom.xml文件中添加代码
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>
配置成功后
Build——>Rebuild Project
更新文件
成功后发现在目录中出现了UserMapper.xml文件
总结
配置一个项目问题还是很多,需要多家努力,勤奋学习啊!!!
注意
如果团队用Git来管理项目,同步的时候就会出现问题。一个人eclipse一个人用IDEA的话,eclipse可以通过接口加载映射文件,而且Mapper类和Mapper.xml文件可以放在同一目录下。但是IDEA不行,IDEA需要在pom.xml再进行配置。这一方面也要注意,最好就是使用同一款编辑器,也可以避免其他的麻烦。
参考原文:https://blog.csdn.net/doctor_ly/article/details/83000745
更多推荐
所有评论(0)