ORCLE与MySQL的相互转化

news/2024/10/12 12:15:24

1.情景展示

在实际开发中,不同的地方可能所需使用的数据库是不同的。

这就要求,我们开发的程序需要兼容不同的数据库,放到程序里面就是:

需要有不同类型的sqlMap文件。
以既要兼容MySQL,也要兼容Oracle进行举例说明。

2.准备工作

第一步

根据已经写好的一套sql进行复制,然后,在原有sql的基础上修改成对应数据库所支持的SQL。

第二步

修改mapper.xml的扫描路径

以及分页插件的数据库类型

第三步

修改数据库连接配置

MYSQL

spring:datasource:url: jdbc:mysql://192.168.0.1:3306/test?useUnicode=true&characterEncoding=utf8username: 123password: 123driverClassName: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 200

ORACLE

spring:datasource:url: jdbc:oracle:thin:@192.168.1.1:1521:orclusername: TESTpassword: TESTdriverClassName: oracle.jdbc.driver.OracleDriverhikari:maximum-pool-size: 200

3.具体转换

字符串拼接

MYSQL使用concat()

<if test="code != null and code != ''">and code like CONCAT('%',#{code},'%')
</if>

ORACLE使用管道符||

<if test="code != null and code != ''">and code like '%' || #{code} || '%'
</if>

虽然ORACLE也可以使用CONCAT()连接字符串,但是,它只能将两个字符串拼接到一起。

如果需要拼接2个以上的字符串,只能嵌套N次,形如:

CONCAT(CONCAT('%',#{code}),'%')

字符串转日期

 

日期转字符串

mysql使用DATE_FORMAT()

<if test="endTime != null">,DATE_FORMAT(#{endTime},'%Y-%m-%d 23:59:59') as endTime
</if>
DATE_FORMAT(base_eva_detail.create_time,'%Y-%m-%d %H:%i:%s') as create_time,

在mysql中,%c表示月份,个位数月份前面不会自动补零;

而%m表示月份,个位数月份前面将会自动补零。

ORACLE使用TO_CHAR()

<if test="endTime != null">,TO_CHAR(#{endTime},'YYYY-MM-DD 23:59:59') as endTime
</if>
TO_CHAR(base_eva_detail.create_time, 'YYYY-MM-DD HH24:MI:SS') as create_time,

系统时间

mysql使用now()

date_format(now(),'%Y-%c-%d')

oracle使用SYSDATE

TO_CHAR(SYSDATE, 'YYYY-MM-DD')

IF()函数

MYSQL

<if test="orgId != null and orgId != ''">and if(boi.ORGSEQ is not null, boi.ORGSEQ like CONCAT('%',#{orgId},'.%'), boi.ORGID = #{orgId})
</if>

ORALCE

ORALCE没有IF函数

<if test="orgId != null and orgId != ''">AND ((boi.ORGSEQ IS NOT NULL AND boi.ORGSEQ LIKE '%' || #{orgId} || '%'ORboi.ORGID = #{orgId}))
</if>

ifnull()/NVL() 

mysql使用ifnull()

ifnull(sum(base_eva_question_detail.eva_value),0) as allScore,
ifnull(trim(at.city_name), '') as city_name,

ORALCE使用NVL()

NVL(sum(base_eva_question_detail.eva_value),0) as allScore,
NVL(trim(at.city_name),'') as city_name,

将多行数据合并成一行

 mysql使用group_concat()

<foreach collection="headers" item="item" index="index"><if test="item.evaQuestionType == 1">,GROUP_CONCAT( CASE eva_question_num WHEN '${item.evaQuestionNum}' THEN base_eva_question_detail.eva_answer END ) '${item.dataKey}'</if><if test="item.evaQuestionType == 6 || item.evaQuestionType == 5">,GROUP_CONCAT( CASE eva_question_num WHEN '${item.evaQuestionNum}' THEN base_eva_question_detail.eva_answer  END )'${item.dataKey}'</if>
</foreach>

ORACLE使用LISTAGG()

<foreach collection="headers" item="item" index="index"><if test="item.evaQuestionType == 1">,LISTAGG(CASE eva_question_num WHEN '${item.evaQuestionNum}' THEN base_eva_question_detail.eva_answer END) '${item.dataKey}'</if><if test="item.evaQuestionType == 6 || item.evaQuestionType == 5">,LISTAGG(CASE eva_question_num WHEN '${item.evaQuestionNum}' THEN base_eva_question_detail.eva_answer END)'${item.dataKey}'</if>
</foreach>

分页查询

mysql使用limit

SELECT*
FROMsso_access_token
WHERE`status` = 1AND user_id = #{userId}AND user_name = #{userName}
ORDER BYcreate_time DESC
LIMIT 0,1

oracle使用ROWNUM

<![CDATA[SELECT *FROM (SELECT *FROM sso_access_tokenWHERE status = 1AND user_id = #{userId}AND user_name = #{userName}ORDER BY create_time DESC)WHERE ROWNUM <= 1
]]>

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

  • 个人主页
  • mybatis增删改查

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/70611.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【解决方案】Sublime Text 4 按下 Esc 键后无法输入任何内容

在最后编辑博客内容时,我的 Sublime 版本为 4180。我基本用 Sublime Text 4 替代了系统自带的 Notepad,我用它编辑任何东西(除了代码,手动狗头)。 开始我怀疑是 Package Control 安装了过多依赖导致的兼容性问题,但由于 Sublime 多次更新,我的 Package Control 再次从命…

dirxk轻量目录扫描器

公司找个一个外包团队给客户写了一套系统,存在一些敏感信息泄露漏洞,这些漏洞不定期被主管部门检测到,从而需要进行整改操作 项目经理求助于公司内部的安全团队,希望能够检测系统还存在哪些敏感信息泄露漏洞,至此形成了本文中的一个主因 在实际的检测过程中,发现御剑、DI…

推荐一款支持Vue3的管理系统模版:Vue-Vben-Admin

近年来,随着前端技术的飞速发展,各类后台管理系统框架层出不穷。Vue 作为热门的前端框架,也有许多优秀的后台模板涌现。而 Vue-Vben-Admin,凭借其高效、灵活的架构设计和完善的功能体系,成为了许多前端开发者的不二选择。其Github Star达到了24K之多,可见其受欢迎程度。本…

Vmware中linux图形化界面安装《 VMware Tools》

VMWare 回收空间(方法一) 1.安装VMware Tools# 创建文件拷贝目录 mkdir /usr/temp # 创建挂在目录 mkdir /mnt/cdrom # 挂镜像文件 mount /dev/cdrom /mnt/cdrom # 复制安装文件 cp /mnt/cdrom/VMwareTools-10.3.25-20206839.tar.gz /usr/temp # 解压文件 cd /usr/temp &…

三、Spring Boot集成Spring Security之securityFilterChain过滤器链详解

二、默认过滤器链 1、默认配置系统启动日志2、默认配置的过滤器及顺序如下org.springframework.security.web.session.DisableEncodeUrlFilter org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter org.springframework.security.web.co…

winform图片截取

核查软件 项目简介:主要分为这几个模块:图片列表、图片旋转、图片裁剪、图片替换、案卷导入、文件导入、检查页数、检查页号、案卷和文件的增删改查、图片核查、后台数据管控、随机参沙、修改统计、日志记录。如需源码使用,请联系:lilf0117 以下是效果图展示:1.图片列表 左…

Odoo18.0 顺丰快递

适用于:15.0 16.0 17.0 18.0,不同版本功能有所不同, 详询客服。顺丰速运作为国内快递业的标杆企业,使用的频率可谓非常之高。对odoo国内生态而言,怎么能少了如此重要的一个对接方案呢。本文将展示如何使用顺丰速递模块来完成国内快递业务的对接。 先决条件 需要安装以下pyt…

Docker和K8S集群调用GPU

参考: 安装Docker插件 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html Unbntu使用Docker调用GPU https://blog.csdn.net/dw14132124/article/details/140534628 https://www.cnblogs.com/li508q/p/18444582环境查看 系统环境#…