使用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.pswp.cn/web/84716.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84716.shtml
英文地址,请注明出处:http://en.pswp.cn/web/84716.shtml

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

相关文章

【系统分析师】2018年真题:综合知识-答案及详解

【第1题】 面向对象分析中&#xff0c;对象是类的实例。对象的构成成分包含了&#xff08;1&#xff09;&#xff0c;属性和方法&#xff08;或操作&#xff09;。 (1)A.标识 B.消息 C.规则 D.结构 【解析】本题考查的是面向对象的基本概念 对象的三要素为&#xff1a;属性…

从Git历史中删除大文件的完整解决方案

从Git历史中删除大文件的完整解决方案 当你意外提交了一个大文件导致无法推送到远程仓库时&#xff0c;可以按照以下步骤彻底从Git历史中删除这个大文件。 情况分析 首先确认你的问题属于以下哪种情况&#xff1a; 大文件在最近一次提交中&#xff1a;相对容易处理大文件在…

[xiaozhi-esp32] 应用层(9种state) | 音频编解码层 | 双循环架构

第三章&#xff1a;应用层 在第一章&#xff1a;开发板抽象层中&#xff0c;我们实现了硬件交互标准化&#xff1b;在第二章&#xff1a;通信协议层中&#xff0c;我们构建了云端通信桥梁。 现在需要将这些能力有机整合——这便是应用层的使命 应用层的本质 应用层是设备的…

Java 锁升级的过程详解

Java 锁升级的过程详解 Java 虚拟机(JVM)为了提高多线程并发的效率,对内置锁(synchronized 关键字)的实现进行了一系列优化。这些优化体现在锁的升级过程中,即当竞争程度从低到高变化时,锁的状态会从偏向锁逐渐升级为轻量级锁,最终升级为重量级锁。这个过程是不可逆的…

使用vitis tcl脚本构建vitis app工程

一&#xff1a;最近重新学习了zynq系列开发&#xff0c;想着使用tcl创建工程&#xff0c;因此分享一下脚本例子 #!/bin/bashsource /tools/Xilinx/Vitis/2022.2/settings64.sh cd ../../ . ./script/project.sh cd app/script #tcl脚本只能在虚拟机桌面执行 xsct build_vitis…

电脑商城--购物车

