美文网首页
SpringBoot之mybatis多数据源

SpringBoot之mybatis多数据源

作者: 不浪漫的阳光 | 来源:发表于2019-01-23 09:56 被阅读0次

    依赖

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>
    

    单数据源

    application.properties

    mybatis.config-location=classpath:mybatis/mybatis-config.xml
    mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
    mybatis.type-aliases-package=com.neo.model
    
    spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    

    启动类上加注解,扫描mapper @MapperScan("com.neo.mapper")

    mybatis-config.xml:配置下别名

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
        <configuration>
            <typeAliases>
                <typeAlias alias="Integer" type="java.lang.Integer" />
                <typeAlias alias="Long" type="java.lang.Long" />
                <typeAlias alias="HashMap" type="java.util.HashMap" />
                <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
                <typeAlias alias="ArrayList" type="java.util.ArrayList" />
                <typeAlias alias="LinkedList" type="java.util.LinkedList" />
            </typeAliases>
        </configuration>
    

    多数据源

    properties

    mybatis.config-location=classpath:mybatis/mybatis-config.xml
    
    spring.datasource.one.jdbc-url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    spring.datasource.one.username=root
    spring.datasource.one.password=root
    spring.datasource.one.driver-class-name=com.mysql.cj.jdbc.Driver
    
    spring.datasource.two.jdbc-url=jdbc:mysql://localhost:3306/test2?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    spring.datasource.two.username=root
    spring.datasource.two.password=root
    spring.datasource.two.driver-class-name=com.mysql.cj.jdbc.Driver
    

    UserMapper.xml 文件复制两份到 resources/mybatis/mapper/one 和 resources/mybatis/mapper/two 目录下各一份

    UserMapper 复制到包 com.neo.mapper.one 和 com.neo.mapper.two 路径下,并且分别重命名为:User1Mapper、User2Mapper。

    完整的Configuration配置

    @Configuration
    @MapperScan(basePackages = "com.neo.mapper.one", sqlSessionTemplateRef  = "oneSqlSessionTemplate")
    public class OneDataSourceConfig {
    
        /* -----------------------------------第一个数据源--------------------------------*/
        //@Primary 指定默认数据源
        @Bean(name = "oneDataSource")
        @ConfigurationProperties(prefix = "spring.datasource.one")
        @Primary
        public DataSource testDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        //第一个数据源的SqlSessionFactory
        @Bean(name = "oneSqlSessionFactory")
        @Primary
        public SqlSessionFactory testSqlSessionFactory(@Qualifier("oneDataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/one/*.xml"));
            return bean.getObject();
        }
    
        //将数据源添加到事务中
        @Bean(name = "oneTransactionManager")
        @Primary
        public DataSourceTransactionManager testTransactionManager(@Qualifier("oneDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        //将上面创建的 SqlSessionFactory 注入,创建我们在 Mapper 中需要使用的 SqlSessionTemplate
        @Bean(name = "oneSqlSessionTemplate")
        @Primary
        public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("oneSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    
    
       /* ------------------------------------第二个数据源-------------------------------*/
       
        //和第一个一致,去掉@Primary表示非默认
        @Configuration
        @MapperScan(basePackages = "com.neo.mapper.two", sqlSessionTemplateRef  = "twoSqlSessionTemplate")
        public class DataSource2Config {
    
            @Bean(name = "twoDataSource")
            @ConfigurationProperties(prefix = "spring.datasource.two")
            public DataSource testDataSource() {
                return DataSourceBuilder.create().build();
            }
    
            @Bean(name = "twoSqlSessionFactory")
            public SqlSessionFactory testSqlSessionFactory(@Qualifier("twoDataSource") DataSource dataSource) throws Exception {
                SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
                bean.setDataSource(dataSource);
                bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/two/*.xml"));
                return bean.getObject();
            }
    
            @Bean(name = "twoTransactionManager")
            public DataSourceTransactionManager testTransactionManager(@Qualifier("twoDataSource") DataSource dataSource) {
                return new DataSourceTransactionManager(dataSource);
            }
    
            @Bean(name = "twoSqlSessionTemplate")
            public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("twoSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
                return new SqlSessionTemplate(sqlSessionFactory);
            }
        }
    
    }
    

    多数据源需要去掉启动类上@MapperScan("com.xxx.mapper")

    测试:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class UserMapperTest {
        @Autowired
        private User1Mapper user1Mapper;
        @Autowired
        private User2Mapper user2Mapper;
    
        @Test
        public void testInsert() throws Exception {
            user1Mapper.insert(new User("aa111", "a123456", UserSexEnum.MAN));
            user1Mapper.insert(new User("bb111", "b123456", UserSexEnum.WOMAN));
            user2Mapper.insert(new User("cc222", "b123456", UserSexEnum.MAN));
        }
    }
    

    转自CSDN图文课--作者:纯洁的微笑

    相关文章

      网友评论

          本文标题:SpringBoot之mybatis多数据源

          本文链接:https://www.haomeiwen.com/subject/nwdrjqtx.html