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

mysql改造oracle,以及项目改造

mysql改造oracle,以及springboot项目改造

oracle改造说明

  • 这次的任务是springboot mysql版本改造为oracle版本,mysql5.7,oracle11.2,springboot2.0.2(springboot版本无所谓,都差不多,自己记录经验)
  • mysql与oracle区别较大,需多mysql方便的函数或者功能,oracle都没有,可能是因为11.2这个版本确实很老了
  • mybatis的插件为tkmybatis,mybatis-plus同理
  • 因为用的tkmybatis,网上资料很少,只能硬啃

oracle库表处理

  • 改造第一步当然是把初步把mysql的数据转移到oracle中,网上找了一堆方法,最靠谱的果然还是navicat直接数据转移到oracle中(具体oracle部署安装以及允许外网连接账号用户数据库使用表空间这里不一一细说,属于基础,百度研究一下很快就能上手,这个很快也花了半天),把数据导过去后其实还缺失了很多东西,比如主键自增啊,表字段默认值啊,都是要一一处理的。而且oracle数据库是默认忽略大小写,全部使用大写,在navicat转移的过程中勾选转移大写选项,然后就等着转移完成就行。
  • 转移完毕后,给每个表增加触发器 当主键传上来为null时 按顺序递增填充id,因为有些表存在一些值所以有些不能从1开始,每个表都有自己的逻辑与触发器。
  • 自增结束后,还要去mysql一个个字段查看默认值,然后把oracle同样一个个加进去。
  • 还有两个自定义函数, ORACLE_TO_UNIX与substring_index,分别是UNIX_TIMESTAMP与substring_index
  • 这些全部加进去后,oracle库表改造就完成了。

springboot 对oracle的一些配置改造

  • 配置文件中修改
#orcl是服务名,具体在查oracle服务的名称
spring.datasource.url=jdbc:oracle:thin://127.0.0.1:1521/ORCL
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
#心跳查询,mysql没有form dual
spring.datasource.druid.validation-query=select 1 FROM DUAL
#handler存放的地方,非常关键
mybatis.type-handlers-package=com.deskmedia.core
#没有指定jdbctype时默认为null,非常关键
mybatis.configuration.jdbc-type-for-null=NULL
#tkmybatis的设置
mapper.identity=oracle
#查询触发器返回值,在插入前查询,非常关键
mapper.before=true
#pagehelper对oracle的配置
pagehelper.helperDialect=oracle
#指定mybatis主键自增为false,非常关键
mybatis.configuration.use-generated-keys=false
  • entity中修改
//配置返回主键自增id,每个都要加,因为每个的generator都不一样,有些主键也不一样,工作量比较大
@Id
@Column(name = "PKID")
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "select TAPCONFIG_PKID_SEQ.NEXTVAL from dual"
)
protected Long pkid;//oracle中没有boolean,所以需要处理器,先进行处理
@Column(name = "IsSuccessCompression")
@ColumnType(typeHandler= CustomBooleanTypeHandler.class)
private Boolean isSuccessCompression;//因为有些mysql字段为Integer,到了oracle变long,有些都要做转换处理
public void setAuditUserId(Integer auditUserId) {this.auditUserId = (auditUserId!=null?Long.valueOf(auditUserId.toString()):null);
}以上这些 基本上每个entity都得改造
  • handler处理器
mysql大字段比如text,longtext之类的,会转为clob,nclob,blob等Oracle对应的大字段,但是这些大字段不能直接被mybtais对应java使用,需要做转换与处理,因此使用处理器先行处理CustomBlobTypeHandler.class,CustomNclobTypeHandler.class,CustomBooleanTypeHandler.class
  • mapper.xml
