Hibernate3-1環(huán)境及基礎(chǔ)配置ppt課件_第1頁
Hibernate3-1環(huán)境及基礎(chǔ)配置ppt課件_第2頁
Hibernate3-1環(huán)境及基礎(chǔ)配置ppt課件_第3頁
Hibernate3-1環(huán)境及基礎(chǔ)配置ppt課件_第4頁
Hibernate3-1環(huán)境及基礎(chǔ)配置ppt課件_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、J2EE企業(yè)級運用開發(fā)Hibernate 框架義務(wù)1 開發(fā)第一個Hibernate運用本義務(wù)主要內(nèi)容數(shù)據(jù)耐久化與ORMHibernate框架根底搭建Hibernate的開發(fā)環(huán)境Hibernate的根底配置Hibernate的生命周期Hibernate的常用API知識目的了解數(shù)據(jù)的耐久化與ORM了解Hibernate3的任務(wù)原理掌握Hibernate3進(jìn)展數(shù)據(jù)耐久化的運用掌握Hibernate3的配置和映射了解Hibernate的生命周期才干目的能了解Hibernate的作用能開發(fā)第一個Hibernate程序 能在Web開發(fā)中綜合struts和Hibernate能運用Hibernate的相關(guān)類實

2、現(xiàn)數(shù)據(jù)耐久化操作一、耐久化與ORM耐久化Persistence,即把數(shù)據(jù)如內(nèi)存中的對象保管到可永久保管的存儲設(shè)備中如磁盤。耐久化的主要運用是將內(nèi)存中的數(shù)據(jù)存儲在關(guān)系型的數(shù)據(jù)庫中,當(dāng)然也可以存儲在磁盤文件中、XML數(shù)據(jù)文件中等等。耐久層就是專門擔(dān)任耐久化任務(wù)的邏輯層,由它一致與數(shù)據(jù)庫層打交道耐久層包括一個業(yè)務(wù)領(lǐng)域?qū)嶓w的模型,在耐久層中封裝對數(shù)據(jù)庫訪問的細(xì)節(jié),向業(yè)務(wù)邏輯公開接口。耐久化與ORM面向?qū)ο蟪绦蛟O(shè)計言語與關(guān)系數(shù)據(jù)庫開展不同步時,需求一種中間處理方案,ORM Object/Relation Mapping 框架就是這樣的處理方案。ORM是一類框架的總稱,它概述了這類框架的根本特征:完成面向

3、對象的程序設(shè)計言語到關(guān)系數(shù)據(jù)庫的映射。將關(guān)系數(shù)據(jù)庫中數(shù)據(jù)用對象的方式表現(xiàn),并用面向?qū)ο蟮姆绞浇M織對象,實現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯。基于ORM框架完成映射后,既可利用面向?qū)ο蟪绦蛟O(shè)計言語的簡單易用性,又可利用關(guān)系數(shù)據(jù)庫的技術(shù)優(yōu)勢。耐久化與ORM常見ORM框架目前ORM框架的產(chǎn)品非常多,除了各大著名公司、組織的產(chǎn)品外,甚至,其他一些小團(tuán)隊也都有推出本人的ORM框架。目前流行的ORM框架有如下這些產(chǎn)品。傳統(tǒng)的Entity EJB, Hibernate, IBATIS, Oracle的TopLink, OJB, JPA(Java Persistence API) 二、Hibernate概述簡介Hibernat

4、e是目前最流行的開源的耐久層框架ORM框架,它是一個面向Java環(huán)境的對象/關(guān)系數(shù)據(jù)庫映射工具。Hibernate也是一個輕量級的O/R Mapping框架,建立面向?qū)ο蟮挠蚰P秃完P(guān)系數(shù)據(jù)模型之間的映射,是銜接java運用和數(shù)據(jù)庫的中間件。Hibernate對JDBC進(jìn)展封裝,擔(dān)任java對象的耐久化。真正實現(xiàn)了開發(fā)者采用面向?qū)ο蟮姆绞絹聿僮麝P(guān)系數(shù)據(jù)庫。Hibernate在分層構(gòu)造中處于耐久化層,封裝對數(shù)據(jù)庫的訪問細(xì)節(jié),使業(yè)務(wù)邏輯層更專注于實現(xiàn)業(yè)務(wù)邏輯。Hibernate概述優(yōu)點Hibernate能在眾多的ORM框架中脫穎而出,由于Hibernate與其他ORM框架對比具有如下優(yōu)勢:Hiber

