資源描述:
《Hibernate單一實體映射》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、映射&狀態(tài)管理重點hibernate:對象和關(guān)系轉(zhuǎn)化的API對象轉(zhuǎn)數(shù)據(jù)庫,數(shù)據(jù)庫轉(zhuǎn)對象對象持久化:將內(nèi)存中的對象狀態(tài)存在的數(shù)據(jù)轉(zhuǎn)存到外部持久設(shè)備上.并且適當?shù)臅r候可以將持久設(shè)備(硬盤光盤等)中的數(shù)據(jù)恢復(fù)到內(nèi)存對象狀態(tài)的數(shù)據(jù).為什么用對象持久化?物理原因:1.內(nèi)存不能持久化2.內(nèi)存容量有限業(yè)務(wù)原因:3.信息共享(流動)4.管理(安全,有效,可以設(shè)置權(quán)限)5.大規(guī)模檢索所以對象持久化是必須的怎樣實施對象持久化?1.對象序列化,實現(xiàn)Serializable接口(針對個別對象,結(jié)果是本地二進制文件,需要恢復(fù)后才能讀取,不能檢索,不適合存取序列化海量數(shù)據(jù),只能在物理上有作用,用于少量的短時間的)
2、2.放數(shù)據(jù)庫中(物理業(yè)務(wù)都可以)所以企業(yè)級對象持久化使用數(shù)據(jù)庫.怎樣使用數(shù)據(jù)庫進行對象持久化?歷史發(fā)展過程:1.JDBC優(yōu)點:1.功能完備,最底層的(都是基于這個接口)2.理論上效率最高3.接口粒度細缺點:1.代碼量大2.開發(fā)難度大(關(guān)聯(lián)太多,開發(fā)會的人少)2.EJB的實體bean2.X優(yōu)點:封裝了JDBC缺點:采取了重量級的解決方案,捆綁銷售(1.成本高2.維護工作量大3.在EJB中實體最弱4.API更復(fù)雜5.依賴服務(wù)器,所以不能在服務(wù)器之外進行測試)3.輕量級的ORM框架(hibernate)輕量級:不需要服務(wù)器,作為一個單一功能的類庫優(yōu)點:1.專業(yè)2.不需要依賴服務(wù)器,測試調(diào)試方
3、便3.由于只是一個類庫,功能是可以修改的4.擁有成本低5.封裝了JDBC,提供了簡單的API缺點:功能完備性低(批量更新方面)Hibernate工作原理:封裝JDBC,完成對象持久化見圖開發(fā)步驟:0.開發(fā)環(huán)境1.先設(shè)計持久類2.映射文件3.schema數(shù)據(jù)庫表結(jié)構(gòu)4.應(yīng)用程序其他部分測試類Test(hibernateAPI)持久類:1.要有一個唯一標識符oid,要存儲到數(shù)據(jù)庫,對應(yīng)要有主鍵.而且還要是中性的(增刪改查都需要主鍵,各個主鍵怎么產(chǎn)生不統(tǒng)一,所以要用hibernate產(chǎn)生一個oid,作為表主鍵,負責維護)2.空的構(gòu)造方法要用x=newx();x.setm();來使用,不能使用
4、有參3.使用set/get方法hibernateAPI:session的save()/delete()/update()/create()環(huán)境1.類庫導入Eclipse工程中a.類庫***導入hibernate庫文件***1、在eclipse中建立一個java工程,如:hbn2、在工程hbn的屬性--BuildPath中選擇AddLibraries3、在AddLibraries窗口中選擇UserLibrary點next按鈕4、在UserLibrary窗口中點UserLibraries...按鈕5、在UserLibraries窗口中,點new按鈕6、在Newuserlibrary窗口中,
5、填寫一個Userlibaryname(如:hbnlib,注意不要選擇Systemlibary復(fù)選框),點OK按鈕回到UserLiberies窗口7、在UserLiberaries窗口中選擇剛剛創(chuàng)建的hbnlib,點Addjars按鈕8、在打開的文件選擇窗口中找到解壓好的hibernate的庫文件,全部選中,點"打開"按鈕,返回UserLibraries窗口9、在UserLibraries窗口中點OK按鈕,返回UserLibrary窗口;再點Finish按鈕,結(jié)束操作2.xml映射(類表)配置(DB連接信息)映射文件編碼規(guī)范XXX.hbm.xmla.一個映射文件映射一個持久類(類對應(yīng)表屬
6、性對應(yīng)字段)b.映射文件名稱與持久類名稱保持一致AccountAccount.hbm.xmlc.映射文件與其映射的持久類放在同一個包路徑中主鍵oid的生成采用高低位算法,高位由私有計數(shù)器生成,低位由共有計數(shù)器生成publicclassTestacc{publicstaticvoidmain(String[]args){Accountacc=newAccount("zxm316733855",1000.0);//Configurationcfg=newConfiguration();//cfg.configure();//讀配置文件,相當于加載驅(qū)動//沒有返回值為void的,可以返回調(diào)用
7、對象的引用this,相當于..Configurationcfg=newConfiguration().configure();SessionFactorysf=cfg.buildSessionFactory();//取出session工廠//SeesionFactory是重量級對象,并且是線程安全的,可以多線程//一個應(yīng)用程序一個SessionFactory就可以,應(yīng)用程序結(jié)束要關(guān)閉Sessions=sf.openSession();//造出s