关于maven项目src/main/java目录下mapper文件不生效的问题解决方法

一、问题浮现:

在构建maven+mybatis项目时,遇到个问题,就是接口dao无法找到对应的mapper.xml文件,

项目结构及注解配置的均没有问题。但是调用接口就会发生异常,报找不到接口对应的mapper文件。查资料后,又把

mybatis.mapper-locations=classpath:com.yk.springsecuritydemo.mapper/*.xml

改为了

mybatis.mapper-locations=classpath:com/yk/springsecuritydemo/mapper/*.xml

还是不行。

于是我把sql直接写在了dao接口的方法上,这次竟然成功了!说明注解写的都没有问题,心里一万个不解。

后来忽然想起来是不是目录编译问题。

于是查资料发现,src/main/java目录默认只能编译java文件,src/main/resources目录才能编译配置文件。验证一下,把mapper.xml放到src/main/resources下,配置文件路径修改一下,重启项目,成功!

二、相关知识

maven项目目录结构:

src/main/java默认加载java文件,所以这个目录在开发时一般只放java文件。

src/main/resources目录放置项目中的各种配置文件及静态资源,如html页面、yml文件、properties文件、css文件、js文件、xml文件等。

下面再说说项目中经常用到的classpath:这个词

首先介绍一下maven项目打包后的目录:

src目录就是开发的代码都在这里面,target目录是编译文件输出目录。

可以看到,编译后src/main目录下的java目录和resources目录中的文件都到target/classes目录下了,其中,是src/main/java下的目录直接复制到了项目根目录,src/main/resources下面的文件也是全部复制到了项目的根目录下

了解完maven项目编译后各文件及包的存放规则就很容易知道classpath的意思了。

classpath的意思是项目根路径,也就是target/classes。

三、出现该问题的原因思考

但是默认情况下,src/main/java下的非java文件不会编译到target/classes/com/...对应的路径下,如下图:

编译完后发现,target/classes/com/yk/springsecuritydemo/mapper目录下没有UserInfoMapper.xml。这是因为src/main/java目录默认只能编译java文件,不能编译mapper.xml,所以一开始把mapper文件放在src/main/java目录下就会找不到mapper文件,但是放在src/main/resources目录下就能找到。

有人会问,我偏不想把mapper文件放在src/main/resources下,我就要放在src/main/java下,怎么办?

需要在pom.xml配置一下:

<build>  
    <resources>  
        <resource>  
            <directory>src/main/java</directory>  
            <includes>  
                <include>**/*.xml</include>  
            </includes>  
        </resource>  
    </resources>  
</build>

就可以把java路径下的xml文件编译到对应的class目录中了

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值