5、nate對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的反復(fù)性代碼。 開源和免費的License,方便需求時研討源代碼、改寫源代碼、進(jìn)展功能定制。Hibernate的性能非常好,由于它是一個輕量級框架。映射的靈敏性很出色。它支持很多關(guān)系型數(shù)據(jù)庫,從一對一到多對多的各種復(fù)雜關(guān)系。 Hibernate是一個基于jdbc的主流耐久化框架,是一個優(yōu)秀的ORM實現(xiàn),它很大程度的簡化了dao層編碼任務(wù)。 Hibernate概述體系構(gòu)造在分層體系架構(gòu)中,Hibernate擔(dān)任運用程序與數(shù)據(jù)庫之間的數(shù)據(jù)交換,起ORM中間件的作用,使得運用程序經(jīng)過Hibernate的API就可以訪問數(shù)據(jù)庫。Hib

6、ernate運用數(shù)據(jù)庫和配置信息來為運用程序提供耐久化效力以及耐久的對象配置銜接相關(guān)信息配置對象和表的映射關(guān)系 Hibernate概述-對象耐久化概述Hibernate中間件:Hibernate不和特定的業(yè)務(wù)領(lǐng)域相關(guān),可以把恣意一個Java運用與數(shù)據(jù)庫系統(tǒng)銜接,可以了解為是一種中間件。運用1業(yè)務(wù)邏輯層運用2業(yè)務(wù)邏輯層運用3業(yè)務(wù)邏輯層耐久化層(hibernate)數(shù)據(jù)庫1數(shù)據(jù)庫2數(shù)據(jù)庫3耐久化層封裝了數(shù)據(jù)訪問的細(xì)節(jié),為業(yè)務(wù)邏輯層提供了面向?qū)ο蟮腁PI。完善的耐久化層應(yīng)該到達(dá)的目的:1.代碼重用性高,可完成一切的數(shù)據(jù)訪問操作。2.假設(shè)需求的話,可以支持多種數(shù)據(jù)庫平臺。3.具有相對獨立性,當(dāng)耐久化層

