建立一個資料庫bbs,一張表user
持久化類和我們的資料庫的表是有對應關系的,故前提是,得有一張資料庫的表user二維表(至少1張)和對應的實體類user類,我在vo包(資料對象value object:頁面與頁面之間的傳遞值時儲存值的對象)建立:
同時它也是一個pojo類——pojo全稱是plain ordinary java object / plain old java object,中文可以翻譯成:普通java類,具有一部分getter/setter方法的那種類就可以稱作pojo類。
建立對象-關系映射的xml檔案,必須放在實體類對應的包(我的是vo)下,名字嚴格對應為:類名.hbm.xml
<class>元素用于指定類和表之間的映射,name屬性設定類名(包含路徑),table屬性設定表名,預設以類名作表名
id子元素設定持久化類的oid和表的主鍵的映射,id的子元素< generator>元素指定oid的生成器。
property子元素設定類的屬性和表的字段的映射
name – 對應類的屬性名稱
type – 指定屬性的類型
column – 指定表字段的名稱
not-null –指定屬性是否允許為空
順便把hibernate的主配置檔案hibernate.cfg.xml(需放在src根目錄下)補充好,千萬别忘了把之前對象關系映射配置檔案引入到主配置檔案内,mapping……
建立dao包,并通過hibernate api 編寫通路資料庫的代碼,這裡必須要知道hibernate的一些核心的類和接口。如下:
hibernate 架構的核心類和接口
sessionfactory:是一個核心的接口,相當于hibernate和資料庫連接配接的一個大管家,它緩存了hibernate的配置資訊和映射的中繼資料資訊,屬于重量級的,故執行個體化它的實作類隻需要執行個體化一次,且不能輕易的關閉,如果關閉了,和資料庫就斷開了,此外,連接配接不同的資料庫,需要建立不同的sessionfactory對象,而執行個體化該類,需要用到一個該接口的實作類——配置類configuration,用configuration的對象執行個體化之後,才能建立session的執行個體。
sessionfactory的建立,configuartion.buildsessionfactory()。
sessionfactory是線程安全的,可以安全的讓多個線程進行共享,一般整個應用隻有唯一的一個sessionfactory執行個體。
sessionfactory緩存
内置緩存,存儲hibernate配置資訊和映射中繼資料資訊,實體媒體是記憶體
外置緩存,是一個可配置的緩存插件,可以存放大量的資料庫資料的拷貝,實體媒體可以是記憶體或者是硬碟
configuration:是sessionfactory接口的實作類。
該實作類兩個功能
負責管理hibernate的運作的底層配置資訊,包括:資料庫的url、資料庫使用者名和密碼、jdbc驅動,資料庫dialect,資料庫連接配接池等。
生成sessionfactory的對象,建立的sessionfactory對象能可以建立session
使用的兩種方法
屬性檔案(hibernate.properties),調用代碼:configuration cfg = new configuration();
xml檔案(hibernate.cfg.xml),調用代碼:configuration cfg = new configuration().configure();
session:也是一個接口,繼承了sessionfactory,session是hibernate持久操作的基礎核心,可以簡單的了解為之前jdbc裡的connection對象。
session的建立(依靠sessionfactory,sessionfactory對象來自configuartion.buildsessionfactory();,而configuartion這個執行個體化對象來自new configuration().configure();),session session = sessionfactory.opensession();代表了一個資料庫的連接配接,有了該session連接配接,就可對資料庫進行操作(crud),故也叫session為持久化管理器。而對資料庫的操作,我們需要封裝到事務當中,也就是hibernate的transaction
session是一個輕量級對象,是非線程安全的,通常和一個資料庫事務綁定。
transaction:一個接口,它将應用代碼從底層的事務實作中抽象出來,是一個jdbc事務或一個jta事務,可以在配置檔案中指定,預設是jdbc事務。
調用代碼:transaction tx = session.begintransaction();
使用hibernate進行操作時,必須顯式的調用transaction(預設:autocommit=false)
類圖:
再介紹下query與criteria接口
query接口,允許程式員在資料庫上執行查詢并控制查詢如何執行,查詢語句使用hibernate的hql或本地資料庫的sql,調用代碼:query query = session.createquery(“from user”);
criteria接口,是傳統sql的對象化表示,調用代碼:criteria criteria = session.createcriteria(tuser.class);
結構如圖:
代碼如下:
view code
整個項目結構
運作結果正确,資料成功插入;hibernate: insert into user (username, password, userid) values (?, ?, ?)
小結:持久化類和關系資料庫的映射
說說pojo和javabean的差別?
前面簡單說了pojo是什麼——普通java類,具有一部分getter/setter方法的那種類就可以稱作pojo,理想地講,一個pojo是一個不受任何限制的java對象(除了java語言規範)。例如一個pojo不應該是
擴充預定的類
實作預定的接口
包含預定的标注,如 @javax.ejb.entity public class baz{ ...
但是javabean則比 pojo複雜很多,javabean 是可複用的元件,javabean 并沒有嚴格的規範,理論上講,任何一個 java 類都可以是一個 bean 。但通常情況下,由于 javabean 是被容器所建立(如 tomcat) 的,是以 javabean 應具有一個無參的構造器,另外,通常 javabean 還要實作 serializable 接口用于實作 bean 的持久性。javabean 是不能被跨程序通路的。
那麼為什麼需要javabean?
因為java欠缺屬性、事件、多重繼承功能。是以在java中實作一些面向對象程式設計的常見需求,隻能手寫大量膠水代碼。javabean正是編寫這套膠水代碼的慣用模式或約定。對它最簡單的了解是資料包,這個資料包裡包含了一些資訊(屬性),比如名稱,性别等,包含了可以給這些屬性指派和取值的方法(get和set方法)。通過執行個體化後的指派操作,可在别的地方通過get方法把值取出來。這就是javabean,或者叫vo。如果在方法中含有了一些邏輯,比如getname的時候,要給name前面加上公司名稱……通常情況下,就叫做bo。而資料庫的表對應的持久化類一般叫pojo,這些東西都可以統稱為javabean,核心就是指派(set)和取值(get)。如果需要用到讀寫硬碟的緩存,需要網絡傳輸……則需要序列化這個javabean.實作serializable接口。
《spring in action》書裡詳細說到:
javabean :是公共java類,但是為了編輯工具識别,需要滿足至少三個條件:
有一個public預設構造器(例如無參構造器)
屬性使用public 的get,set方法通路,也就是說屬性設定成private,同時get,set方法與屬性名的大小也需要對應。例如屬性name,get方法就要寫成,public string getname(){},n大寫。
需要序列化。這個是架構,工具跨平台反映狀态必須的
重寫hashcode和equals方法(可選)……
……
這裡插播一下ejb的概念:
在java1996年釋出,當年12月即釋出了java bean1.00-a,有什麼用呢?這樣java對象可以重用和統一操作,例如原來說的awt元件(例如一個點point(x,y),ide可以自動展現它的狀态量x,y給你配置,).這就是javabean的來曆,
在實際企業開發中,需要實作事務,安全,分布式,javabean就不好用了.sun公司就開始往上面堆功能,堆成了一個加強版的javabean,這就是ejb的來曆;
ejb功能強大,但是太重了,很多時候都是殺雞用牛刀!此時程式設計技術有了一定進展,就是di(依賴注入),aop(面向切面),開發者現在可以通過很簡單的javabean也能完成ejb的事情了。
spring誕生了.
總的來說,在企業開發中,需要可伸縮的性能和事務、安全機制,這樣能保證企業系統平滑發展,而不是發展到一種規模重新更換一套軟體系統。 然後就提高了協定要求,就出現了enterprise bean。ejb在javabean基礎上又提了一些要求,當然更複雜了。
pojo :有個叫josh mackenzie人覺得,ejb太複雜了,完全沒必要每次都用,是以發明了個pojo,pojo是普通的javabean,什麼是普通,就是和ejb對應的。總之,差別就是,你先判斷是否滿足javabean的條件,然後如果再實作一些要求,滿足ejb條件就是ejb,否則就是pojo。
《think in java》一書在最後一章gui裡面講到:javabean最初是為java gui的可視化程式設計實作的,拖動ide建構工具建立一個gui 元件(如多選框)其實是工具給你建立java類,并把類的屬性暴露出來給你修改調整,将事件監聽器暴露出來。
辛苦的勞動,轉載請注明出處,謝謝……http://www.cnblogs.com/kubixuesheng/p/5177238.html