当前位置: 首页 > news >正文

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

相关文章:

  • 简单基于spring的redis配置(单机和集群模式)
  • 关于字符编码你应该知道的事情
  • 微信小程序--------语音识别(前端自己也能玩)
  • IoC组件Unity再续~根据类型字符串动态生产对象
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • 什么是API网关 如何设计亿万级统一网关
  • React的组件模式
  • passportjs 源码分析
  • Google Play 下架 App 之后的替身制作
  • 安卓应用性能调试和优化经验分享
  • Redis 懒删除(lazy free)简史
  • vue全家桶+Koa2开发笔记(8)--开发网页
  • Mycat - 实现数据库的读写分离与高可用
  • 理解 JavaScript 中的 this
  • 块级、内联、内联块级
  • angular2 简述
  • Intervention/image 图片处理扩展包的安装和使用
  • IP路由与转发
  • Java反射-动态类加载和重新加载
  • Linux各目录及每个目录的详细介绍
  • Linux中的硬链接与软链接
  • PaddlePaddle-GitHub的正确打开姿势
  • rc-form之最单纯情况
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 网页视频流m3u8/ts视频下载
  • 一个JAVA程序员成长之路分享
  • 大数据全解:定义、价值及挑战
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • $.ajax()
  • (BFS)hdoj2377-Bus Pass
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (六)Hibernate的二级缓存
  • (六)激光线扫描-三维重建
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net 获取url的方法
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • [20150904]exp slow.txt
  • [20171102]视图v$session中process字段含义
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [ACM] hdu 1201 18岁生日
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [exgcd] Jzoj P1158 荒岛野人
  • [Linux] CE知识随笔含Ansible、防火墙、VIM、其他服务
  • [Linux] day07——查看及过滤文本
  • [NAND Flash 7.1] 闪存系统性能优化方向集锦?AC timing? Cache? 多路并发?
  • [Oh My C++ Diary]return 1和return 0的区别
  • [poj] 3974 Palindrome
  • [Python]Django类视图