项目开发时用的是Oracle数据库,但为了更好的做分布式,做集群,我们要将数据库转成 MySQL!

在数据库迁移中首先要做的事是将 Oracle 的表结构以及数据 克隆到 MySQL 数据库。

这点不多说,有很多工具可以实现,网上大神也给出了相应指导。

重点说说后台代码:

一、在 Oracle 数据库中 所有的表明、字段名都是大写,而工具将表结构转到 MySQL 之后表明名成了小写字母,

  而在MySQL里列名不区分大小写,但是表名区分大小写(t_xx_paper 表 不是 T_XX_PAPER 表),

  所以要将项目中所有的大写表名替换成小写。

 

 1、去数据库复制小写表名 (t_xx_paper 为例)

  

  2、在开发工具里(我用的是 Eclipse)全局替换: Ctrl + H 快捷键

  

  上面选中 file search, containing text 里面输入将被替换的内容 : T_XX_PAPER, 然后 Replace...

  

  3、在搜索栏下面可以看到整个项目有几个 ‘T_XX_PAPER’ 以及出现的位置, 在 Raplace Text Matches 框的 with 栏里输入要替换成的小写 :t_xx_paper

      

  点击 OK 就完成了, 其他表也按上述步骤执行即可

二、在 Oracle 数据库中用的是序列作为主键,而在 MySQL中用不了。我这里用了 Hilo 代替

  在上一篇博客给了说明,这里一笔带过:   http://www.cnblogs.com/linnuo/p/7085688.html

  我在 Oracle 的自增主键用的是 NUMBER 类型,转到 MySQL 后成了 decimal 类型

  不过这两种类型都不影响映射成 java 的 Long 类型。

  

  将所有带有主键映射的 hibernate hbm.xml 文件的 序列sequence自增 替换成 Hilo 自增

    Oracle:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.gzewell.ucomweb.domain.Paper" table="t_xx_paper"> 
<property name="title" type="java.lang.String">
<column name="TITLE" length="256" />
</property>
<property name="imgTitle" type="java.lang.String">
<column name="IMG_TITLE" length="256" />
</property>
<property name="content" type="java.lang.String">
<column name="CONTENT"/>
</property>
<property name="image" type="java.lang.String">
<column name="IMAGE" length="256" />
</property>
<property name="author" type="java.lang.String">
<column name="AUTHOR" length="32" />
</property>
<property name="authorId" type="java.lang.Long">
<column name="AUTHOR_ID"/>
</property>
<property name="createTime" type="java.util.Date">
<column name="CREATE_TIME" length="0" />
</property>
<property name="auditor" type="java.lang.String">
<column name="AUDITOR" length="32" />
</property>
<property name="auditTime" type="java.util.Date">
<column name="AUDIT_TIME" length="0" />
</property>
<property name="lastUpdateTime" type="java.util.Date">
<column name="LAST_UPDATE_TIME" length="0"/>
</property>
<property name="status" type="java.lang.Long">
<column name="STATUS" length="1" />
</property>
<property name="auditorId" type="java.lang.Long">
<column name="AUDITOR_ID"/>
</property>
</class>
</hibernate-mapping>

    MySQL:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.gzewell.ucomweb.domain.Paper" table="t_xx_paper">
<id name="rowId" column="ROW_ID" type="java.lang.Long">
<generator class="hilo">
<param name="table">hibernate_hilo</param>
<param name="column">next_hi</param>
<param name="max_lo">100000000</param>
</generator>
</id>
<property name="title" type="java.lang.String">
<column name="TITLE" length="256" />
</property>
<property name="imgTitle" type="java.lang.String">
<column name="IMG_TITLE" length="256" />
</property>
<property name="content" type="java.lang.String">
<column name="CONTENT"/>
</property>
<property name="image" type="java.lang.String">
<column name="IMAGE" length="256" />
</property>
<property name="author" type="java.lang.String">
<column name="AUTHOR" length="32" />
</property>
<property name="authorId" type="java.lang.Long">
<column name="AUTHOR_ID"/>
</property>
<property name="createTime" type="java.util.Date">
<column name="CREATE_TIME" length="0" />
</property>
<property name="auditor" type="java.lang.String">
<column name="AUDITOR" length="32" />
</property>
<property name="auditTime" type="java.util.Date">
<column name="AUDIT_TIME" length="0" />
</property>
<property name="lastUpdateTime" type="java.util.Date">
<column name="LAST_UPDATE_TIME" length="0"/>
</property>
<property name="status" type="java.lang.Long">
<column name="STATUS" length="1" />
</property>
<property name="auditorId" type="java.lang.Long">
<column name="AUDITOR_ID"/>
</property>
</class>
</hibernate-mapping>

  

  1、我这里主键用的全都是 ROW_ID 映射成 java 的 Long类型,这就简单了。 全局查找:<id name="rowId" type="java.lang.Long">

  search 所有的 主键 ROW_ID 都会显示在 search 框里

  

  2、逐一点开search框里的存在 <id name="rowId" type="java.lang.Long"> 的文件,将主键 ID

   
     <id name="rowId" type="java.lang.Long">
       <column name="ROW_ID" scale="0" precision="16"/>
       <generator class="seqhilo"/>
     </id>

  改成如下即可:

        <id name="rowId" column="ROW_ID" type="java.lang.Long">
