Hibernate 百度百科
http://baike.baidu.com/view/7291.html?wtp=tt

摘要
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。

Hibernate的核心接口一共有5個,分別為:Session、SessionFactory、Transaction、Query和Configuration。這5個核心接口在任何開發中都會用到。通過這些接口,不僅可以對持久化對象進行存取,還能夠進行事務控制。
下面對這五的核心接口分別加以介紹。
·Session接口:Session接口負責執行被持久化對象的CRUD操作(CRUD的任務是完成與數據庫的交流,包含了很多常見的SQL語句。)。但需要注意的是Session對象是非線程安全的。同時,Hibernate的session不同于JSP應用中的HttpSession。這里當使用session這個術語時,其實指的是Hibernate中的session,而以后會將HttpSesion對象稱為用戶session。
·SessionFactory接口:SessionFactroy接口負責初始化Hibernate。它充當數據存儲源的代理,并負責創建Session對象。這里用到了工廠模式。需要注意的是SessionFactory并不是輕量級的,因為一般情況下,一個項目通常只需要一個SessionFactory就夠,當需要操作多個數據庫時,可以為每個數據庫指定一個SessionFactory。
·Configuration接口:Configuration接口負責配置并啟動Hibernate,創建SessionFactory對象。在Hibernate的啟動的過程中,Configuration類的實例首先定位映射文檔位置、讀取配置,然后創建SessionFactory對象。
·Transaction接口:Transaction接口負責事務相關的操作。它是可選的,開發人員也可以設計編寫自己的底層事務處理代碼。
·Query和Criteria接口:Query和Criteria接口負責執行各種數據庫查詢。它可以使用HQL語言或SQL語句兩種表達方式。
精通Hibernate學習筆記NO.1
http://zpthomes.spaces.live.com/Blog/cns!6AB705608FFE25A3!334.entry

摘要
Hibernate是什么?從不同的角度有不同的解釋:
1.它是連接Java應用程序和關系數據庫的中間件.
2.它對JDBC API進行了封裝,負責Java對象的持久化.
3.在分層的軟件架構中它位于持久化層,封裝了所有數據庫訪問細節,是業務邏輯層可以專注于實現業務邏輯.
4.它是一中ORM(對象關系模型)映射工具.能夠建立面向對象的域模型和關系數據模型之間的映射.

持久化層封裝了數據訪問細節,為業務邏輯層提供了面向對象的API,完善的持久化層應該達到以下目標:
1.代碼可重用性高,能夠完成所有的數據庫訪問操作.
2.如果需要的話,能夠支持多種數據庫平臺.
3.具有相對獨立性,當持久層的實現發生變化時,不影響上層的實現.

Hibernate 學習筆記
http://blog.csdn.net/kangwei8655990/archive/2007/04/13/1563706.aspx
第八章 Hibernate的入門
http://blog.csdn.net/weijie_search/archive/2008/03/13/2175917.aspx

摘要
10、如何學習Hibernate
(1)Hibernate文檔
Hibernate文檔處處都是持久層設計的經驗和最佳實踐。Hibernate文檔準確的來說,絕大部分內容都在講對象的持久層設計,而不是簡單的Hibernate使用。

(2)學習要點
所以學習Hibernate,主要是在學習持久層的設計模式,如果你把Hibernate文檔都看完了,還整天只會提那些 Hibernate的配置問題,Hibernate的類調用問題,我覺得這樣的人還沒有真正的入門,算是白學了

在學習Hibernate的時候即集中所有精力來理解Hibernate的運行原理,集中精力來掌握持久層設計應該把握的原則和技巧,這些才對我是最重用的東西----而如果在學習Hibernate時間,主要側重于怎么配置,用工具怎么生成hbm文件,如果你把重點放在這里,基本上等于白學了Hibernate。
因為,如果這樣進行學習,學習完Hibernate,肯定會對JDBC的編程也提高了一大截,更不要說對于J2EE架構的持久層的框架設計,基本上是了然于胸了,即使將來換了API,不用Hibernate的,改用JDO,Castor什么的,這些經驗一樣照用。

(3)Hibernate的精華:在于無與倫比的靈巧的對象持久層設計
這些持久層設計經驗不會因為你不用Hibernate而喪失掉,我自己學習Hibernate,已經明顯感覺到對持久層設計能力已經長了很多經驗值了,這些經驗甚至不光可以用在Java上,用在.net上也是一樣。
因為,不管JDO也好,Hibernate也好,TopLink也好,CocoBase也好,還是Castor,還是什么Torque,OJB,軟件的使用和配置方法可以各異,但本質上都是ORM,都是對JDBC的對象持久層封裝,所以萬變不離其宗。
(比較全面的介紹) http://feelingsea.blog.hexun.com/7294376_d.html

