Hibernate Day_1
Hibernate 英文的直意是冬眠的意思。
Hibernate 是一個面向 Java 環(huán)境的對象 / 關(guān)系數(shù)據(jù)映射工具,注意,這是一種技術(shù)工具。
ORM ( object relational mapping ) 這個術(shù)語表示一種技術(shù),用來把對象模型表示的對象映射到基于 SQL 的關(guān)系模型數(shù)據(jù)結(jié)構(gòu)中去。
以上的這些概念性的東西,然我感覺和 .NET Framework 2.0 中的強類型數(shù)據(jù)集的作用差不多,但聽研究過的人說,要比 Microsoft 的那個好得多, Microsoft 的強類型數(shù)據(jù)集我用過,感覺爽,既然有說 Hibernate 更好,那已經(jīng)更是過癮,我心里癢癢的呀。繼續(xù)。。。
書中有這樣一句“對于以數(shù)據(jù)為中心的程序來說,他們往往只在數(shù)據(jù)庫中使用存儲過程來實現(xiàn)商業(yè)邏輯, Hibernate 可能不是最好的解決方案。”這個是一定啦, Hibernate 是橋梁,又不是萬金油,當(dāng)然是在數(shù)據(jù)庫中直接用存儲過程處理商業(yè)邏輯是最好的啦。我做過,直接在存儲過程中搞定一切東西,傳一個參數(shù)過去,然后所有的運算都在 SQL Server 2000 的存儲過程中完成,那叫一個爽,比把數(shù)據(jù)讀到程序里,然后用 Java 處理,再把數(shù)據(jù)傳回去要快得多,但是在 SQL Server 2000 里直接用存儲過程來完成這樣的工作,難度還是不小的,調(diào)試就是最大的難點,反正我是沒整明白有啥辦法可以調(diào)試的,我就用最原始、最保靠,據(jù)說是也是有效的調(diào)試方法 print 來完成。哈哈。夠暈的吧!繼續(xù)看。。。
現(xiàn)在看到了一個“持久化實體類”這個類是符合 JavaBean 的編寫要求。并且要給它一個唯一的標(biāo)識符,這是為了我們使用 Hibernate 提供的所有特性。大多數(shù)程序,特別是 web 程序,都需要通過標(biāo)識符來區(qū)分對象。但,通常我們不會直接操作對象的標(biāo)識符,所以他的 setter 方法的訪問級別是 private 。
Hibernate 需要知道怎樣去加載( load )和存儲( store )持久化類的對象,映射文件,它就是告訴 Hibernate ,應(yīng)該訪問數(shù)據(jù)庫里面的哪個表,已經(jīng)應(yīng)該使用表里面哪些字段。
Hibernate 不會從 web 加載 DTD 文件,但它會首先在應(yīng)用程序的 classpath 中查找。 DTD 文件包含在 hibernate3.jar 里,同時在 Hibernate 發(fā)布包的 src/ 目錄下。
映射文件的長相:
Event.hbm.xml
<hibernate-mapping>
???? <classname="events.Event" table="Events">
??????????? <idname="id" column="eventID">
?????????????????? <generatorclass="native"/>
??????????? </id>
??????????? <propertyname="date" type="timestamp" column="eventDate"/>
??????????? <propertyname="title" column="eventTitle"/>
???? </class>
</hibernate-mapping>
說明:
class 表示持久化類;
id 表示唯一標(biāo)識;
property 表示類的屬性字段;
name 是持久化類名;
table 是數(shù)據(jù)表名;
column 是數(shù)據(jù)字段名;
generator 是唯一標(biāo)識的生成方式;
type 是映射的數(shù)據(jù)類型。
Hibernate
配置文件的長相:
hibernate.cfg.xml
<!-- by MyEclipse Hibernate tool integration. -->
<hibernate-configuration>
??? <session-factory>
??????? <!-- properties -->
??????? <propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
??????? <propertyname="connection.url">jdbc:oracle:thin:@localhost:1521:test</property>
??????? <propertyname="connection.username">system</property>
??????????? ?<propertyname="connection.password">manager</property>
????????????????????????????????????????????????????????????????????
??????? <propertyname="dialect">net.sf.hibernate.dialect.OracleDialect</property>
??????? ???????????????????????????????????????????? ?????????????????
??????? <!-- mapping files -->
??????? <mappingresource="events/Event.hbm.xml"/>
??
?</session-factory>
</hibernate-configuration>
說明:
Session-factory :特定數(shù)據(jù)庫全局工廠
connection.driver_class :驅(qū)動類
connection.url :連接路徑
connection.username :用戶名
connection.password :用戶密碼
mapping resource :持久化類加入映射文件
用 ant 創(chuàng)建 build.xml
我理解他就是管理文件位置的,就是拷貝,為編譯運行做準(zhǔn)備。
SessionFactory 是一個線程安全的全局對象,只需要被實例化一次,一個 Session 代表一個單線程的單元操作。
這時又來了一個輔助類 HibernateUtil ,負(fù)責(zé)啟動 Hibernate 和更好的操作 SessionFactory 。
最后配置一個日志系統(tǒng), Log4j 或 JDK 1.4 都可以選擇。
看到了一種編程模型:線程綁定( thread-bound )
Session 在第一次被使用,或第一次調(diào)用 getCurrentSession() 的時候,其生命周期就開始了,然后它被 Hibernate 綁定到當(dāng)前線程。當(dāng)事務(wù)運行結(jié)束的時候,不管是提交、回滾, Hibernate 都會把 Session 從當(dāng)前線程剝離,并且關(guān)閉它。
posted on 2006-10-19 18:28 白洋 閱讀(1679) 評論(1) 編輯 收藏 所屬分類: Hibernate 知識點滴