sqlSessionFactoryBean.setMapperLocations 通配符 在配置代码中怎样使用

本文介绍如何在MyBatis中使用通配符配置Mapper文件的位置,通过PathMatchingResourcePatternResolver实现自动扫描指定路径下的所有XML映射文件。

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

sqlSessionFactoryBean.setMapperLocations 通配符 在配置代码中怎样使用

    @Bean(name = ["sqlSessionFactoryMicrotek"])
    @Primary
    @Throws(Exception::class)
    fun sqlSessionFactoryMicrotek(dataSourceMicrotek: DataSource,
                                  @Value("classpath:/mybatis/microtek/mybatis-config.xml")
                                  configLocation: Resource): SqlSessionFactory {
        val sqlSessionFactoryBean = SqlSessionFactoryBean()
        sqlSessionFactoryBean.setDataSource(dataSourceMicrotek)
        sqlSessionFactoryBean.setConfigLocation(configLocation)

        val resolver = PathMatchingResourcePatternResolver()
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/mapperxml/microtek/*.xml"))
        return sqlSessionFactoryBean.`object`
    }

完整的代码实例如下:

package com.alibaba.microtek.datasource

import com.alibaba.boot.tddl.builder.datasource.TDataSourceBuilder
import org.apache.ibatis.session.SqlSessionFactory
import org.mybatis.spring.SqlSessionFactoryBean
import org.mybatis.spring.SqlSessionTemplate
import org.mybatis.spring.mapper.MapperScannerConfigurer
import org.springframework.beans.factory.annotation.Value
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Primary
import org.springframework.core.io.Resource
import javax.sql.DataSource
import org.springframework.core.io.support.PathMatchingResourcePatternResolver




@Configuration
class DatasourceConfigMicrotek {
    @Value("tddl.microtek.app")
    val appName: String? = null

    @Bean(name = ["dataSourceMicrotek"])
    @Primary
    fun dataSourceMicrotek(): DataSource {
        return TDataSourceBuilder.create().appName(appName).dynamicRule(true).sharding(false).build()
    }

    @Bean(name = ["sqlSessionFactoryMicrotek"])
    @Primary
    @Throws(Exception::class)
    fun sqlSessionFactoryMicrotek(dataSourceMicrotek: DataSource,
                                  @Value("classpath:/mybatis/microtek/mybatis-config.xml")
                                  configLocation: Resource): SqlSessionFactory {
        val sqlSessionFactoryBean = SqlSessionFactoryBean()
        sqlSessionFactoryBean.setDataSource(dataSourceMicrotek)
        sqlSessionFactoryBean.setConfigLocation(configLocation)

        val resolver = PathMatchingResourcePatternResolver()
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/mapperxml/microtek/*.xml"))
        return sqlSessionFactoryBean.`object`
    }

    @Bean
    @Primary
    fun sqlSessionTemplateMicrotek(sqlSessionFactoryMicrotek: SqlSessionFactory): SqlSessionTemplate {
        return SqlSessionTemplate(sqlSessionFactoryMicrotek)
    }

    @Bean
    @Primary
    fun mapperScannerConfigurerMicrotek(): MapperScannerConfigurer {
        val mapperScannerConfigurer = MapperScannerConfigurer()
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryMicrotek")
        mapperScannerConfigurer.setBasePackage("com.alibaba.microtek.mapper.microtek")
        return mapperScannerConfigurer
    }

}
@Configuration public class MyBatisConfig { @Autowired private Environment env; static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; public static String setTypeAliasesPackage(String typeAliasesPackage) { ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); List<String> allResult = new ArrayList<String>(); try { for (String aliasesPackage : typeAliasesPackage.split(",")) { List<String> result = new ArrayList<String>(); aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN; Resource[] resources = resolver.getResources(aliasesPackage); if (resources != null && resources.length > 0) { MetadataReader metadataReader = null; for (Resource resource : resources) { if (resource.isReadable()) { metadataReader = metadataReaderFactory.getMetadataReader(resource); try { result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } } if (result.size() > 0) { HashSet<String> hashResult = new HashSet<String>(result); allResult.addAll(hashResult); } } if (allResult.size() > 0) { typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0])); } else { throw new RuntimeException("mybatis typeAliasesPackage 路径扫描错误,参数typeAliasesPackage:" + typeAliasesPackage + "未找到任何包"); } } catch (IOException e) { e.printStackTrace(); } return typeAliasesPackage; } @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage"); String mapperLocations = env.getProperty("mybatis.mapperLocations"); String configLocation = env.getProperty("mybatis.configLocation"); typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); VFS.addImplClass(SpringBootVFS.class); final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setTypeAliasesPackage(typeAliasesPackage); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations)); sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); return sessionFactory.getObject(); } }
04-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值