Mybatis-Plus支持多种数据库

使用Mybatis-Plus进行数据库的访问,但是由于不同的数据库有不同的方言,所以需要进行适配。

有2种实现方式:

  • databaseId方式
  • Mapper Location方式

指定databaseId方式

通过databaseId指定所使用的数据库,选择同步的SQL。

Mapper.xml设置

默认*Mapper.xml文件的路径在 resources/mapper/

默认*Mapper.xml文件的路径在 resources/mapper/

xml 复制代码
   <!--这个SQL 只会在数据库是mysql的情况下使用  -->
	<select id="listAll" resultType="com.sinopec.exploit.model.T1Entity" databaseId="mysql">
        SELECT *
        FROM t2

    </select>
  <!--这个SQL 只会在数据库是pgsql的情况下使用  -->
    <select id="listAll" resultType="com.sinopec.exploit.model.T1Entity" databaseId="pgsql">
        SELECT *
        FROM t3

    </select>

  <!--这个SQL 只会在数据库是人大金仓 的情况下使用  -->
    <select id="listAll" resultType="com.sinopec.exploit.model.T1Entity" databaseId="kes">
        SELECT *
        FROM t3

    </select>

	<!--这个SQL 只会在数据库不是mysql、pgsql、人大金仓的情况下使用  -->
    <select id="listAll" resultType="com.sinopec.exploit.model.T1Entity" >
        SELECT *
        FROM t4

    </select>


	<!--这个SQL 表示  selectOne  方法,在任何数据库中的实现是一致的。 -->
    <select id="selectOne" resultType="com.sinopec.exploit.model.T1Entity" >
        SELECT *
        FROM t5

    </select>

databaseId 用于指定SQL适用于哪个数据库,如果没有设置,则表示适用于所有数据库。Mybatis在选择SQL时,先根据yaml中配置的 databaseId值与*Mapper.xml中SQL的databaseId匹配,如果匹配则选择,如果不匹配,则选择没有设置databaseId的SQL,如果仍然未匹配上,则报错。

在代码中可以引用变量 _databaseId 表示databaseId。

指定databaseId

指定databaseId有多种方式:

  • 直接配置

    yaml 复制代码
    mybatis-plus:
      configuration:
        database-id: mysql
  • 自动侦测

    通过DatabaseIdProvider获取DatabaseProductName

    java 复制代码
        @Bean
        public DatabaseIdProvider databaseIdProvider() {
            VendorDatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
            Properties properties = new Properties();
            properties.put("Oracle","oracle");
            properties.put("MySQL","mysql");
            properties.put("PostgreSQL","pgsql");
            databaseIdProvider.setProperties(properties);
            return databaseIdProvider;
        }

OiO产品采用yaml配置方式。

databaseId值设置

  • Mysql:mysql
  • Oracle:oracle
  • postgresql:pgsql
  • 人大金仓:kes
  • 达梦:dm

当前OiO产品实现了mysql、postgresql、人大金仓的兼容。

后续可能会扩展到达梦数据库,待定。

Mapper Location方式

1、在resources里放置多个数据库的目录,然后不同目录放置不同的方言语句。

2、指定Mapper.xml文件

yaml 复制代码
mybatis-plus:
  # MyBatis Mapper所对应的XML文件位置
  mapper-locations: classpath:/mapper/mysql/*Mapper.xml

确定方案

Mapper Location方式虽然逻辑清晰的区分多种数据库,但是再扩展多一种方式的时候,不能快速确定哪些SQL 是不一致的。

因此选择databaseId 方式。

以前部分服务采用了Mapper Location方式,因此需要调整为databaseId 方式。

IDEA怎么比较2个文件

1、选择一个要比较的文件

2、按住CTRL,选择另外一个文件。

3、点击右键,选择Compare Files 命令,比较2个文件差异。

相关推荐
计算机学姐2 天前
基于微信小程序的垃圾分类管理系统【2026最新】
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
哲此一生9842 天前
SpringBoot3集成Mybatis(开启第一个集成Mybatis的后端接口)
java·spring boot·mybatis
九转苍翎2 天前
Java外功精要(3)——Spring配置文件和mybatis
spring boot·mybatis
程序员三明治2 天前
【Mybatis从入门到入土】ResultMap映射、多表查询与缓存机制全解析
java·sql·缓存·mybatis·resultmap·缓存机制·多表查询
此剑之势丶愈斩愈烈2 天前
mybatis-plus分页插件使用
mybatis
!if3 天前
springboot mybatisplus 配置SQL日志,但是没有日志输出
spring boot·sql·mybatis
讓丄帝愛伱3 天前
Mybatis Log Free插件使用
java·开发语言·mybatis
gaoshan123456789103 天前
‌MyBatis-Plus 的 LambdaQueryWrapper 可以实现 OR 条件查询‌
java·tomcat·mybatis
The best are water3 天前
jeesite mybatis添加拦截器,推送指定表的变更数据到其他数据库
数据库·mybatis
lunz_fly19923 天前
【源码解读之 Mybatis】【核心篇】-- 第6篇:StatementHandler语句处理器
mybatis