先把idea中mapper.xml格式检测切换为oracle格式检测
limit 换 ROWNUM 但是ROWNUM 是跟在where后面的 所有如果存在orderby的话 直接改会造成结果不一致,需要子查询先改
mysql的groupby与Oracle的groupby不一样,同样需要子查询,
GROUP_CONCAT换成wm_concat,然后mysql日期处理改造oracle变date_format()转换为to_date(),一些转字符串的用to_char,
if换nvl2,ifnull换nvl,concat用法也与oracle不一样,比如like CONCAT(CONCAT('%',#{query.orgName}),'%'),别名不能使用单引号
  • 一些别的配置
idea很好用的插件,mybatis-log-free,会根据mybtais的日志自动填充具体参数,方便查问题
通用mapper改为oracleMapper
public interface BaseMapper<T> extends Mapper<T>, OracleMapper<T> 

相关文章:

mysql改造oracle,以及项目改造

mysql改造oracle&#xff0c;以及springboot项目改造 oracle改造说明 这次的任务是springboot mysql版本改造为oracle版本&#xff0c;mysql5.7&#xff0c;oracle11.2&#xff0c;springboot2.0.2&#xff08;springboot版本无所谓&#xff0c;都差不多&#xff0c;自己记录…...

利用互斥锁实现多个线程写一个文件

代码 #include <stdio.h> #include <pthread.h> #include <string.h> #include <unistd.h>FILE *fp;//线程函数1 void *wrfunc1(void *arg); //线程函数2 void *wrfunc2(void *arg); //线程函数3 void *wrfunc3(void *arg);//静态创建互斥锁 pthread_…...

【m98】视频缓存PacketBuffer 1 : SeqNumUnwrapper int64映射、ForwardDiff

视频缓存PacketBuffer 对rtp包进行接收处理。 rtp序号 相关 【mediasoup】RtpStreamRecv 对rtp 序号的验证 与这里的处理有不同。...

day58:ARMday5,GPIO流水灯实验

汇编指令&#xff1a; .text .global _start _start: 1.设置GPIOE GPIOF寄存器的时钟使能 RCC_MP_AHB4ENSETR[5:4]->1 0x50000a28 LDR R0,0x50000a28 LDR R1,[R0] ORR R1,R1,#(0x3<<4) STR R1,[R0]2.设置PE10、PF10、PE8管脚为输出模式&#xff0c;GPIOE_MODER[21…...

Linux shell编程学习笔记9:字符串运算 和 if语句

Linux Shell 脚本编程和其他编程语言一样&#xff0c;支持算数、关系、布尔、字符串、文件测试等多种运算&#xff0c;同样也需要进行根据条件进行流程控制&#xff0c;提供了if、for、while、until等语句。 上期学习笔记中我们研究了字符串数据的使用&#xff0c;今天我们研…...

【分享】xpath的属性表达式

在XPath中&#xff0c;要选择HTML文档中具有特定类的元素&#xff0c;您通常需要使用属性选择器 [attribute-nameattribute-value] 来选择元素&#xff0c;其中 attribute-name 是属性名称&#xff0c;attribute-value 是要匹配的属性值。对于HTML元素的类选择器&#xff0c;您…...

Oracle Dataguard跨版本数据迁移(11.2.0.4~19.13.0.0)

一、前期准备 按照DG部署步骤修改DG参数、添加standby redo log、配置静态监听、配置tnsnames文件、备端修改参数文件、创建所需目录等配置好部署环境&#xff0c;这里不再赘述&#xff0c;跟正常部署DG无区别。 环境配置好后&#xff0c;进行后面的操作。 二、使用RMAN备份复…...

零基础Linux_14(基础IO_文件)缓冲区+文件系统inode等

目录 1. 缓冲区 1.1 缓冲区的存在 1.2 缓冲区的刷新策略 1.3 模拟C标准库中的文件操作 完整代码及验证&#xff1a; 1.4 重看缓冲区 1.5 stdout和stderr的区别 2. 文件系统 2.1 磁盘的物理结构CHS等 2.2 磁盘的抽象结构LBA等 2.3 文件管理inode等 2.4 对文件的操作…...

Vue中的router路由的介绍(快速入门)

路由的介绍 文章目录 路由的介绍1、VueRouter的介绍2、VueRouter的使用&#xff08;52&#xff09;2.1、5个基础步骤(固定)2.2、两个核心步骤 3、组件存放的目录&#xff08;组件分类&#xff09; 生活中的路由&#xff1a;设备和ip的映射关系&#xff08;路由器&#xff09; V…...

ESP-07S进行TCP 通信测试

一&#xff0c;TCP Server 为 AP 模式&#xff0c;TCP Client 为 Station 模式。 这里电脑pc作为TCP Server&#xff0c;ESP-07S作为TCP Client 。 二&#xff0c;电脑端配置。 1&#xff0c;开启热点。 2&#xff0c;转到“设置”&#xff0c;编辑热点信息。 3&#xff0c;关闭…...

如何找到新媒体矩阵中存在的问题?

随着数字媒体的发展&#xff0c;企业的新媒体矩阵已成为品牌推广和营销的重要手段之一。 然而&#xff0c;很多企业在搭建新媒体矩阵的过程中&#xff0c;往往会忽略一些问题&#xff0c;导致矩阵发展存在潜在风险&#xff0c;影响整个矩阵运营效果。 因此&#xff0c;找到目前…...

MongoDB-基本常用命令

基本常用命令 MongoDB常用命令a) 案例需求b) 数据库操作b.1) 选择和创建数据库b.2) 删除数据库 c) 集合操作c.1) 集合的显示创建c.2) 集合的隐式创建c.3) 集合的删除 d) 文档基本CRUDd.1) 文档的插入(1) 单个文档的插入(2) 批量插入 d.2) 文档的基本查询(1) 查询所有(2) 投影查…...