7、變化時,不會影響上層實現(xiàn)。public List getAllEmpl() List list = new ArrayList();/ ?con = new DBCon().getConn();String sql = select * from tb_empl;try pstmt = con.prepareStatement(sql);rs = pstmt.executeQuery();int id;String empl_id, empl_name, empl_depart, sex, intime, bz, interest, empl_pass1, prov, city;while (

8、rs.next() id = rs.getInt(1);empl_id = rs.getString(2);empl_name = rs.getString(3);empl_pass1 = rs.getString(4);sex = rs.getString(5);interest = rs.getString(6);empl_depart = rs.getString(7);prov = rs.getString(8);city = rs.getString(9);intime = rs.getString(10);bz = rs.getString(11);Empl e = new Emp

9、l();e.setId(id);e.setEmpl_id(empl_id);e.setEmpl_name(empl_name);e.setEmpl_pass1(empl_pass1);e.setSex(sex);e.setInterest(interest);e.setEmpl_depart(empl_depart);e.setProv(prov);e.setCity(city);e.setIntime(intime);e.setBz(bz);list.add(e); catch (SQLException e) / TODO Auto-generated catch blocke.print

10、StackTrace();return list;1.簡化開發(fā)過程2.業(yè)務(wù)邏輯與數(shù)據(jù)邏輯相分別業(yè)務(wù)人員不需求思索數(shù)據(jù)表的邏輯構(gòu)造3.數(shù)據(jù)訪問邏輯與物理數(shù)據(jù)庫的構(gòu)造相分別數(shù)據(jù)訪問邏輯的開發(fā)者不再關(guān)懷不同的物理數(shù)據(jù)庫的差別性JDBC查詢數(shù)據(jù),并添加數(shù)據(jù)到列表中。Session session=HibernateSessionFactory.getSession();Query query=session.createQuery(from tb_empl);List allempls=query.list();ORM三、Hibernate3的運用運用步驟在運用中運用Hibernate,首先必需進(jìn)展H

11、ibernate與數(shù)據(jù)庫驅(qū)動、銜接設(shè)置、ORM映射文件的創(chuàng)建等。運用Hibernate的開發(fā)步驟如下:設(shè)計:普通首先進(jìn)展領(lǐng)域?qū)ο蟮脑O(shè)計。由于在Hibernate中,我們的領(lǐng)域?qū)ο罂梢灾苯映淙文途没?。映射:定義Hibernate的映射文件,實現(xiàn)耐久化類和數(shù)據(jù)庫之間映射。運用:運用Hibernate提供的API,實現(xiàn)詳細(xì)的耐久化業(yè)務(wù)。第一個Hibernate程序的開發(fā)1加載包Hibernate并不依賴于任何效力器和框架,只需把Hibernate的jar包添加即可。方法:1.官網(wǎng)下載Hibernate包后加載必備包2. MyEclipse-Project Capabilities-add Hibe

12、rnate Capabilities 第一個Hibernate程序的開發(fā)2 創(chuàng)建數(shù)據(jù)庫及表創(chuàng)建數(shù)據(jù)庫并創(chuàng)建數(shù)據(jù)表person,包括屬性:id,name,age.其中:主鍵id字段設(shè)為自動增長,對應(yīng)于實體類中的id屬性。第一個Hibernate程序的開發(fā)3 創(chuàng)建耐久化類在Hibernate 中是直接運用POJO來作為耐久化類的。耐久化類符合JavaBean的規(guī)范,包含:屬性(普通有一個id,作為OID)、無參構(gòu)造方法、getter和setter方法。在Web編程中,為了在會話中對Java對象進(jìn)展耐久化,普通要實現(xiàn)Serializable接口。例如:定義耐久化類Person第一個Hibernate

13、程序的開發(fā)4 編寫配置文件Hibernate的中心配置文件是hibernate.cfg.xml,也可以為perties。在此文件中配置了用于銜接數(shù)據(jù)庫的信息和一些全局配置, 普通直接放在src目錄下??稍贛yEclipse下創(chuàng)建相應(yīng)的數(shù)據(jù)庫銜接,添加Hibernate功能包時,直接運用銜接,自動生成配置文件。例如:創(chuàng)建配置文件hibernate.cfg.xml com.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserverlocalhost:1433;DatabaseName=pubs sa 1

14、23 org.hibernate.dialect.SQLServerDialect mysqlserver 第一個Hibernate程序的開發(fā)5 編寫映射文件映射文件實現(xiàn)數(shù)據(jù)庫字段與耐久化類屬性匹配。在hibernate中習(xí)慣的命名為“*.hbm.xml文件,普通映射文件與其對應(yīng)的耐久化類在同一級目錄中。可以在MyEclipse中用反向工程生成。例如:創(chuàng)建映射文件person.hbm.xml 主鍵映射類-表映射字段映射第一個Hibernate程序的開發(fā)6 編寫測試程序Hibernate可以運用于Java程序或Web程序 。先初始化Hibernate,創(chuàng)建一個SessionFactory實例;接

15、下來每次執(zhí)行數(shù)據(jù)庫事務(wù)時,先從SessionFactory中獲獲得一個Session實例,再經(jīng)過它來保管、更新、刪除、加載或查詢Java對象。例如:創(chuàng)建Java測試程序 ,將一個對象的信息保管到數(shù)據(jù)庫中。例如:測試數(shù)據(jù)保管public class HibernateTest public static void main(String args) Person person=new Person();person.setName(zhang);person.setAge(20);Session sess = HibernateSessionFactory.getSession();Transa

