zoukankan      html  css  js  c++  java
  • JAVA项目将 Oracle 转 MySQL 数据库转换(Hibernate 持久层)

    项目开发时用的是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>

      

  • 相关阅读:
    团队冲刺六
    团队冲刺五
    【Mybaits学习】03_ CRUD基于注解
    【Mybaits学习】02_ 快速入门
    【Mybaits学习】01_ 初识
    深圳国际马拉松
    深圳南山半程马拉松
    Selenide使用笔记
    UI自动化测试01-环境搭建
    Java C3p0在Spring中运用
  • 原文地址:https://www.cnblogs.com/linnuo/p/7112070.html
Copyright © 2011-2022 走看看