Hibernate開發執行個體
目前廣泛使用的資料庫系統都是關係型資料庫系統,而我們平時開發的應用程式都是採用物件導向的思想進行開發。程式每次對資料庫操作都要將對象資料轉換成繁瑣的SQL語句後才能進行資料庫訪問、操作。這導致程式大量代碼重複,程式開發效率降低。另外SQL作為一門獨立的語言擁有自己的精髓,並非所有程式員都可以像操作自己熟悉的開發語言一樣操作資料庫。一般的項目都需要有專門的資料庫開發人員對資料進行管理。針對這些問題,目前市場上已經出現了一些資料庫管理軟體,但他們都各有優劣,還沒有完善的解決方案。
(1)普通的關聯式資料庫管理軟體,如Navicate等:
優點:這類軟體可以對關聯式資料庫資料進行各種操作,能夠方便修改資料表結構和資料。
缺點:這類軟體只適合專門的關聯式資料庫設計人員,而且設計的資料表在物件導向的程式中使用不方便,程式中會有大量的重複代碼用在對資料庫表的操作,軟體更不支援物件導向建模。
(2)物件導向的資料庫管理軟體,如Hibernate Synchronizer外掛程式等:
優點:可以從資料庫中產生物件導向的類,然後在程式中直接操作資料表;
缺點:只能將設計好的資料庫轉化為物件導向的類,然後操作資料表,無法直接對資料表結構修改,不支援物件導向建模。
(3)支援物件導向建模的資料庫管理軟體,如PowerDesiner等
優點:支援物件導向建模、支援代碼產生。
缺點:非開源產品,價格昂貴,軟體龐大,功能主要體現在建模上對資料管理支援不好,不方便程式設計過程中對資料的調試。
綜合以上介紹可見雖然目前國內外已有相當多的資料庫管理軟體但是沒有一款適合我們平台需要的。所以我們融合當今國內外各種資料庫管理軟體的優點,彌補它們的不足設計了我們自己的資料庫管理外掛程式。我們的外掛程式支援物件導向的資料庫建模,並且可以適時對模型進行修改。外掛程式支援代碼自動產生,設計好模型後可以自動產生Java類、對象關係對應檔和Hibernate設定檔等以便其他程式可以通過Hibernate外掛程式直接存取資料庫。另外外掛程式還支援資料庫資料管理。選中設計的對象可以直接查看該對象映射到資料庫中的資料表中的資料,並且支援對資料的各種操作。本外掛程式作為ERP系統構建平台的資料層管理外掛程式,從ERP系統設計人員的角度出發,充分地簡化了系統的構建過程。開發人員不需要任何關聯式資料庫知識,可以直接物件導向建模。開發人員甚至不需要會一句SQL語句就可以直接對資料表結構和資料進行各種可視化的管理,一切對關聯式資料庫的操作都由系統後台完成。另外,完成建模後可以自動產生代碼和相關檔案給其他程式開發使用。其他工程只需匯入資料庫建模部分產生的Java類、對應檔和Hibernate設定檔等就可以直接用Hibernate訪問資料庫。本外掛程式讓整個項目的資料庫設計的難度大大減小,效率大大提高。
下面開始介紹一個簡單的執行個體
【這篇文章承接(【ERP系統設計】【資料模組】3 使用Eclipse外掛程式DB viewer進行MySQL資料庫操作)這篇文章 .
約定
Hibernate Synchronize:簡寫為HS
要點
- 瞭解Hibernate
- 做好使用Hibernate之前的準備工作
- 在Eclipse中使用Hibernate Synchronizer進行開發
- 總結開發技巧
步驟:
一 準備工作
v 下載Hibernate架構【本執行個體使用的是3.2.6版本】,然後解壓到某個檔案夾下
v Eclipse下Hibernate開發環境的配置
為了以後方便在eclipse中正常使用Hibernate,我把Hibernate包中的jar包添加到Eclipse中的java的構建路徑中去
啟動eclipse,選擇"視窗"→"喜好設定",然後在快顯視窗中選擇"java"→"構建路徑"→"使用者庫"選項,點擊"建立"按鈕。
以後需要用Hibernate時,就可以直接使用建立的使用者庫。
v 安裝Hibernate Synchronizer外掛程式
二 在Eclipse中使用Hibernate Synchronize進行開發
v 建立一個資料表 test
v 建立一個java項目
建立一個java項目然後輸入工程名,點擊下一步【不要直接點擊完成】
然後通過右邊的按鈕添加工程所需要的包,添加完畢後然後再點擊完成
v 建立Hibernate Configuration File檔案
點擊項目下的src檔案夾,然後建立,如
點擊你所需要建立的檔案然後點擊下一步,在彈出的對話方塊中選擇資料庫的類型mysql,然後設定其他屬性,其中Driver Class選擇為com.mysql.jdbc.Driver,Database URL設定為jdbc:mysql://localhost:3306/資料庫名,我自己的資料庫名為stu,其他的不再做解釋,因為很是簡單明了。
<hibernate-configuration><session-factory><!-- local connection properties --><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/stu</property><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">123456</property><!-- property name="hibernate.connection.pool_size"></property --><!-- dialect for MySQL --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="hibernate.show_sql">false</property><property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property><mapping resource="nba/Test.hbm.xml" /></session-factory></hibernate-configuration>
v 建立mapping檔案
為資料庫建立相應的對應檔,對應檔不能放在預設包中,所以首先建立一個新的包。然後點擊新建立的包,建立Hibernate mapping檔案
輸入相對應的密碼,然後點擊Refresh,資料庫中的表就會列在table右邊的列表框,選擇你要操作的資料表,再選擇該檔案所在的Package
產生代碼如下:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" ><hibernate-mapping package="nba"><classname="Test"table="test"><meta attribute="sync-DAO">false</meta><idname="Id"type="integer"column="id"><generator class="vm"/></id><propertyname="Title"column="title"type="string"not-null="true"length="100"/><propertyname="Content"column="content"type="string"not-null="true"/></class></hibernate-mapping>
三 使用HS進行同步
使用HS進行同步,這樣可以自動產生Hibernate持久類。
選中Test.hbm.xml檔案,點擊滑鼠右鍵,在彈出的菜單中選擇Hibernate Synchronize→Synchronize Files命令,同步結束後,該項目的目錄結構如下
【目錄中的TestHibernate.java檔案是之後測試檔案,不是自動產生的】
在同步產生了Test.java和BaseTest.java檔案
接下來還有重要的一步,就是建立映射關係,選中Test.hbm.xml,點擊右鍵,在彈出的菜單中選擇Hibernate Synchronize→Add Mapping Reference命令即可
四 建立執行個體並運行
代碼如下:
package nba;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.classic.*;public class TestHibernate {public static void main(String[] args){try{SessionFactory sf=new Configuration().configure().buildSessionFactory();Session session=sf.openSession();Transaction tx=session.beginTransaction();for(int i=0;i<10;i++){Test TestData=new Test();TestData.setContent("this is a test");TestData.setTitle("kycool");session.save(TestData);}tx.commit();session.close();}catch(HibernateException e){e.printStackTrace();}}}
運行結果:
控制台中的錯誤提示我,設定檔不正確,後來發現是頭部資訊丟失了
然後加入以下代碼
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
再次運行
這個提示和id有關,在原始碼中可以發現,generator對應的class是vm,mysql不支援這種操作,改為naive,然後儲存再次運行
運行成功,但不是很完美,因為有兩個warn
查看資料庫