SpringBoot 2.0 + Mybatis + Mybatis Generator + IDEA 制作多数据源

SpringBoot 2.0 + Mybatis + Mybatis Generator + 多数据源 + IDEA

吐槽

昨天网上找了个“完整”版的使用 SpringBoot 2.0 + Mybatis 实现多数据源,结果其实是缺少部分代码的,被害得很惨,浪费了太多时间,找了N多教程后最终集成成功,赶紧文章整理出来。

开发环境、技术栈

使用IDEA,集成了下面的功能点:SpringBoot 2.0 + Mybatis + Mybatis Generator + XML
以XML的形式和数据库交互,而不是使用注解的方式,项目之后遇到复杂的SQL语句还是XML形式方便

项目制作步骤

  1. 使用 IDEA 创建 SpringBoot 2.0 项目的过程略过
  2. pom.xml 的全部代码:

    
    
        4.0.0
        
            org.springframework.boot
            spring-boot-starter-parent
            2.1.8.RELEASE
             
        
        com.xdf
        multd
        0.0.1-SNAPSHOT
        multd
        Demo project for Spring Boot
    
        
            1.8
        
    
        
            
                org.springframework.boot
                spring-boot-starter-data-jdbc
            
            
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.mybatis.spring.boot
                mybatis-spring-boot-starter
                2.1.0
            
    
            
                org.springframework.boot
                spring-boot-devtools
                runtime
                true
            
            
                mysql
                mysql-connector-java
                runtime
            
            
                org.springframework.boot
                spring-boot-configuration-processor
                true
            
            
                org.projectlombok
                lombok
                true
            
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
        
    
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                
    
                
                    org.mybatis.generator
                    mybatis-generator-maven-plugin
                    
                        true
                        true
                    
                
    
    
            
        
    
    
    
  3. 解释项目结构

    本来想在图片中标注每个包、文件的作用,看看太多了,还是文字表达吧。controller 存放控制器类,com.xdf.multd.dao.test1 和 com.xdf.multd.dao.test2 分别存放两个数据库对应的 dao 类,com.xdf.multd.datasource 存放两个数据库对应的数据库连接,将两个数据库表对应的ORM类的都存放在包com.xdf.multd.model 中,com.xdf.multd.service 自然是服务层了。

    下面讲解 resources 目录下的文件:

    mapper 是 Mybatis Generator 生成的 mapper 文件存放的位置,生成后要对应的拷贝到 mappers.test1 或者 mappers.test2 中,下面的3个文件 application.yml、application-dev.yml、application-mult.yml 是多环境配置,generatorConfig.xml 是 Mybatis Generator 的相关参数,mybatis-config.xml 是映射ORM时数据类型的对应关系,最后一个 mysql-connector-java-5.1.34.jar 是 Mybatis Generator 链接数据库时要用到的驱动。

  4. application.yml 的全部代码:

    spring:
      profiles:
        active: mult

    application-mult.yml 的全部代码:

    server:
      port: 8083
    
    # mybatis generator 的配置
    mybatis:
      config-location: classpath:mybatis-config.xml
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.xdf.multd.model
    
    
    spring:
      datasource:
        test1:
          driver-class-name: com.mysql.cj.jdbc.Driver
          jdbc-url: jdbc:mysql://localhost:3306/femis?userUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
          username: root
          password: chanchaw
        test2:
          driver-class-name: com.mysql.cj.jdbc.Driver
          jdbc-url: jdbc:mysql://localhost:3306/femisimg?userUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
          username: root
          password: chanchaw
  5. mybatis-config.xml 的全部代码:

    
    
    
        
            
            
            
            
            
            
            
            
            
            
            
            
        
        
            
            
            
            
            
            
        
    
    

    generatorConfig.xml 的全部代码:

    
    
    
    
    
        
        
        
    
        
        
    
            
            
    
            
            
    
            
            
            
    
            
            
    
            
            
            
            
    
            
            
                
                 
            
    
            
            
                            
                            
            
    
            
            
                
                
            
    
            
            
                
                
                
                
            
    
            
            
                
            
    
            
            
                
            
    
            
            
            
  6. 为两个数据库创建对应的数据源,两个文件都放在 com.xdf.multd.datasource 下,其中 DataSource1Config 对的全部代码如下:

    package com.xdf.multd.datasource;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.jdbc.DataSourceBuilder;
    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 org.springframework.core.io.support.ResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import javax.sql.DataSource;
    
    @Configuration
    @MapperScan(basePackages = "com.xdf.multd.dao.test1", sqlSessionTemplateRef  = "test1SqlSessionTemplate")
    public class DataSource1Config {
    
        @Bean(name = "test1DataSource")
        @ConfigurationProperties(prefix = "spring.datasource.test1")
        @Primary
        public DataSource testDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "test1SqlSessionFactory")
        @Primary
        public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            //添加XML目录
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            try {
                bean.setMapperLocations(resolver.getResources("classpath*:mappers/test1/*.xml"));
                return bean.getObject();
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
    
        }
    
        @Bean(name = "test1TransactionManager")
        @Primary
        public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "test1SqlSessionTemplate")
        @Primary
        public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    
    }
    

    DataSource2Config 的全部代码如下:

    package com.xdf.multd.datasource;
    
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.boot.jdbc.DataSourceBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    
    import javax.sql.DataSource;
    
    @Configuration
    @MapperScan(basePackages = "com.xdf.multd.dao.test2", sqlSessionTemplateRef  = "test2SqlSessionTemplate")
    public class DataSource2Config {
    
        @Bean(name = "test2DataSource")
        @ConfigurationProperties(prefix = "spring.datasource.test2")
        public DataSource testDataSource() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean(name = "test2SqlSessionFactory")
        public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(dataSource);
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            try {
                bean.setMapperLocations(resolver.getResources("classpath*:mappers/test2/*.xml"));
                return bean.getObject();
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    
        @Bean(name = "test2TransactionManager")
        public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    
        @Bean(name = "test2SqlSessionTemplate")
        public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
            return new SqlSessionTemplate(sqlSessionFactory);
        }
    
    }
    
  7. 剩下的工作就是使用 Mybatis Generator 生成 ORM 类并且拷贝到对应的目录下,自己手动制作服务类和控制器用来测试

你可能感兴趣的:(java,springboot,多数据源,idea)