Mybatis在idea中错误:Invalid bound statement (not found)

学习mybatis的过程中,测试mapper自动代理的时候一直出错,在eclipse中可以正常运行,而同样的代码在idea中却无法成功。虽然可以继续调试,但心里总是纠结原因。百度了好久,终于找到一个合适的原因。参考:http://blog.csdn.net/z69183787/article/details/48933481;

原因:(参考:http://www.linuxidc.com/Linux/2015-06/118877.htm)

IDEA的maven项目中,默认源代码目录下的xml等资源文件并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉。

如果使用的是Eclipse,Eclipse的src目录下的xml等资源文件在编译的时候会自动打包进输出到classes文件夹。Hibernate和Spring有时会将配置文件放置在src目录下,编译后要一块打包进classes文件夹,所以存在着需要将xml等资源文件放置在源代码目录下的需求。

解决:

方法1:将xml或properties等配置文件放到resource下,并修改获取配置文件的代码,比如注册mapper.xml的位置等;

方法2:在maven中添加过滤:

 1  <!--配置Maven 对resource文件 过滤 -->
 2         <resources>
 3             <resource>
 4                 <directory>src/main/resources</directory>
 5                 <includes>
 6                     <include>**/*.properties</include>
 7                     <include>**/*.xml</include>
 8                 </includes>
 9                 <filtering>true</filtering>
10             </resource>
11             <resource>
12                 <directory>src/main/java</directory>
13                 <includes>
14                     <include>**/*.properties</include>
15                     <include>**/*.xml</include>
16                 </includes>
17                 <filtering>true</filtering>
18             </resource>
19         </resources>

我采用mybatis的自动代理设置,将mapper文件和xml文件同名同包下,并在sqlMap.xml(mybatis-config.xml)中配置mapper自动注册扫描包:

 1 <mappers>
 2         <mapper resource="sqlmap/User.xml"/>
 3         <!--通过resource方法一次加载一个映射文件 -->
 4          <!--<mapper resource="sqlmap/UserMapper.xml"/>-->
 5         
 6         <!-- 通过mapper接口加载单个 映射文件
 7         遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
 8         上边规范的前提是:使用的是mapper代理方法
 9          -->
10          <!--<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>-->
11         
12         <!-- 批量加载mapper
13         指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
14         遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
15         上边规范的前提是:使用的是mapper代理方法
16          -->
17         <package name="cn.itcast.mybatis.mapper"/>
18 
19     </mappers>

测试通过,解决了心头的疙瘩。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

敲黑板:手把手教你 git 全操作

4、合并完成后,删除dev分支.(删除dev分支时,注意我们当前所在的分支不能是dev分支)

803
来自专栏云计算教程系列

如何在CentOS 7安装网页服务器(LNMP)

LNMP是一组可用于为动态网页和Web应用程序提供服务的软件。这是一个描述Linux操作系统的首字母缩略词,带有Nginx Web服务器。后端数据存储在MySQ...

1194
来自专栏james大数据架构

实用收藏Linux命令备忘

系统操作 #使用shutdown命令马上重启系统 [root@H32 ~]# shutdown –r now  #使用shutdown命令马上关闭系统 [ro...

2196
来自专栏逻辑熊猫带你玩Python

Linux | 像Windows一样,复制移动重命名等操作

小编在上一篇文章中讲到Linux下的目录操作,一共讲了三个命令,分别是cd、ls、和pwd。但是这里有个问题,既然目录就是文件夹,那么,怎样新建或者删除文件夹,...

1082
来自专栏Angular&服务

恢复mysql数据库

show binlog events in 'mysql-bin.000002' 查看指定文件

953
来自专栏龙渊阁测试精英

Jmeter(二十九)_dotnet搭建本地接口服务

  这里使用的服务名为Bookshelf,在github上,自行下载。要运行此服务,需要.Net Core SDK 2.1或更高版本。如果尚未安装,从.Net ...

622
来自专栏程序之美

docker运行容器远程挂载卷

872
来自专栏linux运维学习

linux学习第三十六篇:MariaDB安装,Apache安装

MariaDB安装 将待会下载的源码包放到这个目录下: cd /usr/local/src 下载源码包: wget https://downloads...

2008
来自专栏C/C++基础

Linux命令(17)——su与sudo命令

su用于临时切换身份到另一个指定的用户,未指定用户名默认为root。使用su切换用户身份后,默认情况下不改变当前工作目录,但会改变“HOME”、“SHELL”、...

693
来自专栏北京马哥教育

破解Linux系统root用户密码

linux系统的启动过程 在介绍破解Linux系统root密码之前先了解一下linux系统的启动过程: 1 开机自检(POST),初始化部分硬件 2 搜...

3839

扫码关注云+社区