16、ction trans = sess.beginTransaction();sess.save(person);transmit();System.out.println(“祝賀,第一個Hibernate程序運轉(zhuǎn)勝利,記錄已插入數(shù)據(jù)表中!);sess.close();Configuration config = new Configuration(); config.configure();/ 配置文件名不是hibernate.cfg.xml時將文件名傳入 SessionFactory sessionFactory = config.buildSessionFactory();/ 相當(dāng)于JDB

17、C的注冊驅(qū)動 Session session = sessionFactory.openSession();/ 相當(dāng)于JDBC的getConnection Transaction tx = session.beginTransaction();/ Hibernate操作必需啟動事務(wù) Person person=new Person(); / 創(chuàng)建耐久化對象 person.setName(zhang); person.setAge(20); session.save(person);/ 保管對象 txmit();/ 耐久化到數(shù)據(jù)庫中 Hibernate運轉(zhuǎn)過程Hibernate的運轉(zhuǎn)過程如下:1

18、、運用程序先調(diào)用Configuration類,該類讀取Hibernate配置文件及映射文件中的信息,2、并用這些信息生成一個SessionFactory對象,3、然后從SessionFactory對象生成一個Session對象,4、并用Session對象生成Transaction對象; A、可經(jīng)過Session對象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法對PO進(jìn)展加載、保管、更新、刪除、等操作; B、在查詢的情況下,可經(jīng)過Session對象生成一個Query對象,然后利用Query對象執(zhí)行查詢操作;假設(shè)沒有異常,Trans

19、action對象將提交這些操作到數(shù)據(jù)庫中。Hibernate運轉(zhuǎn)過程運用程序 Configuration SessionFactory Session Query 映射文件.hbm.xmlTransaction配置文件hibernate.cfg.xml 回滾 提交 數(shù)據(jù)庫 查詢異常正常實際練習(xí)運用Hibernate實現(xiàn)用戶數(shù)據(jù)的保管、刪除步驟一手動方式1創(chuàng)建用戶數(shù)據(jù)表2創(chuàng)建相應(yīng)的用戶實體類3配置hibernate環(huán)境 (加載必備包)4創(chuàng)建hibernate.cfg.xml配置文件(普通放src下)5創(chuàng)建映射文件*.hbm.xml(和實體類一個途徑)6測試類步驟二反向工程四、Hibernate配

20、置和映射配置由于Hibernate是為了能在各種不同環(huán)境下任務(wù)而設(shè)計的,因此存在著大量的配置參數(shù)。Hibernate同時支持XML格式和properties格式的配置文件,假設(shè)Hibernate配置文件為XML格式,文件名普通默以為“hibernate.cfg.xml;假設(shè)為properties格式,那么默以為“perties。對于Web 運用而言,配置文件應(yīng)放置在效力器的WEB-INFclasses 目錄下,配置文件放在src目錄下,自動部署。 jdbc:microsoft:sqlserverlocalhost:1433;Database=hibdb com.mic

21、rosoft.jdbc.sqlserver.SQLServerDriver sa 123 org.hibernate.dialect.SQLServerDialect true 屬性名用途屬性值hibernate.connection.driver_class設(shè)置數(shù)據(jù)庫的驅(qū)動類驅(qū)動類名hibernate.connection.url設(shè)置連接數(shù)據(jù)庫的URLURLhibernate.connection.username設(shè)置連接數(shù)據(jù)庫的用戶名用戶名hibernate.connection.password設(shè)置連接數(shù)據(jù)庫的密碼密碼hibernate.connection.pool_size設(shè)置連接池

