Spring Boot MyBatis项目中,如何配置Mapper包的多路径扫描指南?

更新于
2026-10-10 19:11:41
261阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1056个文字,预计阅读时间需要5分钟。

Spring Boot MyBatis项目中,如何配置Mapper包的多路径扫描指南?

在配置`MapperScan`时,如果遇到`mapper`文件分别位于不同的包中,例如`com.xiaodou.aaa.mapper`和`cn.dapang.bbb.mapper`,你可以通过以下方式来配置:

1. 在`application.properties`或`application.yml`文件中,为每个包单独配置`MapperScan`。

例如,在`application.properties`中:

propertiesmybatis.mapper-locations=classpath:mapper/com/xiaodou/aaa/mapper/*.xmlmybatis.mapper-locations=classpath:mapper/cn/dapang/bbb/mapper/*.xml

或者在`application.yml`中:

yamlmybatis: mapper-locations: - classpath:mapper/com/xiaodou/aaa/mapper/*.xml - classpath:mapper/cn/dapang/bbb/mapper/*.xml

2. 如果你的`MapperScan`配置中使用了通配符,确保通配符匹配到正确的目录结构。

例如,如果你的`MapperScan`配置如下:

java@MapperScan(com.xiaodou.aaa.mapper)

Spring Boot MyBatis项目中,如何配置Mapper包的多路径扫描指南?

那么确保你的`mapper`文件位于`src/main/resources/mapper/com/xiaodou/aaa/mapper`目录下。

3. 如果以上方法都不适用,你可以考虑使用`@MapperScan`注解的`value`属性,明确指定包含`mapper`文件的包路径。

例如:

java@MapperScan(com.xiaodou.aaa.mapper, cn.dapang.bbb.mapper)

这样配置后,Spring Boot会自动扫描这两个包下的`mapper`文件。

问题背景

最近在做一个springboot项目,里面使用了Spring Boot 和 mybatis,在配置 MapperScan 时遇到了问题,mapper文件分别在com.xiaodou.aaa.mapper和cn.dapang.bbb.mapper包中,我应该怎么配置才能保证两者都能扫描到呢?

解决方法

一、配置类配置

第一种方法是在 Mybatis 的配置类使用MapperScannerConfigurer来配置不同包下的Mapper接口扫描路径。示例代码如下所示:

@Configuration public class MyBatisConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource()); // 设置mapper文件的扫描路径 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:com/xiaodou/aaa/mapper/*.xml")); sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:cn/dapang/bbb/mapper/*.xml")); return sqlSessionFactoryBean.getObject(); } @Bean public PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); } // 配置MapperScan,指定不同包下的Mapper接口 @Bean public MapperScannerConfigurer mapperScannerConfigurerDawang() { MapperScannerConfigurer configurer = new MapperScannerConfigurer(); configurer.setBasePackage("com.xiaodou.aaa.mapper"); configurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); return configurer; } @Bean public MapperScannerConfigurer mapperScannerConfigurerHuaguoshan() { MapperScannerConfigurer configurer = new MapperScannerConfigurer(); configurer.setBasePackage("cn.dapang.bbb.mapper"); configurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); return configurer; } }

注解方法

1、书写多个配置类,每个配置类都加上注解

@Configuration @MapperScan("com.xiaodou.aaa.mapper") // 指定第一个包的路径 public class DawangMyBatisConfig { // 其他配置... } @Configuration @MapperScan("cn.dapang.bbb.mapper") // 指定第二个包的路径 public class HuaguoshanMyBatisConfig { // 其他配置... }

2、可以使用一个配置类,并在该配置类上使用多个@MapperScan注解来扫描多个包。

@Configuration @MapperScan("com.xiaodou.aaa.mapper") @MapperScan("cn.dapang.bbb.mapper") public class MyBatisConfig { // 其他配置... }

3、在使用@MapperScan注解时,也可以指定多个包路径,因为@MapperScan注解本身并不支持多个basePackages属性。所以这里我们使用数组的方式将多个包路径传递给basePackages属性。

@Configuration @ComponentScan(basePackages = {"com.xiaodou.aaa.mapper", "cn.dapang.bbb.mapper"}) public class MyBatisConfig { // 其他配置... }

本文共计1056个文字,预计阅读时间需要5分钟。

Spring Boot MyBatis项目中,如何配置Mapper包的多路径扫描指南?

在配置`MapperScan`时,如果遇到`mapper`文件分别位于不同的包中,例如`com.xiaodou.aaa.mapper`和`cn.dapang.bbb.mapper`,你可以通过以下方式来配置:

1. 在`application.properties`或`application.yml`文件中,为每个包单独配置`MapperScan`。

例如,在`application.properties`中:

propertiesmybatis.mapper-locations=classpath:mapper/com/xiaodou/aaa/mapper/*.xmlmybatis.mapper-locations=classpath:mapper/cn/dapang/bbb/mapper/*.xml

或者在`application.yml`中:

yamlmybatis: mapper-locations: - classpath:mapper/com/xiaodou/aaa/mapper/*.xml - classpath:mapper/cn/dapang/bbb/mapper/*.xml

2. 如果你的`MapperScan`配置中使用了通配符,确保通配符匹配到正确的目录结构。

例如,如果你的`MapperScan`配置如下:

java@MapperScan(com.xiaodou.aaa.mapper)

Spring Boot MyBatis项目中,如何配置Mapper包的多路径扫描指南?

那么确保你的`mapper`文件位于`src/main/resources/mapper/com/xiaodou/aaa/mapper`目录下。

3. 如果以上方法都不适用,你可以考虑使用`@MapperScan`注解的`value`属性,明确指定包含`mapper`文件的包路径。

例如:

java@MapperScan(com.xiaodou.aaa.mapper, cn.dapang.bbb.mapper)

这样配置后,Spring Boot会自动扫描这两个包下的`mapper`文件。

问题背景

最近在做一个springboot项目,里面使用了Spring Boot 和 mybatis,在配置 MapperScan 时遇到了问题,mapper文件分别在com.xiaodou.aaa.mapper和cn.dapang.bbb.mapper包中,我应该怎么配置才能保证两者都能扫描到呢?

解决方法

一、配置类配置

第一种方法是在 Mybatis 的配置类使用MapperScannerConfigurer来配置不同包下的Mapper接口扫描路径。示例代码如下所示:

@Configuration public class MyBatisConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource()); // 设置mapper文件的扫描路径 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:com/xiaodou/aaa/mapper/*.xml")); sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:cn/dapang/bbb/mapper/*.xml")); return sqlSessionFactoryBean.getObject(); } @Bean public PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); } // 配置MapperScan,指定不同包下的Mapper接口 @Bean public MapperScannerConfigurer mapperScannerConfigurerDawang() { MapperScannerConfigurer configurer = new MapperScannerConfigurer(); configurer.setBasePackage("com.xiaodou.aaa.mapper"); configurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); return configurer; } @Bean public MapperScannerConfigurer mapperScannerConfigurerHuaguoshan() { MapperScannerConfigurer configurer = new MapperScannerConfigurer(); configurer.setBasePackage("cn.dapang.bbb.mapper"); configurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); return configurer; } }

注解方法

1、书写多个配置类,每个配置类都加上注解

@Configuration @MapperScan("com.xiaodou.aaa.mapper") // 指定第一个包的路径 public class DawangMyBatisConfig { // 其他配置... } @Configuration @MapperScan("cn.dapang.bbb.mapper") // 指定第二个包的路径 public class HuaguoshanMyBatisConfig { // 其他配置... }

2、可以使用一个配置类,并在该配置类上使用多个@MapperScan注解来扫描多个包。

@Configuration @MapperScan("com.xiaodou.aaa.mapper") @MapperScan("cn.dapang.bbb.mapper") public class MyBatisConfig { // 其他配置... }

3、在使用@MapperScan注解时,也可以指定多个包路径,因为@MapperScan注解本身并不支持多个basePackages属性。所以这里我们使用数组的方式将多个包路径传递给basePackages属性。

@Configuration @ComponentScan(basePackages = {"com.xiaodou.aaa.mapper", "cn.dapang.bbb.mapper"}) public class MyBatisConfig { // 其他配置... }