tkMybatis多数据源配置


import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import tk.mybatis.spring.annotation.MapperScan;

import javax.sql.DataSource;

/**
 * 数据源初始化
 *
 */
@Configuration
@MapperScan(basePackages = {"com.xxxx.xxx.dds.mapper"},
        sqlSessionTemplateRef = "sqlSessionTemplateDdsDataSource",markerInterface = BaseMapper.class)
public class DdsDataSourceConfig {
    /**
     * 自动读取DataSource配置文件
     *
     * @return
     */
    @Primary
    @Bean(name = "ddsProperties")
    @ConfigurationProperties("spring.datasource.master")
    public DataSourceProperties ddsProperties() {
        return new DataSourceProperties();
    }


    /**
     * 添加@Primary注解,设置默认数据源,事务管理器
     *
     * @return
     */
    @Primary
    @Bean(name = "ddsDataSource")
    public DataSource ddsDataSource(@Qualifier("ddsProperties") DataSourceProperties properties) {
        DataSource dataSource = properties.initializeDataSourceBuilder()
                .type(DruidDataSource.class).build();
        return dataSource;
    }

    @Primary
    @Bean(name = "sqlSessionFactoryDdsDataSource")
    public SqlSessionFactory sqlSessionFactoryDdsDataSource(
            @Qualifier("ddsDataSource") DataSource ddsDataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(true);
        factoryBean.setConfiguration(configuration);

        // 使用ddsDataSource数据源, 连接ddsDataSource库
        factoryBean.setDataSource(ddsDataSource);

        //下边两句仅仅用于*.xml文件,如果整个持久层操作不需要使用到xml文件的话(只用注解就可以搞定),则不加
        //指定entity和mapper。xml的路径
        factoryBean.setTypeAliasesPackage("com.xxx.xxx.dds.entity");
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mappers/*Mapper.xml"));
        return factoryBean.getObject();
    }

    @Primary
    @Bean("sqlSessionTemplateDdsDataSource")
    public SqlSessionTemplate sqlSessionTemplateDdsDataSource(
            @Qualifier("sqlSessionFactoryDdsDataSource") SqlSessionFactory sqlSessionFactoryDdsDataSource) throws Exception {

        //使用注解中配置的Factory
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryDdsDataSource);
        return template;
    }
}


import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import tk.mybatis.spring.annotation.MapperScan;


import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = {"com.xxxx.xxx.dds.mapper.master"},
        sqlSessionTemplateRef = "sqlSessionTemplateMasterDataSource",markerInterface = BaseMasterMapper.class)
public class MasterVehicleDataSourceConfig {

    /**
     * 自动读取DataSource配置文件
     * @return
     */
    @Bean(name = "masterProperties")
    @ConfigurationProperties("spring.datasource.master.vehicle")
    public DataSourceProperties masterProperties() {
        return new DataSourceProperties();
    }

    @Bean(name = "masterDataSource")
    public DataSource masterDataSource(@Qualifier("masterProperties") DataSourceProperties properties) {
        DataSource dataSource = properties.initializeDataSourceBuilder()
                .type(DruidDataSource.class).build();
        return dataSource;
    }

    @Bean(name = "sqlSessionFactoryMasterDataSource")
    public SqlSessionFactory sqlSessionFactoryMasterDataSource(
            @Qualifier("masterDataSource")DataSource masterDataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(true);
        factoryBean.setConfiguration(configuration);

        // 使用masterDataSource数据源, 连接masterDataSource库
        factoryBean.setDataSource(masterDataSource);

        //下边两句仅仅用于*.xml文件,如果整个持久层操作不需要使用到xml文件的话(只用注解就可以搞定),则不加
        factoryBean.setTypeAliasesPackage("com.xxx.xxx.dds.entity.master");
        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/master/*Mapper.xml"));
        return factoryBean.getObject();
    }

    @Bean("sqlSessionTemplateMasterDataSource")
    public SqlSessionTemplate sqlSessionTemplateMasterDataSource(
            @Qualifier("sqlSessionFactoryMasterDataSource") SqlSessionFactory sqlSessionFactoryMasterDataSource) throws Exception {
        SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactoryMasterDataSource);
        return template;
    }

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个支持多数据源配置的Java持久层框架。在MyBatis配置文件中,可以通过配置多个数据源来实现多数据源配置。 首先,在配置文件中定义多个数据源。可以使用<dataSource>标签定义每个数据源的配置信息,包括数据库的驱动类名、连接地址、用户名、密码等信息。 然后,在配置文件中通过<environments>标签来配置多数据源。可以使用<environment>标签定义每个环境,包括指定数据源的ID和对应的事务管理器。 接着,在配置文件中使用<mapper>标签来指定每个数据源对应的Mapper文件。可以在<mapper>标签的namespace属性中指定Mapper文件的命名空间。 最后,在代码中通过SqlSessionFactoryBuilder来创建SqlSessionFactory,并在创建SqlSession时指定要使用的数据源的ID。可以使用SqlSessionFactory的openSession方法来创建SqlSession,并在参数中指定要使用的数据源的ID。 总结起来,使用MyBatis实现多数据源配置的步骤如下: 1. 在配置文件中定义多个数据源的配置信息。 2. 配置多数据源环境。 3. 指定每个数据源对应的Mapper文件。 4. 在代码中创建SqlSessionFactory,并指定要使用的数据源的ID。 5. 使用SqlSessionFactory创建SqlSession,并在参数中指定要使用的数据源的ID。 通过以上的配置,就可以实现在一个应用中使用多个数据源。在实际应用中,可以根据需要配置多个数据源,例如主从库读写分离、分库分表等场景。同时,可以根据需要在代码中动态切换数据源,实现更灵活的数据访问控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值