22、的最大容量整型數(shù)據(jù)hibernate.connection.datasource設(shè)置數(shù)據(jù)源的JNDI名字JNDI名hibernate.dialect設(shè)置Hibernate的數(shù)據(jù)庫方言方言類名hibernate.show_sql 是否把Hibernate運行時的SQL語句輸出true或falsehibernate.format_sql 是否格式化輸出的SQL語句true或falsehibernate.default_catalog在生成的SQL語句中,將默認(rèn)的catalog加到表名上catalog值hibernate.connection.auotocommit設(shè)置是否啟用數(shù)據(jù)庫事務(wù)的自動提交t

23、rue或者falsehibernate.max_fetch_depth為單向關(guān)聯(lián)的一對一和多對一的外連接抓?。╫uter join fetch)設(shè)置最大深度,數(shù)值為0將關(guān)閉默認(rèn)的外連接抓取推薦數(shù)值為03 hibernate.default_batch_fetch_size設(shè)置關(guān)聯(lián)的批量抓取數(shù)量建議值4、8、16hibernate.default_entity_mode指定默認(rèn)的持久化實體表現(xiàn)形式dynamic-map、pojo或dom4jhibernate.order_updates 強制Hibernate按照被更新數(shù)據(jù)的主鍵,為SQL更新排序,可以減少在高并發(fā)系統(tǒng)中事務(wù)的死鎖幾率true或f

24、alsehibernate.generate_statistics 是否激活收集性能調(diào)節(jié)的統(tǒng)計數(shù)據(jù) true或falsehibernate.order_updates利用主鍵值對將要更新的字段進(jìn)行排序true或falseHibernate.user_indentifer_rollback若設(shè)置為true,如果表中的所有數(shù)據(jù)被刪除,主鍵標(biāo)識符將被重置true或falsehibernate.use_sql_comments 是否生成有助于調(diào)試的注釋信息true或false四、Hibernate配置和映射映射概述對象關(guān)系映射ORM是一種為理處理面向?qū)ο笈c面向關(guān)系數(shù)據(jù)庫互不匹配景象的技術(shù),即ORM是經(jīng)

25、過運用描畫對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將Java程序中的對象自動耐久化到關(guān)系數(shù)據(jù)庫中。Hibernate映射主要是經(jīng)過對象關(guān)系映射文件實現(xiàn),通常用XML文檔來定義。對象關(guān)系映射文件把數(shù)據(jù)庫中的實體(普通為二維表)映射到面向?qū)ο笾械膶嶓w對象,把數(shù)據(jù)庫中多個表之間的相互關(guān)系也反映到映射好的類中。四、Hibernate配置和映射映射構(gòu)造映射文件以耐久化類為根底,將耐久化類中出現(xiàn)的屬性在映射文件中表達(dá)出來。實體映射是類與表之間的聯(lián)絡(luò)紐帶,實體映射的中心內(nèi)容是實體類與數(shù)據(jù)表之間的映射定義。Hibernate中,實體關(guān)系映射主要包括三個部分:類表映射主鍵映射 字段映射 四、Hibernate配置和映射元

26、素是Hibernate映射文件的根元素。1.類表映射 配置代碼如下:其中,class表示類和數(shù)據(jù)庫中的表的映射關(guān)系;name屬性指定類的稱號,這里需求給出完好的類名;table屬性指定與類映射的表名。經(jīng)過映射,類對應(yīng)于數(shù)據(jù)庫中的表,類的實例對應(yīng)于表中的記錄。四、Hibernate配置和映射關(guān)系數(shù)據(jù)庫中依托主鍵來區(qū)分不同的記錄,被映射的類必需定義對應(yīng)數(shù)據(jù)庫主鍵字段。2. 主鍵映射 其中,id表示主鍵映射;name屬性指定類中哪個屬性作為OID;type屬性指定Hiberante的映射類型;column屬性表示數(shù)據(jù)表中主鍵字段的名字。 指定了主鍵的生成方式,class屬性指定主鍵的生成方式四、Hi