<generator class="hilo">
<param name="table">hibernate_hilo</param>
<param name="column">next_hi</param>
<param name="max_lo">100000000</param>
</generator>
</id>

  

JAVA项目将 Oracle 转 MySQL 数据库转换(Hibernate 持久层)的更多相关文章

  1. Java在线备份和还原MySQL数据库。

    2018年6月29日14:00:48 阅读数:1534 今天整了整整一整天,终于使用Java在线备份和还原MySQL数据库了,哎,备份倒是很快,就是在还原的时候遇到了一个问题,也不报错,结果将sql语 ...

  2. 在oracle配置mysql数据库的dblink

    本文介绍如何在oracle配置mysql数据库的dblink:虽然dblink使用很占资源:俗称“性能杀手”.但有些场景不得不使用它.例如公司使用数据库是oracle:可能其他部门或者CP合作公司使用 ...

  3. java中用activiti插件连接mysql数据库,自动建表过程中,在配置mysql架包路径“org.activiti.engine.ActivitiException: couldn't check if tables “

    java中用activiti插件连接mysql数据库,出现错误: org.activiti.engine.ActivitiException: couldn't check if tables are ...

  4. 懒要懒到底,能自动的就不要手动,Hibernate正向工程完成Oracle数据库到MySql数据库转换(含字段转换、注释)

    需求描述 需求是这样的:因为我们目前的一个老项目是Oracle数据库的,这个库呢,数据库是没有注释的,而且字段名和表名都是大写风格,比如 在代码层面的po呢,以前也是没有任何注释的,但是经过这些年,大 ...

  5. JDBC(Java项目使用Oracle数据库)

    Java项目中使用Oracle数据库(Eclipse) 前言 这学期选了Oracle数据库这门课,于是自己下载了Oracle11gR2版本的数据库.在这之前我一直用的是MySQL.虽然两者教程差不多, ...

  6. JAVA使用JDBC连接,修改MySQL数据库(比较乱)

    原文地址1(连接MySQL图文) : http://www.cnblogs.com/GarfieldEr007/p/5746137.html 原文地址2 (修改MySQL图文): http://www ...

  7. SQL Server 和 Oracle 以及 MySQL 数据库

    推荐:https://www.zhihu.com/question/19866767 三者是目前市场占有率最高(依安装量而非收入)的关系数据库,而且很有代表性.排行第四的DB2(属IBM公司),与Or ...

  8. oracle迁移mysql数据库注意

    oracle转mysql修改: . substr() substr( string , 0, 10) 这里测试 必须从 第一位获取 既是 substr(string , 1 , 10)2. to_ch ...

  9. oracle迁移mysql数据库注意(转)

    oracle转mysql修改: 1. substr() substr( string , 0, 10) 这里测试 必须从 第一位获取 既是 substr(string , 1 , 10)2. to_c ...

随机推荐

  1. 设计模式之代理模式(Proxy Pattern)_远程代理解析

    一.什么是代理模式? 顾名思义,代理就是第三方,比如明星的经纪人,明星的事务都交给经纪人来处理,明星只要告诉经纪人去做什么,经纪人自然会想办法去做,做完之后再把结果告诉明星就好了 本来是调用者与被调用 ...

  2. .NET高级代码审计(第二课) Json.Net反序列化漏洞

    0X00 前言 Newtonsoft.Json,这是一个开源的Json.Net库,官方地址:https://www.newtonsoft.com/json ,一个读写Json效率非常高的.Net库,在 ...

  3. PaaS服务之路漫谈(三)

    此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Monolithic架构在产品访问量很大的情况下,有可能常会导致整个产品迭代或升级过程不能按预期进行,或者上 ...

  4. 网易云安全DDoS高防全新上线 ,游戏防护实力领先

    本文由  网易云发布.       10月24日,网易云安全(易盾)正式上线DDoS高防解决方案[点击查看].基于网易20年网络安全防护经验,网易云安全(易盾)DDoS高防可提供1T超大防护带宽,拥有 ...

  5. SqlAlchemy操作(二)

    SQLALchemy初始化链接数据库 1. 数据库配置. https://www.cnblogs.com/mengbin0546/p/10124560.html 2.  python端操作. 一.  ...

  6. 20164317《网络对抗技术》Exp3 免杀原理与实践

    一.实验要求 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程( ...

  7. python小数的进位与舍去

    一.基础知识准备 ​ 奇进偶舍,又称为四舍六入五成双规则.银行进位法(Banker's Rounding),是一种计数保留法,是一种数值修约规则.从统计学的角度,"奇进偶舍"比&q ...

  8. Python3.5 学习九

    进程与线程 线程(Thread)是计算机运算调度的最小单位,它存在于进程中,是实际运作单位.每个进程都可能并发多线程. 每一个程序的内存是独立的. 线程:是操作系统最小的运算调度单位,是一串指令的集合 ...

  9. 诸神眷顾的幻想乡(zjoi2015,bzoj3926)(广义后缀自动机)

    幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看.幽香当然也非常高兴啦. ...

  10. Django(图书管理系统2)

    day64 内容回顾     1. ORM外键操作         图书表和出版社表  多对一 的关系              # 书     class Book(models.Model):   ...