mybatis中mapper resource正常,package报错

报错信息
在这里插入图片描述
他说找不到mapper映射文件。我也查了好久,总结了网上找不到的几个原因
第一:接口名和mapper映射文件名一样,并且放在一个包里面
在这里插入图片描述我也确实放在一个包里面,并且类明一样
第二种:
mapper文件的namespace是包的路径
在这里插入图片描述

也确实是吧。我也都赋值粘贴了好几次
第三种:target目录中没有生成对应的文件
在这里插入图片描述

这里面也确实有这些文件。
我的mybatis配置文件
在这里插入图片描述
只能把package 换成resource直接定位mapper映射文件了。这样才能正常运行
还有一点,这个问题是在我加了个自己写的拦截器之后变成这样了
拦截器代码:
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    System.out.println("进入拦截器");
    HttpServletRequest request=(HttpServletRequest)servletRequest;
    HttpServletResponse response=(HttpServletResponse)servletResponse;
    String path=request.getServletPath();
    //不应该被拦截的资源,直接放行
    if ("/login.jsp".equals(path) || "/settings/user/login.do".equals(path)){
        filterChain.doFilter(servletRequest,servletResponse);
        //其他资源进行验证
    }else {
        User user=(User)request.getSession().getAttribute("user");
        if (user!=null){
            filterChain.doFilter(servletRequest,servletResponse);
        }else {
  response.sendRedirect(request.getContextPath()+"/login.jsp");
        }
    }
}

但是报错还有一个位置是

在这里插入图片描述
这个是我在拦截器之前写的一个过滤器,是用来过滤字符编码的
在这里插入图片描述
也可以说这两个都是过滤器,只是我用途不同。
在这里插入图片描述
web.xml文件中配置的两个过滤器。
总之,这个package问题出现的事件就是,配置了第二个过滤器之后。
最后只能配置成resource了
先保存一下,先不研究了,搞了一晚上,这都第二天上过又快过去了。也没找到原因。
或者有那位大哥看到知道原因告知一下~~

### MyBatisMapper 目录的配置与使用 #### 1. Mapper 文件路径命名方式 在 MyBatis 的项目结构中,`mybatis.mapper` 和 `mybatis/mapper` 是两种不同的路径定义形式。当在 resources 下创建目录时,如果命名为 `mybatis.mapper`,则表示该名称是一个单独的文件夹名字;而如果是 `mybatis/mapper`,则意味着存在两个嵌套的文件夹——`mybatis` 和其子文件夹 `mapper`[^1]。 对于位于 src 目录下的资源加载而言,“`.`” 和 “`/`” 均会被解析为后者的形式,即视为多级目录结构而非单一命名空间。 #### 2. Mapper 注册方法 MyBatis 提供了多种注册 Mapper 接口的方式: - **通过 XML 显式声明单个 Mapper** 可以在全局配置文件(通常是 mybatis-config.xml)内的 `<mappers>` 节点下指定具体的 Mapper 类或 XML 文件位置: ```xml <mappers> <mapper resource="com/jiulu/mybatis/mapper/TUserMapper.xml"/> </mappers> ``` 这里需要注意的是,`resource` 属性应指向实际存在的 XML 文件相对路径[^2]。 - **基于包扫描批量导入** 如果希望减少逐一手动添加每一个 Mapper 定义的工作量,则可以采用按包名自动检索机制来完成这一过程: ```xml <mappers> <package name="com.example.mappers"/> </mappers> ``` 此处假设所有的 DAO/Mapper 接口都集中存放在名为 `com.example.mappers` 的 Java 包内。 #### 3. Namespace 对齐规则 为了使 SQL 映射语句能够被正确执行,在编写 `.xml` 文件的时候需确保其中定义的 `namespace` 属性值严格匹配对应的接口全限定类名。例如下面的例子展示了如何设置 UserMapper 接口及其关联的 XML 文档之间的关系[^3]: ```java public interface UserMapper { @Select("SELECT * FROM users WHERE id=#{id}") User findById(int id); } ``` ```xml <mapper namespace="top.nz.dao.UserMapper"> <!-- CRUD operations --> </mapper> ``` 以上代码片段表明,XML 文件中的 `namespace` 应精确反映目标 Mapper 接口所在的完整包路径以及简单类名组合而成的结果字符串。 #### 4. 实际应用注意事项 开发人员应当注意保持良好的项目组织习惯,合理规划各功能模块间的物理分离度,从而便于后期维护管理的同时也提高了系统的可读性和扩展性。此外还需确认所使用的构建工具(如 Maven 或 Gradle)已正确定位到这些外部资源配置项的位置上以便顺利完成编译打包流程。 ```python # 示例 Python 伪代码展示可能涉及的操作逻辑转换场景 def find_user_by_id(user_id): sql_query = f"SELECT * FROM users WHERE id={user_id}" result_set = execute_sql(sql_query) return map_to_object(result_set) print(find_user_by_id(1)) ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值