IDEA中maven构建的SSM项目mapper绑定失败

前言

之前开发Web项目一直是用eclipse来开发,IDEA也用过,但一直用它来写一些小项目(非web项目),今天突然想用IDEA来开发web项目,于是说干就干,场景:利用maven构建一个SSM项目。一顿配置操作后把项目构建成了,可当测试时却出现了问题,Mybatis的Mapper一直绑定不上,一直报错。


Bug

如图所示:

一直提示提示:Invalid bound statement (not found),意思为绑定语句错误,找不到该方法。

分析

因为之前一直用eclipse来开发,这个问题还是第一次遇到,首先我先想到是不是配置文件错误,于是把配置文件逐个排查,经过一系列测试排查,发现配置文件并没有错误。没问题后又对代码经过一系列的检查,可也还是没有发现问题。
猜想
正当我一筹莫展时,突然想到是不是IDEA把项目编译后那些xml配置文件存放的路径的问题,因为IDEA明确了源码和资源文件的放置位置(maven项目),也就是说源码就要会被编译,但当我把xml文件放在java目录下的mian目录中我猜想是不是没被编译到classes中,才导致找不到方法。

解决方法

在pom.xml的标签下中加入如下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<resources>
<resource>
<!--编译resources下的配置,例如Spring的配置-->
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<!--编译java下的配置,例如Mybatis的Mapper-->
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>

意思为:xml配置文件随同java编译后的class文件一同copy到相应的class目录

结果
经过测试果然和我猜想的一样,最后运行成功,方法成功被调用。

结言

eclipse编译项目会自动将xml配置文件编译进classes,IDEA却不行,看来还是对IDEA的使用不熟练,之前一直用eclipse开发,不经常用IDEA,突然换个开发工具出现了太多问题,还是不够熟练,革命还未胜利,同志还须再努力。