当前位置: 首页 > 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> 
http://www.lryc.cn/news/187439.html

相关文章:

  • 利用互斥锁实现多个线程写一个文件
  • 【m98】视频缓存PacketBuffer 1 : SeqNumUnwrapper int64映射、ForwardDiff
  • day58:ARMday5,GPIO流水灯实验
  • Linux shell编程学习笔记9:字符串运算 和 if语句
  • 【分享】xpath的属性表达式
  • Oracle Dataguard跨版本数据迁移(11.2.0.4~19.13.0.0)
  • 零基础Linux_14(基础IO_文件)缓冲区+文件系统inode等
  • Vue中的router路由的介绍(快速入门)
  • ESP-07S进行TCP 通信测试
  • 如何找到新媒体矩阵中存在的问题?
  • MongoDB-基本常用命令
  • Linux 常用systemctl service 脚本
  • flask-sqlalchemy实现读写分离完整版
  • windows下在cmd和git bash中执行bash download.sh失败
  • rust流程控制
  • 虚拟机软件Parallels Desktop 19 mac功能介绍
  • 在工业机器视觉领域中应用钡铼技术有限公司的EtherCAT网关
  • ssh指定的密钥协商方式以及Ansible的hosts文件修改密钥协商方式
  • NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
  • QT sqlite的简单用法
  • 大模型部署手记(12)LLaMa2+Chinese-LLaMA-Plus-2-7B+Windows+text-gen+中文对话
  • C#导出本机Win32native dll
  • express-generator快速构建node后端项目
  • 视频监控系统/视频汇聚平台EasyCVR如何反向代理进行后端保活?
  • 金融信创黄金三年:小程序生态+跨端技术框架构建
  • 这短短 6 行代码你能数出几个bug?
  • 【毕设选题】深度学习 机器视觉 车位识别车道线检测 - python opencv
  • 不同数据类型在单片机内存中占多少字节?
  • 安卓LinearLayout让控件居中的办法
  • uniapp下拉刷新