zoukankan      html  css  js  c++  java
  • Spring Boot MyBatis配置多种数据库

    mybatis-config.xml是支持配置多种数据库的,本文将介绍在Spring Boot中使用配置类来配置。

    1. 配置application.yml

    # mybatis配置
    mybatis:
      check-config-location: false
      type-aliases-package: ${base.package}.model
      configuration:
        map-underscore-to-camel-case: true
        # 二级缓存的总开关
        cache-enabled: false
      mapper-locations: classpath:mapping/*.xml
    

    2. 新增数据源配置类

    /**
     * 数据源配置
     * @author simon
     * @date 2019-02-18
     */
    @Configuration
    public class DataSourceConfig {
        @Value("${mybatis.mapper-locations}")
        private String mapperLocations;
    
        @Primary
        @Bean
        @ConfigurationProperties("spring.datasource.druid")
        public DataSource dataSource(){
            return DruidDataSourceBuilder.create().build();
        }
    
        @Bean
        public JdbcTemplate jdbcTemplate(){
            return new JdbcTemplate(dataSource());
        }
    
        @Bean
        public DatabaseIdProvider databaseIdProvider(){
            DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
            Properties p = new Properties();
            p.setProperty("Oracle", "oracle");
            p.setProperty("MySQL", "mysql");
            p.setProperty("PostgreSQL", "postgresql");
            p.setProperty("DB2", "db2");
            p.setProperty("SQL Server", "sqlserver");
            databaseIdProvider.setProperties(p);
            return databaseIdProvider;
        }
    
        @Bean
        public SqlSessionFactoryBean sqlSessionFactoryBean() throws Exception {
            SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
            factoryBean.setDataSource(dataSource());
            factoryBean.setDatabaseIdProvider(databaseIdProvider());
            factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
            return factoryBean;
        }
    }
    
    

    3. 在mapper.xml中使用

    方法1

      <select id="findAuthorityByUrl" resultType="java.lang.String" databaseId="mysql">
        SELECT
          group_concat( tsma.authority ) as authority
        FROM
            t_side_menu tsm
            LEFT JOIN t_side_menu_authority tsma ON tsm.id = tsma.side_menu_id
      </select>
    
        <select id="findAuthorityByUrl" resultType="java.lang.String" databaseId="postgresql">
            SELECT
            string_agg( tsma.authority, ',') as authority
            FROM
            t_side_menu tsm
            LEFT JOIN t_side_menu_authority tsma ON tsm.id = tsma.side_menu_id
        </select>
    

    方法2

      <select id="selectByPids" parameterType="String" resultMap="SuperResultMap">
        SELECT
            tsm.*,
          <if test="_databaseId == 'mysql'">
              group_concat( tsma.authority ) as authority
          </if>
          <if test="_databaseId == 'postgresql'">
              string_agg( tsma.authority, ',') as authority
          </if>
        FROM
            t_side_menu tsm
            LEFT JOIN t_side_menu_authority tsma ON tsm.id = tsma.side_menu_id
        WHERE pid IN (#{pids})
        GROUP BY
            tsm.id
      </select>
    

    题外话

    如果有兴趣,请给oauthserer项目一个star。oauthserver是一个基于Spring Boot Oauth2的完整的独立的Oauth2 Server微服务。项目的目的是,仅仅需要创建相关数据表,修改数据库的连接信息,你就可以得到一个Oauth2 Server微服务。

  • 相关阅读:
    【模板】O(nlongn)求LIS
    【图论】用线段树写Dijikstra!!
    【图论】最短路总结
    【codeforces841A】Generous Kefa
    【模板】Tarjian求LCA
    【模板】 RMQ求区间最值
    【模板】map入门
    【二分 贪心】覆盖问题 BZOJ1052 HAOI2007
    【dp】10-15题解 snake vs block
    【模拟】10-15 题解 trans
  • 原文地址:https://www.cnblogs.com/rainmer/p/10396918.html
Copyright © 2011-2022 走看看