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微服务。

  • 相关阅读:
    EasyDSS前端界面在页面缩小时内置列表仍需手动刷新的优化
    【解决方案】家庭保姆犯罪案频出,EasyDSS视频监控平台如何确保家政安全?
    EasyDSS现场录视频流合成后出现视频内容部分丢失的问题排查及解决
    TSINGSEE青犀视频基于流媒体技术EasyDSS搭建酒店IPTV直播/点播平台
    EasyDSS视频直播列表页面横向滚动条和纵向滚动条不能同步的问题优化
    【解决方案】电力巡检进入智能化时代,无人机+EasyDSS开启智能巡检新模式
    EasyDSS新内核版本测试删除录像文件后存在残留问题调整优化
    IT常识
    Java面试题+算法案例
    数据库理论概述
  • 原文地址:https://www.cnblogs.com/rainmer/p/10396918.html
Copyright © 2011-2022 走看看