Domino 如何整Hibernate最佳實踐

Domino 整合Hibernate後, Hibernate可以對數據庫(如Mysql)進行管理,能用對象模式來訪問數據庫內容,提高了開發效率。

本文通過實例代碼展現了在 Domino 與Hibernate,Mysql之間整合的具體步驟 , 同時講解了XPages 中如何去使用hibernate。

Hibernate簡介

Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。

Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。

Hibernate能幫助我們利用面向對象的思想,開發基於關係型數據庫的應用程序
第一:將對象數據保存到數據庫
第二:將數據庫數據讀入對象中
Hibernate體系結構:
一個非常簡要的Hibernate體系結構的概要圖

 

從這個圖可以看出,Hibernate使用數據庫和配置信息來爲應用程序提供持久化服務(以及持久的對象)。

我們來更詳細地看一下Hibernate運行時體系結構。 由於Hibernate非常靈活,且支持多種應用方案,所以我們這隻描述一下兩種極端的情況。

“輕型”的體系結構方案,要求應用程序提供自己的JDBC 連接並管理自己的事務。這種方案使用了Hibernate API的最小子集:

整合步驟

在整合Hibernate的過程中,首先用eclplise搭建好hibernate環境,然後把整個項目打成jar包,把這個jar包添加到domino,給xpage調用。
Eclipse手動搭建Hibernate環境

1 首先使用eclipse新建一個java項目,在src目錄下添加lib目錄,在該目錄下添加Hibernate的jar包,由於jar包之間存在相互調用的關係,要注意所有的jar包版本需要一致,並且,要將數據庫驅動包拷到lib目錄下,在這裏我用的數據庫是MYSQL(mysql-connector-java-5.1.8-bin.jar)。最後,把lib目錄下的的jar包添加到構建路徑。如圖:

 2.建立hibernate.cfg.xml,這個文件包含了Hibernate與數據庫的基本連接信息。Configuration負責啓動hierbante,創建SessionFactory實例。SessionFactory接口負責初始化Hibernate,它充當數據源的代理,並負責創建Session對象,用這個對象的方法對PO進行加載、保存、更新、刪除等操作。如圖

2 建立實體Bean類(SlwfPersonBean.java),也就是持久化對象(PO)。PO在Hibernate中存在三種狀態:臨時狀態(Transient),持久化狀態(Persistent),脫管狀態(Detached).當一個JavaBean對象在內存中孤立存在不與數據庫中的數據有任何關係時,那麼這個JavaBean對象就稱爲TransientObject;當它與一個Session相關聯時,那就變成PersistentObject;在這個Session關閉時,這個對象也會脫離持久狀態,成爲DetachedObject.如圖1.3

3.建立映射文件(SlwfPerson.hbm.xml):用來把PO與數據庫中的表、PO之間的關係與數據表之間的關係以及PO的屬性與表字段一一映射起來,它是Hibernate的核心文件。如圖

5.測試hibernate,搭建成功.如圖

6.把整個項目導出成jar文件(HibernateTest.jar),選中項目,然後右擊選擇export,導出類型爲jar,選擇完成按鈕後,導出成功。 如圖

Hibernate 整合到 Domino

方法1:
首先要把Designer切換到JAVA視圖
打開Designer ,選擇窗口屬性,切換至java開發視圖。找到WEB_INF目錄,把jar包copy到lib目錄下,然後選中HibernateTest.jar右擊選擇構建路徑,把jar添加進去。這種方法,作爲java開發人員,都會選擇這樣去做。如圖


然後新建一個Xpage頁面,做測試。

在Designer裏,新建一個xpage頁面,在頁面中添加一個Button,寫Ls代碼去調用HibernateTest.jar,裏面的方法.如圖


importPackage(com.gzsolar.util)// 如果你要調用某個類,須引入 JAR裏面的包名  
importPackage(com.gzsolar.cnst)
try{
		var unid = "";
		if(param.containsKey("unid")){
			unid = param.get("unid")
		}
		unid = ""
		var doc:NotesDocument = database.getDocumentByUNID("DD757E2D538C359F48257D0100068299");
		var instanceId = doc.getItemValueString("InstanceID");
		doc.replaceItemValue("InstanceStatusOS",InstanceStatus.Cancel);
		doc.save();
		var util:EngineUtils = new  EngineUtils() ;
		util.cancelInstance(instanceId); 
}catch(e){
	print(e);
}

 接着,導入jar包到ext目錄下

在整合的過程中,需要hibernate的jar包放到path:\IBM\Domino\jvm\lib\ext目錄下,這是最容易出錯的地方。在這裏你可能覺得導過來的HibernateTest.jar,裏面有這些包了,能不能不導入呢,肯定不能,這樣會後臺會報錯,提示沒有session這個類,在domino中找不到。



所以把hibernate用的包,放在ext目錄中,給domino進行編譯,纔可以使用。
測試成功 :domino後臺打印Hibernate 語句,myql表裏也添加了一條記錄,如圖

方法2:
把HibernateTest.jar直接放在path:\IBM\Domino\jvm\lib\ext目錄下。然後重啓服務.




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章