Linux 常用systemctl service 脚本

文章目录 1. jar 包部署 service 脚本2. nginx 服务安装 脚本3.artemis 服务安装脚本 1. jar 包部署 service 脚本 默认jdk 执行&#xff1a; [Service] Typesimple Userroot WorkingDirectory/opt/app/webserver ExecStart/usr/bin/java -Xms512m -Xss256k -jar /opt/app/we…...

flask-sqlalchemy实现读写分离完整版

1. 依赖版本: alembic==1.6.5 click==8.0.1 colorama==0.4.4 Flask==1.1.2 Flask-Migrate==2.7.0 Flask-Script==2.0.6 Flask-SQLAlchemy==2.4.4 greenlet==1.1.0 itsdangerous==2.0.1 Jinja2==3.0.1 Mako==1.1.4 MarkupSafe==2.0.1 protobuf==3.17.3 PyMySQL==1.0.2 python-…...

windows下在cmd和git bash中执行bash download.sh失败

cmd报错信息&#xff1a; 解决办法&#xff1a; win64-wget-1.21.4 安装软件wget&#xff0c;如下这是64位的包&#xff0c;解压后&#xff0c;下面有个wget.exe&#xff0c;拷贝到C:\Windows\System32、 然后打开cmd&#xff0c;执行wget -V 如上&#xff0c;有版本信息就O…...

rust流程控制

一、分支 &#xff08;一&#xff09;if 1.if 语法格式 if boolean_expression { }例子 fn main(){let num:i32 5;if num > 0 {println!("正数");} }条件表达式不需要用小括号。 条件表达式必须是bool类型。 2.if else 语法格式 if boolean_expression { } …...

虚拟机软件Parallels Desktop 19 mac功能介绍

Parallels Desktop 19 mac是一款虚拟机软件&#xff0c;它允许用户在Mac电脑上同时运行Windows、Linux和其他操作系统。Parallels Desktop提供了直观易用的界面&#xff0c;使用户可以轻松创建、配置和管理虚拟机。 PD19虚拟机软件具有快速启动和关闭虚拟机的能力&#xff0c;让…...

在工业机器视觉领域中应用钡铼技术有限公司的EtherCAT网关

钡铼技术有限公司作为一家专注于业物联网关、工业智能网关、边缘计算网关、ARM嵌入式工业计算机、PLC远程采集网关、Modbus转MQTT网关、OPC UA网关、BACnet网关路由器、Lora网关、工业4G边缘路由器、4G无线远程数据采集模块、4G DTU RTU、以太网远程IO模块、工业总线分布式I/O模…...

ssh指定的密钥协商方式以及Ansible的hosts文件修改密钥协商方式

一、首先你要知道用什么加密协商。 [WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details 10.10.2.190 | UNREACHABLE! > {"changed": false,"msg": "Failed to connect to the host via ssh: U…...

NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器

自然语言处理是机器学习和人工智能的一个迷人领域。这篇博客文章启动了一个具体的 NLP 项目&#xff0c;涉及使用维基百科文章进行聚类、分类和知识提取。灵感和一般方法源自《Applied Text Analysis with Python》一书。 一、说明 该文是系列文章&#xff0c;揭示如何对爬取文…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...