• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 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都得改造
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • handler处理器
    mysql大字段比如text,longtext之类的,会转为clob,nclob,blob等Oracle对应的大字段,但是这些大字段不能直接被mybtais对应java使用,需要做转换与处理,因此使用处理器先行处理
    
    CustomBlobTypeHandler.class,CustomNclobTypeHandler.class,CustomBooleanTypeHandler.class
    
    • 1
    • 2
    • 3
    • 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}),'%'),别名不能使用单引号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 一些别的配置
    idea很好用的插件,mybatis-log-free,会根据mybtais的日志自动填充具体参数,方便查问题
    通用mapper改为oracleMapper
    public interface BaseMapper extends Mapper, OracleMapper 
    
    • 1
    • 2
    • 3
  • 相关阅读:
    天天写业务代码,我给撸了一个业务处理框架
    柯桥日常口语学习|生活英语|实用口语口语天天练
    多模态学习(一) 初识
    特征值和特征向量及其在机器学习中的应用
    Pandas数据重塑与透视
    【LockSupport】概述、阻塞⽅法park、唤醒⽅法unpark(thread)、 解决的痛点、带来的⾯试题_JUC19
    Linux常用指令(八)——管道过滤
    【MATLAB教程案例1~10总结】通信类matlab仿真经验和技巧总结
    面试字节,过关斩将到 3 面,结果找了个架构师来吊打我?
    git提交代码自动部署,git-runner
  • 原文地址:https://blog.csdn.net/lgbisha/article/details/133704648