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

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

一、问题浮现:

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

image.gif1.png

image.gif2.png

image.gif3.png

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

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

image.gif

改为了

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

image.gif

还是不行。

于是我把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目录是编译文件输出目录。

5.png

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

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

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

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

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

6.pngimage.gif

编译完后发现,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>

image.gif

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

目录
相关文章
|
3月前
|
IDE 安全 Java
Lombok 在企业级 Java 项目中的隐性成本:便利背后的取舍之道
Lombok虽能简化Java代码,但其“魔法”特性易破坏封装、影响可维护性,隐藏调试难题,且与JPA等框架存在兼容风险。企业级项目应优先考虑IDE生成、Java Records或MapStruct等更透明、稳健的替代方案,平衡开发效率与系统长期稳定性。
186 1
|
3月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
3月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
400 1
|
4月前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
1383 1
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
192 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
215 2
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
164 0
|
3月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
266 16

推荐镜像

更多