主要特性
Hibernate是一個object relational mapping的解決方案和一個持久管理方案或持久層。這樣的解釋可能不能使學習Hibernate的人明白。
你或許可以想象一下你的應用程序有很多功能(業務邏輯),你想把數據存到數據庫裡。當你所有的業務邏輯都用Java對象實現時,數據庫的表卻不是對象。
Hibernate提供了一個映射數據庫表到Java class的解決辦法。它復制數據庫數據到object,也支持把object數據存儲到數據庫。以這種方法就可以使object轉換一個或多個數據庫表。
把數據保存到存儲設備就叫做持久化。復制數據庫表數據到object和從object把數據存進數據庫表就叫做object relational mapping。
為什麼要使用object relational mapping?
更好的系統架構
當你把所有的處理和數據庫訪問都寫進了頁面,這樣你程序就有了很多的缺點。
它重用困難。你在許多地方寫了重復的代碼。使得你在需要更動的時候很難找到所有需要更改的地方。
當你把頁面分成業務邏輯和持久邏輯等部分的時候,你能比較容易地更在其中一部分而不影響其它部分。
減少標准數據庫操作編寫時間
許多數據庫查詢都是簡單的“insert,update,delete”語句。這完全沒有必要開發這些單調乏味的語句。Hibernate幫助你節省了這些時間。
從數據庫加載數據到類類似於以下代碼
Query query = session.createQuery("select b from Bug as b");
for (Iterator iter = query.iterate(); iter.hasNext();) {
bugs.add((Bug) iter.next());
}
return bugs;
保存“bug”類類似於
session.update(bug);
自己難於實現一些高級功能
Hibernate提供的緩存方案(Caching solutions),事務處理(transactions)和其它功能都是不容易實現的。完全沒理由去開發一些已經存在的東西,你僅僅只需要用Hibernate就可以實現上述功能了。
Hibernate是怎麼工作的
我的意見是它比實體bean(entity beans)友好許多,hibernate只從一些簡單的Java類開始(Pojo=Plain Old Java Objects)。
想使用hibernate你要先編寫一個簡單的Java類:
public class Bug
implements Serializable
{
private int hashValue = 0;
private Java.lang.Integer id;
private Java.lang.String title;
public Bug()
{
}
public Bug(Java.lang.Integer fid)
{
this.setId(fid);
}
public Java.lang.Integer getId() {
return id;
}
public void setId(Java.lang.Integer id) {
this.id = id;
}
public Java.lang.String getTitle() {
return title;
}
public void setTitle(Java.lang.String title) {
this.title = title;
}
.............
然後創建一個映射文件。映射文件描述Hibernate如何將類的字段映射到數據庫字段。
public.bug_fid_seq
現在就可以使用hibernate類了。
例如新建一個數據庫實體:
try {
Bug bug = new Bug();
bug.setTitle("Title");
bug.setTuserFk(tuser);
Transaction tx = session.beginTransaction();
session.save(bug);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
}
需要創建的描述文件可以用一些工具自動生成,例如MyEclipse。MyEclipse提供了創建類和直接從數據庫表創建描述文件的功能。
Hibernate包括了以下工具:
l 從描述文件生成Java類
l 從現有數據表生成描述文件
l 從描述文件生成數據庫表