整天写业务逻辑代码,但偶尔整个配置搞死人(根基不牢),有些细节知识还是欠缺,遇到问题总是搞的很烦躁,通过这篇博文将自己遗忘的知识总结起来。
_____________________________________________________________________________________________
先贴错误:
看起来很简单,按照错误排查一下,就ok,但硬生生搞了半天,还搞的烦躁,这么简单,咋找不到问题呢。
分析:
看错误可知,找不到mapper文件。
查看mybatis的配置文件路径是否写正确。
但看样子写的路径是没问题。 于是将mapper.xml文件放到resource目录下,发现可以访问(下图是路径)。
就在想为什么放在dao层中写路径就访问不到了呢?
带着问题出发,看了下编译后的target目录,如下图没有打包后的*mapper.xml,大致找到问题了,为什么运行之后将mapper.xml打包不进来呢?百度了下maven打包规则,可知:
这种情况是这样的,maven打包的时候默认打包src/main/java下的class文件,打包src/main/resources下的配置文件。
(上面发现xml不见的契机其实是这样的:运行项目,报错,说mapper.java里头的方法bind exception,这个错误就是xml不存在导致的)
如下往pom文件的bulid节点里头增加如下子节点内容即可解决问题(在pom中添加之后一定要 reimport maven project 胰一下,让配置生效):
<!-- **.xml写在src找不到问题解决方案 -->
<resources>
<resource>
<!-- directory:指定资源文件的位置 -->
<directory>src/main/java</directory>
<includes>
<!-- “**” 表示任意级目录 “*”表示任意任意文件 -->
<!-- mvn resources:resources :对资源做出处理,先于compile阶段 -->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!-- filtering:开启过滤,用指定的参数替换directory下的文件中的参数(eg. ${name}) -->
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
总结:
maven打包,默认会把src/main/resources下面的配置文件打包进来,src/main/java下的java文件编译打包进来。
一旦配置pom文件里头的resources节点,那么maven打包的时候自动打破默认的捞取配置文件的位置,只捞取我们配置的位置的配置文件