关于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目录中了

目录
相关文章
|
2月前
|
前端开发 JavaScript Java
Java构建工具-maven的复习笔记【适用于复习】
这篇文档由「潜意识Java」创作,主要介绍Maven的相关知识。内容涵盖Maven的基本概念、作用、项目导入步骤、依赖管理(包括依赖配置、代码示例、总结)、依赖传递、依赖范围以及依赖的生命周期等七个方面。作者擅长前端开发,秉持“得之坦然,失之淡然”的座右铭。期待您的点赞、关注和收藏,这将是作者持续创作的动力! [个人主页](https://blog.csdn.net/weixin_73355603?spm=1000.2115.3001.5343)
44 3
|
2月前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
91 1
|
4月前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
119 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
4月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
348 8
|
4月前
|
Java 应用服务中间件 Maven
Maven的三种项目打包方式——pom,jar,war的区别
Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
441 3
|
4月前
|
Java Maven Android开发
【Azure Developer】VS Code打包Java maven Project 遇见 BUILD FAILURE
Unknown lifecycle phase "lean". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>
|
5月前
|
缓存 IDE Java
idea的maven项目打包时没有source下的文件
【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
270 1
|
4月前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
97 0
|
7月前
|
Java Maven
解决idea每次新建maven项目都需要重新配置maven的问题
解决idea每次新建maven项目都需要重新配置maven的问题
267 1
|
5月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
363 1
Maven——创建 Spring Boot项目

热门文章

最新文章

推荐镜像

更多