mybatis 如何使用通配符配置 mapper

本文介绍如何在Spring MVC + MyBatis项目中正确配置Mapper路径,避免使用时需要为每个XML文件单独添加配置的问题,并提供了一种通配符方式来批量加载所有Mapper文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springmvc+mybatis+mysql.我想配置mapper路径向下面这样。不用每次新建了一个 xml文件就添加一个。但是系统启动的时候报  Could not find resource cn/com/vobile/**/*_sqlmap_mysql.xml错误
<mappers>
<mapper resource="cn/com/vobile/**/*_sqlmap_mysql.xml" />
</mappers>

怎么解决?


回答:

你的那个不能使用统配(ant匹配模式)。

例子:文档

XML/HTML code
?
1
2
3
4
< bean  id = "sqlSessionFactory"  class = "org.mybatis.spring.SqlSessionFactoryBean" >
   < property  name = "dataSource"  ref = "dataSource"  />
   < property  name = "mapperLocations"  value = "classpath*:sample/config/mappers/**/*.xml"  />
</ bean >
关于通用匹配是spring提供的ant匹配法,mybatis 没有这个功能。具体实现见: AntPathMatcher

例子如下:


public class AntPathMatcher
extends Object
implements PathMatcher
PathMatcher implementation for Ant-style path patterns.

Part of this mapping code has been kindly borrowed from Apache Ant.

The mapping matches URLs using the following rules:

  • ? matches one character
  • * matches zero or more characters
  • ** matches zero or more directories in a path
  • {spring:[a-z]+} matches the regexp [a-z]+ as a path variable named "spring"

Examples

  • com/t?st.jsp — matches com/test.jsp but also com/tast.jsp or com/txst.jsp
  • com/*.jsp — matches all .jsp files in the com directory
  • com/**/test.jsp — matches all test.jsp files underneath the com path
  • org/springframework/**/*.jsp — matches all .jsp files underneath the org/springframework path
  • org/**/servlet/bla.jsp — matches org/springframework/servlet/bla.jsp but also org/springframework/testing/servlet/bla.jsp and org/servlet/bla.jsp
  • com/{filename:\\w+}.jsp will match com/test.jsp and assign the value test to the filename variable


### 如何在 Spring Boot 中配置 MyBatis 的自定义 Mapper 路径 要在 Spring Boot 中配置 MyBatis 并指定自定义的 Mapper 文件路径,可以通过 `application.yml` 或 `application.properties` 来完成。以下是详细的说明: #### 1. 配置文件中的设置 通过配置文件可以指定 MyBatis 的 SQL 映射文件的位置以及全局配置文件的位置。例如,在 YAML 格式的配置文件中,可以这样写[^1]: ```yaml spring: datasource: username: root password: 1234 url: jdbc:mysql://localhost:3306/mydb driver-class-name: com.mysql.cj.jdbc.Driver mybatis: config-location: classpath:mybatis/mybatis-config.xml # 全局配置文件位置 mapper-locations: classpath:mybatis/mapper/*.xml # 自定义 Mapper 文件路径 ``` 上述配置指定了两个重要参数: - **config-location**: 定义了 MyBatis 的全局 XML 配置文件所在位置。 - **mapper-locations**: 指定 SQL 映射文件所在的目录。 如果需要更灵活的方式加载多个路径下的 Mapper 文件,则可以在 `mapper-locations` 使用通配符或者分号分割多个路径。 --- #### 2. Java 配置类支持 除了通过配置文件外,还可以借助 Java 配置类实现更加复杂的场景需求。比如引入额外的功能模块或动态调整资源加载逻辑时,推荐创建一个专门用于 MyBatis配置类并标注相应的注解[^2]。 下面是一个简单的例子展示如何手动注册 Mapper 所需的内容: ```java package org.springboot.sample.config; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @MapperScan(basePackages = "org.springboot.sample.mapper") // 设置 Mapper 接口扫描的基础包 public class MyBatisConfig { @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { // 可在此处进一步定制化 SqlSessionFactory 实现细节... return new SqlSessionFactory(); } } ``` 此方法允许开发者显式声明哪些包内的接口会被识别为 MyBatis Mappers,并且能够方便地注入其他 Bean 进行依赖管理。 --- #### 3. 动态多数据源的支持(可选) 对于某些复杂项目可能涉及切换不同数据库实例的情况,这时就需要考虑加入动态数据源功能。通常做法是先定义好各个可用的数据源类型作为枚举值[^5],再配合 AOP 切面技术实现在运行期间无缝转换目标连接池。 示例代码如下所示: ```java // 枚举表示不同的数据源名称 public enum DBTypeEnum { MASTER, SLAVE1, SLAVE2; } // 数据源上下文持有器 @Component public class DataSourceContextHolder { private static final ThreadLocal<String> contextHolder = new ThreadLocal<>(); public static void setDbType(DBTypeEnum dbType) { contextHolder.set(dbType.name()); } public static String getDbType() { return contextHolder.get(); } public static void clearDbType() { contextHolder.remove(); } } ``` 随后还需要编写具体的路由策略和服务提供者来绑定这些抽象概念至实际物理对象之上。 --- #### 总结 综上所述,无论是采用静态方式还是动态机制都可以很好地满足大多数业务系统的开发诉求。只需按照官方文档指引合理安排各项属性即可轻松达成预期效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值