Spring Boot MyBatis配置多种数据库

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

1. 配置application.yml

# mybatis配置
mybatis:check-config-location: falsetype-aliases-package: ${base.package}.modelconfiguration:map-underscore-to-camel-case: true# 二级缓存的总开关cache-enabled: falsemapper-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();}@Beanpublic JdbcTemplate jdbcTemplate(){return new JdbcTemplate(dataSource());}@Beanpublic 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;}@Beanpublic 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">SELECTgroup_concat( tsma.authority ) as authorityFROMt_side_menu tsmLEFT JOIN t_side_menu_authority tsma ON tsm.id = tsma.side_menu_id</select><select id="findAuthorityByUrl" resultType="java.lang.String" databaseId="postgresql">SELECTstring_agg( tsma.authority, ',') as authorityFROMt_side_menu tsmLEFT JOIN t_side_menu_authority tsma ON tsm.id = tsma.side_menu_id</select>

方法2

  <select id="selectByPids" parameterType="String" resultMap="SuperResultMap">SELECTtsm.*,<if test="_databaseId == 'mysql'">group_concat( tsma.authority ) as authority</if><if test="_databaseId == 'postgresql'">string_agg( tsma.authority, ',') as authority</if>FROMt_side_menu tsmLEFT JOIN t_side_menu_authority tsma ON tsm.id = tsma.side_menu_idWHERE pid IN (#{pids})GROUP BYtsm.id</select>

题外话

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米盒子4 拆解图解_我希望当我开始学习R时会得到的盒子图解指南

小米盒子4 拆解图解Customizing a graph to transform it into a beautiful figure in R isn’t alchemy. Nonetheless, it took me a lot of time (and frustration) to figure out how to make these plots informative and publication-quality. Rather than hoarding this …

组态王仿真随机数

1、新建IO设备&#xff0c;选择PLC---亚控---仿真PLC&#xff0c;一直“下一步”。 2、在“数据词典”中新建变量“Tag1”&#xff0c;双击Tag1&#xff0c;变量类型选&#xff1a;I/O实数&#xff1b;初始值设为&#xff1a;0.6&#xff1b;最小值设为&#xff1a;0.5&#xf…

蓝牙一段一段_不用担心,它在那里存在了一段时间

蓝牙一段一段You’re sitting in a classroom. You look around and see your friends writing something down. It seems they are taking the exam, and they know all the answers (even Johnny who, how to say it… wasn’t the brilliant one). You realize that your ex…

Linux基础命令---ifup、ifdown

ifupifup指令用来启动网络接口设备&#xff0c;设备必须是定义在“/etc/sysconfig/network-scripts/ifcfg-ethX”或者“/etc/sysconfig/network”的文件。这些脚本通常使用一个参数&#xff1a;配置的名称(例如eth0)。在引导序列中&#xff0c;使用“boot”的第二个参数调用它们…

OllyDBG 入门之四--破解常用断点设

OllyDBG 入门之四--破解常用断点&#xff08;转&#xff09; 软件汉化2010-07-08 16:25:23 阅读76评论0 字号&#xff1a;大中小 订阅 bpx hmemcpy 破解万能断点&#xff0c;拦截内存拷贝动作 bpx Lockmytask 当你用其它断点都无效时可以试一下&#xff0c;这个断点拦截…

POJ1204 Word Puzzles

传送门 这题果然是AC自动机的大好题&#xff01; 题目的大意是&#xff0c;给定一个l*c的大网格&#xff0c;每个格子里有一个字符&#xff0c;每个格子可以向八个方向形成字符串&#xff0c;问给定的字符串在哪里能被匹配以及在网格中出现的方向&#xff08;A代表北&#xff0…

普通话测试系统_普通话

普通话测试系统Traduzido/adaptado do original por Vincius Barqueiro a partir do texto original “Writing Alt Text for Data Visualization”, escrito por Amy Cesal e publicado no blog Nightingale.Traduzido / adaptado由 VinciusBarqueiro 提供原始 文本“为数据可…

Mac OS 被XCode搞到无法正常开机怎么办?

Mac OS 被XCode搞到无法正常开机怎么办&#xff1f; 第一天拿到这台air的时候&#xff0c;迫不及待地把从别处搜集来的XCode 3.2.5iOS SDK 4.1的dmg安装了上来&#xff0c;结果系统直接崩溃&#xff0c;再开机就不能正常开机&#xff0c;总是碰到kernel panic。这不坑爹吗…… …

美国队长3:内战_隐藏的宝石:寻找美国最好的秘密线索

美国队长3:内战There are plenty of reasons why one would want to find solitude in the wilderness, from the therapeutic effects of being immersed in nature, to not wanting to contribute to trail degradation and soil erosion on busier trails.人们有很多理由想要…

Java入门第三季——Java中的集合框架(中):MapHashMap

1 package com.imooc.collection;2 3 import java.util.HashSet;4 import java.util.Set;5 6 /**7 * 学生类8 * author Administrator9 * 10 */ 11 public class Student { 12 13 public String id; 14 15 public String name; 16 17 public Set<…

【译】 WebSocket 协议第八章——错误处理(Error Handling)

概述 本文为 WebSocket 协议的第八章&#xff0c;本文翻译的主要内容为 WebSocket 错误处理相关内容。 错误处理&#xff08;协议正文&#xff09; 8.1 处理 UTF-8 数据错误 当终端按照 UTF-8 的格式来解析一个字节流&#xff0c;但是发现这个字节流不是 UTF-8 编码&#xff0c…

升级xcode5.1 iOS 6.0后以前的横屏项目 变为了竖屏

升级xcode5.1 iOS 6.0后以前的横屏项目 变为了竖屏&#xff0c;以下为解决办法&#xff1a; 在AppDelegate 的初始化方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中 将 [window addSubview: viewCon…

动漫数据推荐系统

Simple, TfidfVectorizer and CountVectorizer recommendation system for beginner.简单的TfidfVectorizer和CountVectorizer推荐系统&#xff0c;适用于初学者。 目标 (The Goal) Recommendation system is widely use in many industries to suggest items to customers. F…

Wait Event SQL*Net more data to client

oracle 官方给的说法是 C.3.152 SQL*Net more data to client The server process is sending more data/messages to the client. The previous operation to the client was also a send. Wait Time: The actual time it took for the send to complete 意味着server process…

1.3求根之牛顿迭代法

目录 目录前言&#xff08;一&#xff09;牛顿迭代法的分析1.定义2.条件3.思想4.误差&#xff08;二&#xff09;代码实现1.算法流程图2.源代码&#xff08;三&#xff09;案例演示1.求解&#xff1a;\(f(x)x^3-x-10\)2.求解&#xff1a;\(f(x)x^2-1150\)3.求解&#xff1a;\(f…

libzbar.a armv7

杨航最近在学IOS&#xfeff;&#xfeff; http://download.csdn.net/download/lzwxyz/5546365 我现在用的是这个&#xff1a;http://www.federicocappelli.net/2012/10/05/zbar-library-for-iphone-5-armv7s/ 点它的HERE开始下载 下载的libzbar.a库&#xff0c;如何查看 …

Alex Hanna博士:Google道德AI小组研究员

Alex Hanna博士是社会学家和研究科学家&#xff0c;致力于Google的机器学习公平性和道德AI。 (Dr. Alex Hanna is a sociologist and research scientist working on machine learning fairness and ethical AI at Google.) Before that, she was an Assistant Professor at th…

三位对我影响最深的老师

我感觉&#xff0c;教过我的老师们&#xff0c;不论他们技术的好坏对我都是有些许影响的。但是让人印象最深的好像只有寥寥几位。 第一位就是小学六年级下册教过我的语文老师。他是临时从一个贫困小学调任过来的&#xff0c;不怎么管班级&#xff0c;班里同学都在背地里说他不会…

安全开发 | 如何让Django框架中的CSRF_Token的值每次请求都不一样

前言 用过Django 进行开发的同学都知道&#xff0c;Django框架天然支持对CSRF攻击的防护&#xff0c;因为其内置了一个名为CsrfViewMiddleware的中间件&#xff0c;其基于Cookie方式的防护原理&#xff0c;相比基于session的方式&#xff0c;更适合目前前后端分离的业务场景&am…

UNITY3D 脑袋顶血顶名

&#xfeff;&#xfeff;杨航最近在学Unity3D&#xfeff;&#xfeff; using UnityEngine; using System.Collections; public class NPC : MonoBehaviour { //主摄像机对象 public Camera camera; //NPC名称 private string name "我是doud…