加入购物车 1 购物车-创建数据表 1.使用use命令先选中store数据库。 USE store; 2.在store数据库中创建t_cart用户数据表。 CREATE TABLE t_cart (cid INT AUTO_INCREMENT COMMENT 购物车数据id,uid INT NOT NULL COMMENT 用户id,pid INT NOT NULL COMMENT 商品id,price BIG…

2024-2025学年度下期《网页设计》期末模拟测试

一、 单选题 1. HTML文档的根标签是( ) A. <html> B. <head> C. <body> D. <!DOCTYPE> 2. 用于定义段落内容的标签是&#xff1a;( ) A. <div> B. <p> C. <span> D. <br> 3. 网以下哪个属性用于定义CSS内联样式…

搭建加解密网站遇到的问

本机向云服务器传输文件 用winscp 服务器在安装 SSH 服务时自动生成密钥对&#xff08;公钥私钥&#xff09; 为什么要有指纹验证&#xff1f; 防止中间人攻击&#xff08;Man-in-the-Middle&#xff09; 指纹验证打破这个攻击链&#xff1a; 小问题 安装python时 ./confi…

CSS 制作学成在线网页

1 项目结构 1.1 总结 2 网页制作思路 3 header 区域 - 布局 3.1 通栏 3.2 logo 3.3 导航 3.4 搜索区域 3.5 用户区域 4 banner 区域 4.1 左侧侧导航 4.2 右侧课程表 5 精品推荐 6 推荐课程区域 参考链接&#xff1a; 82-准备工作-项目目录与版心_哔哩哔哩_bilibili

图灵完备之路(数电学习三分钟)----门的多路化

上一章中我们学习了如何用与非门实现其他逻辑门&#xff0c;但上节中的输入信号始终为2&#xff0c;但在现实中&#xff0c;输入的信号数量是不确定的&#xff0c;所以我们需要设计多输入的门&#xff1a; 1.三路与非门&#xff08;卡诺图法&#xff09; 我们还是从与非门开始…

【前端】二进制文件流下载(get、post)再谈一次

最近二进制文件流下载可谓是又出幺蛾子&#xff0c;翻阅以前的文章也找不到解决方案&#xff0c;感觉还是没用完全理解&#xff0c;这次再整理一遍。 先说一个通用场景&#xff0c;就是无论get还是post在接口请求的时候设定好 headers: { Content-Type: application/json;cha…

uv功能介绍和完整使用示例总结

以下是关于 UV 工具的完整使用示例总结,结合其核心功能与典型场景,帮助用户快速上手并高效管理 Python 项目: 一、安装与配置 快速安装 macOS/Linux:curl -LsSf https://astral.sh/uv/install.sh | shWindows:powershell -ExecutionPolicy ByPass -c "irm https://as…

MySQL启动报错“mysqld_safe Directory ‘/var/lib/mysql‘ don‘t exists“终极解决方案!从入门到高阶全攻略

在MySQL的使用过程中&#xff0c;启动报错mysqld_safe Directory /var/lib/mysql dont exists是开发者经常遇到的问题。这个错误看似简单&#xff0c;实则可能涉及目录权限、系统配置、文件系统等多个方面。本文将结合官方文档与实际经验&#xff0c;从基础到高级&#xff0c;为…

python 常见数学公式函数使用详解

Python 数学公式与函数大全 Python 提供了丰富的数学计算支持&#xff0c;包括内置函数、标准库&#xff08;math、cmath、numpy&#xff09;和第三方库&#xff08;sympy、scipy&#xff09;。以下是常用数学公式和函数的分类整理&#xff1a; 1. 基本数学运算 1.1 算术运算…

阿里云服务器+宝塔面板发布网站

一、租用服务器 &#xff08;1&#xff09;、进入官网 阿里云-计算&#xff0c;为了无法计算的价值阿里云——阿里巴巴集团旗下公司&#xff0c;是全球领先的云计算及人工智能科技公司之一。提供免费试用、云服务器、云数据库、云安全、云企业应用等云计算服务&#xff0c;以…

langchain框架中各种Agent(LLMSingleAgent ReactAgent Plan-and-Execute Agent)原理方式对比

在LangChain框架中&#xff0c;LLMSingleActionAgent与ReAct Agent及其他Agent类型在内部原理上存在显著差异&#xff0c;主要体现在推理机制、行动策略、动态性等方面。以下结合实例进行详细说明&#xff1a; 1. LLMSingleActionAgent的内部原理 LLMSingleActionAgent是LangC…

AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月22日第116弹

从今天开始&#xff0c;咱们还是暂时基于旧的模型进行预测&#xff0c;好了&#xff0c;废话不多说&#xff0c;按照老办法&#xff0c;重点8-9码定位&#xff0c;配合三胆下1或下2&#xff0c;杀1-2个和尾&#xff0c;再杀4-5个和值&#xff0c;可以做到100-300注左右。 (1)定…

电池模块仿真 - 线性时不变降阶模型

电池模块热设计挑战 针对使用周期设计电池模块存在几个独特的热工程挑战。 使用循环&#xff08;例如驾驶循环&#xff09;涉及可变的负载、速度和环境条件&#xff0c;要求电池在动态压力下提供一致的性能。管理热行为至关重要&#xff0c;因为波动的电流会产生热量&#xf…

408第二季 - 组成原理 - IO方式II

继续中断 中断优先级包括响应优先级和处理优先级 注意下面的&#xff0c;很多都是之前说的 这里的中断向量的地址&#xff0c;就是下面的很粗的箭头 一个很复杂的图 然后记一下很复杂的东西 关中断&#xff0c;保存断点和中断服务程序寻址都是之前讲过的 继续推进&#xff01;…

Spring AOP:横切关注点的优雅解决方案

目录 概要 和面向对象编程的区别 优点 AOP的底层原理 JDK动态代理技术 AOP七大术语 切点表达式 AOP实现方式 Spring对AOP的实现包括以下3种方式&#xff1a; 在本篇文章中&#xff0c;我们主要讲解前两种方式。 基于AspectJ的AOP注解式开发 定义目标类以及目标方法…