Ruoyi自定义资源映射

1.创建springboot项目

2.导入依赖

 		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

3.创建配置类ResourcesConfig实现WebMvcConfigurer

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class ResourcesConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry)
    {
        registry.addViewController("/").setViewName("forward:" + "/hello");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry)
    {
        /** 本地文件上传路径 */
        registry.addResourceHandler("/profile/**").addResourceLocations("file:D:/ruoyifile/uploadPath/");

    }
}

1.把/,映射到/hello
2.把/profile/,映射到本地的D:/ruoyifile/uploadPath/路径

4.创建HelloController类

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {
    
    @GetMapping("/hello")
    public String hello(){
        return "index";
    }
}

5.在resources/templates文件夹下创建index.html文件

<!DOCTYPE html>
<html  lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<img th:src="@{/profile/avatar/2021/08/31/6e3b8262-e9dc-4e8c-ad05-bc24c2aa724d.png}" >
</body>
</html>

6.运行springboot应用

访问http://localhost:8080/
在这里插入图片描述

在这里插入图片描述
也可以访问http://localhost:8080/profile/avatar/2021/08/31/6e3b8262-e9dc-4e8c-ad05-bc24c2aa724d.png
在这里插入图片描述
在我的本地磁盘中(D:\ruoyifile\uploadPath\avatar\2021\08\31)有此图片
在这里插入图片描述

<think>嗯,我现在遇到了Ruoyi项目中mapper.xml文件映射配置报错的问题,虽然不影响运行,但我想弄清楚原因并找到解决方案。首先,我需要回顾一下MyBatis和MyBatis-Plus的配置机制。根据引用[3],MyBatis-Plus在application.yml中配置了mapperLocations为classpath*:mapper/**/*Mapper.xml,这意味着框架会扫描所有类路径下mapper目录及其子目录中的Mapper.xml文件。 用户提到自己的mapper.xml文件放在单独的包下,而若依的却在resources/mapper目录下。引用[1]指出默认路径是resources/mapper,所以如果用户的自定义路径不符合这个配置,就会导致IDE报错,但运行时可能因为实际路径被正确加载而不影响运行。比如,如果用户把xml文件放在其他位置,但配置文件中mapperLocations没有包含该路径,IDE会检测不到,但实际运行时可能通过其他方式加载,比如手动指定了路径或者使用了通配符,导致虽然IDE报错,但程序能正常运行。 另外,引用[4]提到type无法导航到实体的问题,这可能是因为MyBatis-Plus的typeAliasesPackage配置不正确,导致IDE无法解析实体类的位置。如果实体类所在的包没有被正确扫描,IDE就会显示错误,但运行时如果类路径正确,程序可能依然能运行,因为编译后的class文件存在。 解决方案方面,首先检查mapper.xml的存放路径是否符合mapperLocations的设置。如果用户希望将xml放在单独的包下,比如java目录下的某个包,需要在构建工具(如Maven或Gradle)中配置资源包含,确保xml文件被复制到classpath中。例如,在Maven的pom.xml中添加资源目录配置,这样编译时xml文件会被打包到正确的位置。 另外,检查typeAliasesPackage是否覆盖了实体类所在的包。如果实体类在com.ruoyi.**.domain下,确保自定义模块的实体类也在这个包结构下,或者调整配置以包含新的包路径。 对于IDE报错但不影响运行的情况,可能需要清理和重新构建项目,或者重启IDE,让索引更新。同时,检查是否有拼写错误或路径错误,确保XML中的namespace和resultMap的type属性正确无误。 总结一下,问题的根源在于配置路径与实际文件位置不匹配,导致IDE无法正确索引,但运行时框架通过通配符或正确配置加载了文件。因此,调整文件位置或配置路径,并确保构建工具正确处理资源文件,应该能解决报错问题。</think>### Ruoyi项目中mapper.xml映射配置报错不影响运行的原因及解决方案 #### 一、问题原因分析 1. **IDE静态检测与运行时动态加载的差异** - **IDE静态检测**:若`mapper.xml`文件未放置在`mybatis-plus.mapperLocations`配置的路径(如默认`classpath*:mapper/**/*Mapper.xml`),IDE会因路径不匹配报错[^3]。 - **运行时动态加载**:MyBatis-Plus通过通配符`classpath*:`动态扫描所有符合条件的路径,即使IDE报错,只要实际编译后文件在类路径中,运行时仍能正常加载[^3][^1]。 2. **实体类导航问题** - **`typeAliasesPackage`配置不完整**:若实体类未包含在`mybatis-plus.typeAliasesPackage`指定的包范围内(如`com.ruoyi.**.domain`),IDE无法解析`resultMap`中的`type`属性,但运行时通过全限定类名仍可加载[^4]。 3. **构建工具未正确处理资源文件** - 若`mapper.xml`文件放在`src/main/java`目录下,但未在构建工具(如Maven)中配置资源包含规则,可能导致编译时未将XML文件复制到`target/classes`目录,从而引发运行时隐患。 --- #### 二、解决方案 ##### 1. **调整`mapper.xml`存放路径** - **推荐路径**:将文件统一放在`src/main/resources/mapper`目录下,与默认配置`classpath*:mapper/**/*Mapper.xml`匹配。 - **自定义路径**:若需自定义路径(如`src/main/resources/custom/mapper`),需同步修改`application.yml`中的`mapperLocations`: ```yaml mybatis-plus: mapperLocations: classpath*:custom/mapper/**/*.xml ``` ##### 2. **配置构建工具(以Maven为例)** - 若必须将XML文件放在`src/main/java`目录下,需在`pom.xml`中添加资源包含配置: ```xml <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build> ``` - 此配置确保XML文件会被复制到编译输出目录。 ##### 3. **修复实体类导航问题** - **扩展`typeAliasesPackage`范围**:在`application.yml`中明确包含实体类所在包: ```yaml mybatis-plus: typeAliasesPackage: com.ruoyi.**.domain,com.yourmodule.domain ``` - **使用全限定类名**:在`resultMap`中直接写实体类的完整路径: ```xml <resultMap type="com.yourmodule.domain.SysDeployForm" id="sysDeployFormMap"> ``` ##### 4. **IDE索引刷新** - 执行以下操作更新IDE索引: 1. **清理缓存**:`File > Invalidate Caches / Restart`。 2. **重新构建项目**:`Build > Rebuild Project`。 3. **检查配置同步**:确保IDE的Maven/Gradle插件已正确加载配置。 --- #### 三、验证步骤 1. **检查编译输出目录** 确认`target/classes`目录下存在`mapper.xml`文件,路径与`mapperLocations`配置一致。 2. **日志验证** 启动项目时观察日志,若输出`Loaded X mapper locations`且无`BindingException`,则说明映射成功[^3]。 3. **单元测试** 编写测试用例调用Mapper接口,验证数据库操作是否正常。 --- #### 四、相关技术原理 1. **MyBatis-Plus资源加载机制** - `classpath*:`语法支持多模块扫描,优先加载所有匹配的资源文件,覆盖IDE静态检测的局限性。 - 运行时通过`SqlSessionFactoryBean`动态解析配置,与IDE的静态分析无关。 2. **IDE静态检测的局限性** - IDE依赖显式配置或注解进行代码分析,若路径或包名不符合配置,会误报错,但编译后文件仍可能被正确加载[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值