27、bernate配置和映射OIDHibernate運用對象標(biāo)識符(OID)來建立內(nèi)存中的對象和表中記錄的對應(yīng)關(guān)系,它和表的主鍵對應(yīng)為了保證OID的獨一性和不可變性,應(yīng)該讓Hibernate而不是運用程序來為OID賦值,數(shù)據(jù)庫表的主鍵值也是可由Hibernate生成.四、Hibernate配置和映射內(nèi)置生成器可以借助Hibernate來自動生成一個OID。運用的是元素,class屬性設(shè)定標(biāo)識符生成器的類名,可寫它的完好類名:org.hibernate.id.IncrementGenerator,普通用其簡稱:increment。關(guān)系數(shù)據(jù)庫中依托主鍵來區(qū)分不同的記錄,主鍵有自然主鍵與代理主鍵:自然主

28、鍵指充任主鍵的字段本身具有一定的含義,是構(gòu)成記錄的組成部分,如學(xué)生的學(xué)號代理主鍵指充任主鍵的字段本身不具有業(yè)務(wù)含義,只起主鍵主鍵作用,如自動增長類型的ID號等。在Hibernate運用方案中,引薦運用代理主鍵。四、Hibernate配置和映射內(nèi)置生成器increment: 當(dāng)向數(shù)據(jù)庫中插入新記錄時,主鍵自動增1,與底層數(shù)據(jù)庫無關(guān),大部分?jǐn)?shù)據(jù)庫都支持increment生成方式。identity: 運用數(shù)據(jù)庫提供的主鍵生成機(jī)制,自動為主鍵賦值。與底層數(shù)據(jù)庫相關(guān),不便于不同數(shù)據(jù)庫之間的移植,數(shù)據(jù)庫必需支持自動增長字段類型sequence: Hibernate根據(jù)底層數(shù)據(jù)庫序列來生成標(biāo)識符,前提是條件

29、是底層數(shù)據(jù)庫支持序列(如Oracle)。hilo: Hibernate根據(jù)high/low算法來生成標(biāo)識符,需求一個表來保管額外的主鍵信息,這樣生成的標(biāo)識符只在特定的數(shù)據(jù)庫中是獨一的。native: 由Hibernate根據(jù)不同的數(shù)據(jù)庫選擇主鍵的生成方式,如identity、sequence或hilo,與底層數(shù)據(jù)庫無關(guān),便于不同數(shù)據(jù)庫之間的移植。uuid.hex: Hibernate采用128位的UUID算法來生成標(biāo)識符,UUID算法可以在網(wǎng)絡(luò)環(huán)境中生成獨一的字符串標(biāo)識符。uuid.string: 運用UUID算法來生成標(biāo)識符,UUID被編碼為一個16個字符長的恣意ASCII組成的字符串。as

30、signed: 由Java運用程序擔(dān)任為對象生成標(biāo)識符,主鍵值完全由運用程序擔(dān)任,需在保管數(shù)據(jù)前完成。 四、Hibernate配置和映射內(nèi)置生成器選用Hibernate內(nèi)置的標(biāo)識生成器時,應(yīng)根據(jù)所選用的數(shù)據(jù)庫產(chǎn)品而定。假設(shè)數(shù)據(jù)庫產(chǎn)品為MySQL或MS SQL Server,那么優(yōu)先思索identity生成器;假設(shè)是Oracle那么可優(yōu)先思索sequence生成器;假想象提高運用的可移植性,開發(fā)跨平臺的運用那么可選用native生成器。四、Hibernate配置和映射字段映射將映射類型與數(shù)據(jù)庫表的字段相關(guān),普通包含對象的屬性名、數(shù)據(jù)表的字段名和數(shù)據(jù)類型。3.字段映射 其中,property表示屬

