首页 > 数据库 >MyBatis支持多种数据库连接(多种sql语法支持)

MyBatis支持多种数据库连接(多种sql语法支持)

时间:2023-02-24 11:03:39浏览次数:37  
标签:多种 databaseId 数据库 mybatis setProperty sql MyBatis import properties

1、说明

这里说的多种数据库连接,是指同时支持多种Sql语法,可做到不同类型数据库使用同一套后台代码而不用改动,不是多数据源。

这里有一种简单的方式可以实现,就是使用MyBatis的databaseId来实现不同数据库之间的切换。本例以SpringBoot来实现。

2、添加配置文件

新增一个配置类,把databaseIdProvider注册到Spring容器

import java.util.Properties;

import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* Mybatis同时支持多种数据库配置(切换数据库需重启服务才能生效)
*
*/
@Configuration
public class DatabaseConfig {

/**
* 自动识别使用的数据库类型
*
* properties的key与数据库类型对应,为固定写法;
* properties的value与*mapper.xml中的databaseId的值对应,可以自定义;
* 如果*mapper.xml中没有databaseId选择则说明该sql适用所有数据库。
*/
@Bean
public DatabaseIdProvider getDatabaseIdProvider() {
Properties properties = new Properties();
properties.setProperty("Oracle","oracle");
properties.setProperty("MySQL","mysql");
properties.setProperty("DB2","db2");
properties.setProperty("Derby","derby");
properties.setProperty("H2","h2");
properties.setProperty("HSQL","hsql");
properties.setProperty("Informix","informix");
properties.setProperty("MS-SQL","ms-sql");
properties.setProperty("PostgreSQL","postgresql");
properties.setProperty("Sybase","sybase");
properties.setProperty("Hana","hana");

DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
databaseIdProvider.setProperties(properties);

return databaseIdProvider;
}
}

3、指定数据库类型(非必须)

这一步是非必须的,MyBatis会根据配置的数据源来自动判断数据库类型,从而选择使用哪个sql语句

# ----------------MyBatis配置---------------
#mybatis.configuration.database-id=postgresql
## mybatis映射文件位置
mybatis.mapper-locations=classpath:mybatis/mapping/*/*/*.xml
## mybatis自动映射实体类别名,多个包以","分割即可,如果过长需要以"\"结尾,就可以换行写了(切记"\"后面不能跟任何字符,包括空格)
mybatis.type-aliases-package=com.qfx.modules.system.entity,com.qfx.modules.system.vo,\

4、使用

在*mapper.xml中添加databaseId,通过databaseId的值来判断执行哪条语句,例如:

<!-- 如果不指定databaseId,则默认支持所有指定类型数据库,不管当前是什么数据库都会走这个方法 -->
<select id="sayHello" resultType="java.util.Map">
select '我来自mysql库' as info
</select>

<!-- 如果指定databaseId,则表示此方法仅被指定的库可以使用,比如这里就仅适用于postgresql -->
<select id="sayHello" resultType="java.util.Map" databaseId="postgresql">
select '我来自postgresql库' as info
</select>

<!-- 如果指定databaseId,则表示此方法仅被指定的库可以使用,比如这里就仅适用于oracle -->
<select id="sayHello" resultType="java.util.Map" databaseId="oracle">
select '我来自postgresql库' as info
</select>

5、测试

5.1 MySql数据库

走默认的方法(没有指定databaseId)

MyBatis支持多种数据库连接(多种sql语法支持)_MyBatis


MyBatis支持多种数据库连接(多种sql语法支持)_MyBatis_02

5.2 PostgrseSql数据库

自动匹配了databaseId="postgresql"的方法

MyBatis支持多种数据库连接(多种sql语法支持)_MyBatis_03

MyBatis支持多种数据库连接(多种sql语法支持)_MyBatis_04

标签:多种,databaseId,数据库,mybatis,setProperty,sql,MyBatis,import,properties
From: https://blog.51cto.com/abcd/6078632

相关文章

  • 使用Alpine Linux做基础镜像备份mysql8.0+数据库
    说明本篇文章仅是基于k8scronjob备份mysql8.0+数据库,使用AlpineLinux作为基础镜像时遇到的问题做下简单的排坑,没有涉及到具体的部署细节,后面有时间再补上。镜像打包#......
  • mybatis-属性名和查询字段名不相同的解决方案
    1.使用别名resultType可以将查询结果直接映射为实体bean对象的条件是,sql查询的字段名和实体bean的属性名一致,通过反射机制完成对象的创建。selecttidid,tnamename。......
  • 云原生|kubernetes|部署MySQL一主多从复制集群(基于GTID的复制)
    前言:一,MySQL的主从复制优点如下:数据更安全:做了数据冗余,不会因为单台服务器的宕机而丢失数据性能大大提升:一主多从,不同用户从不同数据库读取,性能提升扩展性更优:流量增大时,可......
  • Oracle数据库基本操作(和MySQL的类比操作)全局查询篇
                             Oracle数据库基本操作(和MySQL的类比操作)全局查询篇Oracle数据库和MySQL数据库同属关系型数......
  • ubuntu安装mysql并设置忽略大小写
    更新apt包管理sudoapt-getupdate安装mysql-serversudoapt-getinstallmysql-serverc正常情况下安装完后mysql已启动,查看mysql状态systemctlstatusmysql.se......
  • mysql 的 json 类型
    创建表DROPTABLEIFEXISTS`student`;CREATETABLE`student`(`id`int(0)NOTNULLAUTO_INCREMENTCOMMENT'表的id',`name`varchar(255)CHARACTERSETut......
  • 急速安装mysql8 in windows
    安装准备下载地址:https://dev.mysql.com/downloads/mysql/解压不赘述添加环境变量不赘述初始化安装根目录配置增加my.ini文件下面配置A=安装跟目录一般只有:b......
  • MySQL增删查改
    创建数据库createdatabase数据库名;查看数据库showdatabases;切换数据库use数据库名;创建表createtable表名(字段名  类型,字段名  类型,......);插......
  • MySQL调优
    #MySQL调优##数据库优化常见方案1.优化shema,sql语句+索引2.加缓存,memcached,redis3.主从复制,读写分离4.垂直拆分5.水平拆分为了知道怎么优化SQL,必须先清楚SQL......
  • mac 终端对mysql开启或者关闭mysql服务
    这里可以对mysql服务进行人为启动或者暂停,也可以在终端对mysql开启或者关闭mysql服务://启动:sudo/usr/local/mysql/support-files/mysql.serverstart//关闭sudo/u......