当前位置 : 主页 > 编程语言 > java >

Spring Boot MyBatis 项目Mapper包多路径扫描的指北

来源:互联网 收集:自由互联 发布时间:2023-12-28
问题背景 最近在做一个springboot项目,里面使用了 Spring Boot 和 mybatis ,在配置 MapperScan 时遇到了问题, mapper 文件分别在 com.xiaodou.aaa.mapper 和 cn.dapang.bbb.mapper 包中,我应该怎么配置才能

问题背景

最近在做一个springboot项目,里面使用了Spring Bootmybatis,在配置 MapperScan 时遇到了问题,mapper文件分别在com.xiaodou.aaa.mappercn.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 {

    // 其他配置...
}
网友评论