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

Mybatis-Plus支持多种数据库

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

有2种实现方式:

  • databaseId方式
  • Mapper Location方式

指定databaseId方式

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

Mapper.xml设置

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

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

   <!--这个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有多种方式:

  • 直接配置

    mybatis-plus:configuration:database-id: mysql
    
  • 自动侦测

    通过DatabaseIdProvider获取DatabaseProductName

        @Beanpublic 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里放置多个数据库的目录,然后不同目录放置不同的方言语句。

image-20241031150131813

2、指定Mapper.xml文件

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

http://www.lqws.cn/news/475849.html

相关文章:

  • 【机器学习四大核心任务类型详解】分类、回归、聚类、降维智能决策指南
  • 多项目预算如何集中管控与动态调整
  • 将Linux装进口袋: Ubuntu to Go 制作
  • 【Linux】进程间多种通信方式对比
  • Typescript基础
  • 【后端】负载均衡
  • MiniMax-M1 开源,Kimi 深度研究内测,GPT-5 今夏发布,Gemini 2.5 稳定上线!| AI Weekly 6.16-22
  • 大模型MetaGPT面试题汇总及参考答案
  • Python-break、continue与else语句
  • OJ搭建:Judge0服务器、DeepSeek服务接入简介
  • 70、爬楼梯
  • 相机camera开发之差异对比核查四:测试机和对比机的Camera动态参数差异对比及关键字
  • 笨方法学python-习题1
  • 设计模式精讲 Day 10:外观模式(Facade Pattern)
  • 无锡哲讯科技:助力纺织业搭乘 SAP 数字化快车
  • [xiaozhi-esp32] 应用层(9种state) | 音频编解码层 | 双循环架构
  • OpenGL ES 中的材质
  • 《高等数学》(同济大学·第7版)第五章 定积分 第二节微积分基本公式
  • ASP.NET Core API文档与测试实战指南
  • 创建 Vue 3.0 项目的两种方法对比:npm init vue@latest vs npm init vite@latest
  • Perplexity AI:对话式搜索引擎的革新者与未来认知操作系统
  • 腾讯AI音乐黑科技,LeVo引领音色与创作新风潮
  • 计算机组成原理复习笔记
  • 汽车毫米波雷达增强感知:基于相干扩展和高级 IAA 的超分辨率距离和角度估计.
  • flink如何支持kafka容灾自动切换
  • 一次性理解Java垃圾回收--简单直接方便面试时使用
  • 半导体二极管
  • C# Quartz.net 定时任务
  • c# .netCreateLinkedTokenSource链接令牌,取消信号异步执行
  • 二、海思网卡数据流程