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>

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM