Domino 整合Hibernate後, Hibernate可以對數據庫(如Mysql)進行管理,能用對象模式來訪問數據庫內容,提升了開發效率。css
本文經過實例代碼展示了在 Domino 與Hibernate,Mysql之間整合的具體步驟 , 同一時候解說了XPages 中怎樣去使用hibernate。html
Hibernate簡單介紹java
Hibernate是一個開放源碼的對象關係映射框架。它對JDBC進行了很輕量級的對象封裝。使得Java程序猿可以爲所欲爲的使用對象編程思惟來操縱數據庫。mysql
Hibernate可以應用在不論什麼使用JDBC的場合。既可以在Java的client程序使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中代替CMP。完畢數據持久化的重任。sql
Hibernate能幫助咱們利用面向對象的思想,開發基於關係型數據庫的應用程序
第一:將對象數據保存到數據庫
第二:將數據庫數據讀入對象中
Hibernate體系結構:
一個很簡要的Hibernate體系結構的概要圖數據庫
從這個圖可以看出,Hibernate使用數據庫和配置信息來爲應用程序提供持久化服務(以及持久的對象)。編程
咱們來更具體地看一下Hibernate執行時體系結構。session
由於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,選擇完畢button後,導出成功。
如圖
方法1:
首先要把Designer切換到JAVA視圖
打開Designer ,選擇窗體屬性,切換至java開發視圖。
找到WEB_INF文件夾,把jar包copy到lib文件夾下,而後選中HibernateTest.jar右擊選擇構建路徑,把jar加入進去。這樣的方法,做爲java開發者。都會選擇這樣去作。如圖
在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); }
在整合的過程當中,需要hibernate的jar包放到path:\IBM\Domino\jvm\lib\ext文件夾下,這是最easy出錯的地方。在這裏你可能認爲導過來的HibernateTest.jar,裏面有這些包了,能不能不導入呢,確定不能,這樣會後臺會報錯,提示沒有session這個類,在domino中找不到。
因此把hibernate用的包,放在ext文件夾中,給domino進行編譯,才幹夠使用。
測試成功 :domino後臺打印Hibernate 語句,myql表裏也加入了一條記錄,如圖
方法2:
把HibernateTest.jar直接放在path:\IBM\Domino\jvm\lib\ext文件夾下。
而後從新啓動服務.