摘要
16、一個重要的術語:Type
(1)一個Type對象能將一個Java類型映射到數據庫中一個表的字段中
Hibernate的設計者們發明了一個術語:Type,它在整個構架中是一個非常基礎、有著強大功能的元素。一個Type對象能將一個Java類型映射到數據庫中一個表的字段中去(實際上,它可以映射到表的多個字段中去)。

<hibernate-mapping>
<class name="Event" table="EVENTS">
<id name="id" column="EVENT_ID">
<generator class="increment"/>
</id>
<property name="date" type="timestamp" column="EVENT_DATE"/>
<property name="title"/>
</class>
</hibernate-mapping>

它是Hibernate mapping types,并不像我們假想的那樣,是Java data type, 同時也不是SQL database type。這些類型被稱作Hibernate mapping types,它們把數據類型從Java轉換到SQL data types。
持久類的所有屬性都對應一個type,這種設計思想使用Hibernate有著高度的靈活性和擴展性。


(2)關于缺省的type類型
如果映射的參數沒有設置type類型,Hibernate也將嘗試去確定正確的類型轉換和它的映射類型。在某些情況下這個自動檢測(在Java class上使用反射機制)不會產生你所期待或者需要的缺省值----因此,最好我們來設定其類型。
上面的例子是關于date屬性。Hibernate無法知道這個屬性應該被映射成下面這些類型中的哪一個: SQL date,timestamp,time。 我們通過聲明屬性映射timestamp來表示我們希望保存所有的關于日期和時間的信息。
java,hibernate,標準sql數據類型之間的對應表
http://hi.baidu.com/sunjoe/blog/item/aa1ddabf07c5380f19d81feb.html

摘要
java數據類型,hibernate數據類型,標準sql數據類型之間的對應表

Java數據類型 Hibernate數據類型 標準SQL數據類型
(PS:對于不同的DB可能有所差異)
byte、java.lang.Byte byte TINYINT
short、java.lang.Short short SMALLINT
int、java.lang.Integer integer INGEGER
long、java.lang.Long long BIGINT
float、java.lang.Float float FLOAT
double、java.lang.Double double DOUBLE
java.math.BigDecimal big_decimal NUMERIC
char、java.lang.Character character CHAR(1)
boolean、java.lang.Boolean boolean BIT
java.lang.String string VARCHAR
boolean、java.lang.Boolean yes_no CHAR(1)('Y'或'N')
boolean、java.lang.Boolean true_false CHAR(1)('Y'或'N')
java.util.Date、java.sql.Date date DATE
java.util.Date、java.sql.Time time TIME
java.util.Date、java.sql.Timestamp timestamp TIMESTAMP
java.util.Calendar calendarTIMES TAMP
java.util.Calendar calendar_date DATE
byte[] binary VARBINARY、 BLOB
java.lang.String text CLOB
java.io.Serializable serializable VARBINARY、 BLOB
java.sql.Clob clob CLOB
java.sql.Blob blob BLOB
java.lang.Class class VARCHAR
java.util.Locale locale VARCHAR
java.util.TimeZone timezone VARCHAR
java.util.Currency currency VARCHAR

Hibernate 3.2 Integer --> Long

摘要
關于在Hibernate里使用select count(*) 返回值的問題說明
由于我使用的是Hibernate 3.2版本,經確認,這個版本已經把以前返回 Integer的改成了 Long,
因為JPA里面的返回值規定是Long, Hibernate為了兼容這個,所以修改了返回值。

如果你從Hibernate 3.0.x/3.1.x升級到最新的3.2版,一定要注意,3.2版的很多sql函數如count(), sum()的唯一返回值已經從Integer變為Long,如果不升級代碼,會得到一個ClassCastException。

這個變化主要是為了兼容JPA,可以在hibernate.org的最新文檔中找到說明。

Hibernate Team也提供了一個與原來兼容的解決方案:

Configuration classicCfg = new Configuration();
classicCfg.addSqlFunction( "count", new ClassicCountFunction());
classicCfg.addSqlFunction( "avg", new ClassicAvgFunction());
classicCfg.addSqlFunction( "sum", new ClassicSumFunction());
SessionFactory classicSf = classicCfg.buildSessionFactory();

posted on 2008-07-12 18:05
黃小二 閱讀(328)
評論(0) 編輯 收藏 所屬分類:
S/S2SH