31、性設(shè)置,name表示類中屬性名,將映射到指定的數(shù)據(jù)表字段;type表示映射的數(shù)據(jù)類型;column表示數(shù)據(jù)表字段,name表示數(shù)據(jù)表中對應(yīng)于類屬性的字段名。實際練習(xí)創(chuàng)建機(jī)構(gòu)(Branch)實體,實現(xiàn)機(jī)構(gòu)信息的耐久化,正確配置實體映射文件(Branch.hbm.xml)留意:主鍵的生成戰(zhàn)略思索:對應(yīng)于實體屬性不同類型,type屬性值該設(shè)為什么?四、Hibernate配置和映射關(guān)于type屬性可以是如下幾種:1Hibernate根本類型名比如:integer, string, character, date, timestamp, float, binary, serializable, obje

32、ct, blob。2一個Java類的名字,這個類屬于一種默許根底類型比如: int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob。3一個可以序列化的Java類的名字。4一個自定義類型的類的名字。比如:com.test.type.MyCustomType。四、Hibernate配置和映射類型關(guān)系Hibernate的內(nèi)置類型通常運用和Java類型一樣的名字,它可以把Java根本類型、Java時間和日期類型、Java大對象類型及JDK常用的Java類型映射到相應(yīng)的規(guī)范SQL類型。Jav

33、a運用經(jīng)過Hibernate訪問數(shù)據(jù)庫,而Hibernate又經(jīng)過JDBC驅(qū)動程序訪數(shù)據(jù)庫,JDBC對底層數(shù)據(jù)庫SQL類型進(jìn)展封裝,向上提供規(guī)范的SQL類型接口,這樣Hibernate就可以根據(jù)底層數(shù)據(jù)庫運用的SQL方言,把規(guī)范SQL類型翻譯成底成數(shù)據(jù)庫類型。四、Hibernate配置和映射類型映射關(guān)系下表列出了Hibernate映射類型、對應(yīng)的JAVA根本類型(包括它們的包裝類)和以及對應(yīng)的規(guī)范SQL類型。四、Hibernate配置和映射類型映射關(guān)系在Java中,代表時間和日志的類型包括:java.util.Date和java.util.Calendar。此外在JDBC API中還提供了三個

34、擴(kuò)展java.util.Date類的之類:java.sql.Date、java.sql.Time和java.sql.Timestamp,這三個類分別和規(guī)范的SQL類型中的DATA、TIME、TIMESTAMP類型對應(yīng)在JDBC API中提供了java.sql.Clob和java.sql.Blob類型,它們分別和規(guī)范SQL中的CLOB和BLOB類型對應(yīng)。實際練習(xí)創(chuàng)建員工Employee實體,創(chuàng)建其映射文件,配置適宜的類型對應(yīng)關(guān)系,實現(xiàn)員工信息的根本管理留意:員工屬性的類型匹配。五、耐久化對象與生命周期Hibernate中有三種形狀,對其生命周期形狀有了深化了解,才干更好的了解Hibernate的

35、運轉(zhuǎn)機(jī)制。對于需求耐久化的Java對象,在其生命周期中普通有三種形狀:暫時形狀、耐久化形狀、游離形狀,這三種形狀之間可以相互轉(zhuǎn)化。一個耐久化類的實例能夠處于三種不同形狀中的某一種。這三種形狀的定義那么與所謂的耐久化上下文(persistence context)有關(guān)。Hibernate的Session對象就是這個所謂的耐久化上下文。五、耐久化對象與生命周期暫時形狀普通是用new創(chuàng)建的對象,沒有進(jìn)展耐久化,還未處于Session中,此時的對象叫暫時對象;耐久化形狀是對象曾經(jīng)參與到了Session緩存中,如經(jīng)過hibernate語句保管的對象,此時的對象叫做耐久化對象;游離形狀是耐久化對象脫離了S

36、ession對象,如Session緩存被清空的對象,雖然曾經(jīng)耐久化了,但是不在Session中,此時的對象叫做游離對象。五、耐久化對象與生命周期六、Hibernate中心類概述運用Hibernate中心接口與類不僅可以存儲和獲得耐久對象,還可以進(jìn)展事務(wù)控制。Hibernate的中心接口一共有5個,分別為:SessionFactorySessionTransactionQueryConfiguration 獲取找到hibernate.cfg.xml 鏈接 六、 Hibernate中心類Configuration類Configuration類的作用是對Hibernate進(jìn)展配置,以及對它進(jìn)展啟動。

