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个文件差异。

相关推荐
敲个大西瓜3 天前
mybatis拦截器插件实现数据库字段加解密
mybatis
武子康3 天前
Java-28 深入浅出 Spring 实现简易Ioc-04 在上节的业务下手动实现AOP
java·后端·mybatis
一条泥憨鱼3 天前
苍穹外卖【day6|微信登录与商品浏览功能】
后端·mybatis·苍穹外卖
vx-Biye_Design3 天前
springboot安阳地区研学旅游服务小程序-计算机毕业设计源码12785
java·vue.js·windows·spring boot·tomcat·maven·mybatis
摇滚侠3 天前
MyBatis+Spring+SpringMVC SSM 整合 179-185
java·spring·mybatis
摇滚侠3 天前
MyBatis+Spring+SpringMVC SSM ContextLoaderListener 177-178
java·spring·mybatis
Spring小子4 天前
【Spring Boot + Vue + DeepSeek】从零打造一个AI驱动的智能健康分析系统
java·spring boot·mybatis
武子康4 天前
Java-27 深入浅出 Spring - 实现简易Ioc-03 在上节的业务下手动实现IoC 从 XML 配置到 BeanFactory 反射注入
java·后端·mybatis
柏舟飞流4 天前
Spring Boot 进阶实战:整合 MyBatis、Redis、JWT,搭一个更像真实项目的后端服务
spring boot·redis·mybatis