37、Configuration可以完成以下幾方面的任務(wù)。1加載配置文件。在Hibernate的啟動過程中,Configuration類的實例首先定位映射文檔的位置,讀取這些配置,然后創(chuàng)建一個SessionFactory對象,2動態(tài)添加映射文件。還可以利用Configuration類在程序中添加XML映射定義文件。3也可以經(jīng)過Configuration指定配置屬性在Hibernate的啟動過程中,Configuration類的實例首先定位缺省XML配置文件hibernate.cfg.xml,并讀取關(guān)的配置工程,然后創(chuàng)建出一個SessionFactory對象。六、 Hibernate中心類Sessio

38、nFactory類這里用到了一個設(shè)計方式工廠方式,用戶程序從工廠類SessionFactory中獲得Session的實例。SessionFactory不是輕量級的。它的設(shè)計者的意圖是讓它能在整個運用中共享。典型地來說,一個工程通常只需求一個SessionFactory就夠了,但是當(dāng)工程要操作多個數(shù)據(jù)庫時,必需為每個數(shù)據(jù)庫指定一個SessionFactory。SessionFactory在Hibernate中實踐起到了一個緩沖區(qū)的作用,它緩沖了Hibernate自動生成的SQL語句和一些其它的映射數(shù)據(jù),還緩沖了一些未來有能夠反復(fù)利用的數(shù)據(jù)。獲?。篠essionFactory sessionFac

39、tory = config.buildSessionFactory();六、 Hibernate中心類Session類Session是耐久層操作的根底,相當(dāng)于JDBC中的Connection。在Hibernate中,實例化的Session是一個輕量級的類,創(chuàng)建和銷毀它都不會占用很多資源。通常將每一個Session實例和一個數(shù)據(jù)庫事務(wù)綁定,也就是說,每執(zhí)行一個數(shù)據(jù)庫事務(wù)操作,都應(yīng)該先創(chuàng)建一個新的Session實例。獲?。篠ession session = sessionFactory.openSession();六、 Hibernate中心類Session類對于數(shù)據(jù)操作通常會是CRUD,Sess

40、ion接口中提供了的save、load、delete、update等方法完成耐久層操作。save (Object object)首先為給定的自在形狀Transient的對象根據(jù)配置生成一個標(biāo)識并賦值,然后將其耐久化。load (Class theClass, Serializable id)在符合條件的實例存在的情況下,根據(jù)給定的實體類和標(biāo)識前往耐久化形狀的實例。get (Class theClass, Serializable id)delete (Object object)從數(shù)據(jù)庫中移除耐久化persistent對象的實例。update (Object object)根據(jù)給定的detac

41、hed游離形狀對象實例的標(biāo)識更新對應(yīng)的耐久化實例。六、 Hibernate中心類Session類Session.save()方法用于實體對象的耐久化保管,也就是說當(dāng)執(zhí)行session.save()方法時會生成對應(yīng)的insert SQL語句,完成數(shù)據(jù)的保管。代碼:Person user=new Person();user.setName(“zx);/開場一個事務(wù)Transaction tx=session.beginTransaction();session.save(user);session.flush();/提交txmit();session.close();/封鎖事務(wù)tx.close六、 Hibernate中心類Session類delete()方法用于從數(shù)據(jù)庫中刪除一個實體所對應(yīng)的數(shù)據(jù),假設(shè)傳入的對象是耐久化對象,那么當(dāng)清理緩存時,就會執(zhí)行delete操作。假設(shè)傳入的是脫管對象,那么首先會使該對象與session相關(guān)聯(lián),然后當(dāng)清理緩存時,再執(zhí)行delete操作。代碼如下:Session session=sessionFactory()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論