Java EE程序設計教程-Hibernate基礎(chǔ)_第1頁
Java EE程序設計教程-Hibernate基礎(chǔ)_第2頁
Java EE程序設計教程-Hibernate基礎(chǔ)_第3頁
Java EE程序設計教程-Hibernate基礎(chǔ)_第4頁
Java EE程序設計教程-Hibernate基礎(chǔ)_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Hibernate基礎(chǔ)Web應用開發(fā)技術(shù)(JavaEE)學習目標首要目標學習并掌握Hibernate的體系結(jié)構(gòu);理解掌握Hibernate的配置文件;掌握Hibernate中的持久化類;掌握Hibernate關(guān)系映射;在MyEclipse中熟練使用Hibernate次要目標理解ORM基本概念本章提綱5.1ORM基本概念5.2Hibernate的體系結(jié)構(gòu)5.3HibernateAPI簡介5.4Hibernate的配置文件5.5Hibernate中的持久化類5.6Hibernate的對象—關(guān)系映射文件5.7Hibernate關(guān)系映射5.8通過HibernateAPI操縱數(shù)據(jù)庫5.9在MyEclipse中使用Hibernate5.1ORM基本概念ORM(ObjectRelationalMapping)對象關(guān)系映射用于實現(xiàn)面向?qū)ο缶幊陶Z言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換,主要功能是完成對象持久化并封裝數(shù)據(jù)訪問的細節(jié)。目前應用系統(tǒng)開發(fā)中大多采用了MVC體系結(jié)構(gòu),將系統(tǒng)的邏輯實現(xiàn)與顯示界面分離。為了提高系統(tǒng)開發(fā)效率,降低開發(fā)成本和難度,更多的系統(tǒng)開發(fā)人員將業(yè)務邏輯層分離出一個單獨的持久層,進行數(shù)據(jù)的持久化操作,圖5-2MVC結(jié)構(gòu)模型

圖5-3持久化結(jié)構(gòu)模型5.1.1ORM框架簡介APACHEOJBHibernateMyBATISEclipseLinkLINQToSQL(C#)EJBJPA5.1.2ORM中的映射關(guān)系對象關(guān)系映射(ORM)的目的就是在對象和關(guān)系模型之間建立一個中間橋梁,完成對象和關(guān)系模型的透明映射和無縫交互,提供基于關(guān)系型數(shù)據(jù)庫的面向?qū)ο蟛僮鳌RM將對象模型中的類和關(guān)系數(shù)據(jù)庫中的表映射起來,開發(fā)人員可以直接使用對象來操作數(shù)據(jù)庫,實現(xiàn)透明的數(shù)據(jù)持久化操作圖5-4ORM映射關(guān)系5.1.2ORM中的映射關(guān)系一個完整的對象關(guān)系映射框架,應該具備以下四個方面:一個元數(shù)據(jù)映射規(guī)范。負責持久化類、類屬性和數(shù)據(jù)庫表、字段的映射,實現(xiàn)對象和關(guān)系的語義連接。一組對象操作接口。用于完成數(shù)據(jù)的增加、刪除、修改和更新等操作。一種面向?qū)ο蟮牟樵冋Z言。該語言能理解繼承、多態(tài)和關(guān)聯(lián)等面向?qū)ο筇匦?,實現(xiàn)基于對象的查詢,并在對象之間導航。一系列與數(shù)據(jù)庫相關(guān)的技術(shù)實現(xiàn)。保證系統(tǒng)的完整性并提高系統(tǒng)的可用性和可擴展性。5.2Hibernate的體系結(jié)構(gòu)Hibernate獨立于特定的關(guān)系數(shù)據(jù)庫,使用映射文件實現(xiàn)持久化類和數(shù)據(jù)庫表的映射關(guān)系。在映射文件中,將持久化對象的屬性與關(guān)系數(shù)據(jù)庫表的字段對應起來,通過對象的操作完成數(shù)據(jù)庫表的增加、刪除、查詢、修改操作。Hibernate主要包括三個組件:連接管理組件事務管理組件對象/關(guān)系映射組件5.2Hibernate的體系結(jié)構(gòu)圖5-2Hibernate體系結(jié)構(gòu)5.2Hibernate的體系結(jié)構(gòu)SessionFactorySessionFactory中保存了對應當前數(shù)據(jù)庫配置的所有映射關(guān)系,它是將某個數(shù)據(jù)庫的所有映射關(guān)系經(jīng)過編譯后保存在內(nèi)存中。SessionSession是Hibernate進行持久化操作的基礎(chǔ),所有持久化操作都是在Session的基礎(chǔ)上完成的,相當于JDBC中的Connection對象,它包含了與數(shù)據(jù)庫建立的連接對象。同時也是Transaction的工廠。5.2Hibernate的體系結(jié)構(gòu)Transaction(事務)Transaction是一個單線程、短生命周期的對象,應用程序用Transaction來表示一批任務的原子操作。ConnectionProviderConnectionProvider用于生成與數(shù)據(jù)庫建立連接的JDBC對象,同時,它還將作為數(shù)據(jù)庫連接的緩沖池。TransactionFactoryTransactionFactory是生成Transaction對象的工廠,通過TransactionFactory實現(xiàn)了對事務的封裝,使其具體的實現(xiàn)方法與應用程序無關(guān)。5.3HibernateAPI簡介圖5-6Hibernate核心接口類框圖Configuration接口Configuration是Hibernate的入口,其作用是讀取配置文件并創(chuàng)建SessionFactory對象。為了能創(chuàng)建一個SessionFactory對象,必須在Hibernate初始化時創(chuàng)建一個Configuration類的實例。也就是說Configuration對象只存在于系統(tǒng)的初始化階段,之后所有的持久化操作都通過創(chuàng)建的SessionFactory對象進行。Configurationconfig=newConfiguration().configure();SessionFactory接口SessionFactory的主要作用是生成Session對象,如果應用程序只有一個數(shù)據(jù)存儲源,則只需創(chuàng)建一個SessionFactory實例,創(chuàng)建好的SessionFactory實例是不能被改變的。Configurationconfig=newConfiguration().configure();SessionFactorysessionfactory=config.buildSessionFactory();Session接口Session的主要功能是讀取、創(chuàng)建和刪除映射的實體對象實例,這些操作將被轉(zhuǎn)化為對數(shù)據(jù)表中數(shù)據(jù)的增加、修改、查詢和刪除操作。Session實例通過SessionFactory對象創(chuàng)建而來,創(chuàng)建方法如下。Configurationconfig=newConfiguration().configure();SessionFactorysessionfactory=config.buildSessionFactory();Sessionsession=sessionfactory.openSession();Transaction接口Transaction接口是對事務實現(xiàn)的一個抽象,用戶可以通過Transaction對象定義多個對數(shù)據(jù)庫的操作,通過Session對象的beginTransaction()方法可以得到一個Transaction對象實例Sessionsession=sessionfactory.openSession();Transactionta;try{//開始一個事務ta=session.beginTransaction();//執(zhí)行事務...//提交事務mit();}catch(Exceptione){//出現(xiàn)異常,撤銷事務if(ta!=null){ta.rollback();}throwe;}finally{//關(guān)閉Sessionsession.close();}Query接口Query接口能方便的對數(shù)據(jù)庫進行查詢操作,通過Session對象的createQuery()方法創(chuàng)建Query對象實例,通過Query對象設置查詢語句的參數(shù),執(zhí)行查詢語句并返回查詢結(jié)果。Queryquery=session.createQuery("fromCustomercwhere=:name");query.setParameter("name","tom");Criteria接口Criteria接口可以看作是傳統(tǒng)SQL的對象化表示,它本身只是一個查詢?nèi)萜鳎唧w的查詢條件需要通過Criteria.add()方法添加到Criteria實例中。Criteria接口采用了QBC檢索方式,它將數(shù)據(jù)的查詢條件封裝成為一個對象。Criteria接口實例通過調(diào)用Session對象的createCriteria()方法創(chuàng)建,通過Restrictions類或者Expression類來創(chuàng)建查詢條件對象,最后調(diào)用Criteria對象的list()方法執(zhí)行查詢語句。Criteriacriteria=session.createCriteria(TestCase.class).add(Restrictions.like("name","fiz%")).addOrder(Order.asc("age"));criteria.setMaxResults(50);Listtest=criteria.list();select*fromTestCasewherenamelike'fiz%'orderbyageasc5.4Hibernate的配置文件Hibernate配置文件主要用于配置Hibernate連接數(shù)據(jù)庫的參數(shù)以及其他一些Hibernate在運行時需要使用到的各種參數(shù)值。它告知Hibernate如何連接數(shù)據(jù)庫、如何將持久化類和數(shù)據(jù)表通過映射文件對應起來。Hibernate配置文件可以采用以下兩種方式實現(xiàn):Java屬性文件:配置屬性采用“鍵值對(key-value)”的方式XML文件:Hibernate所使用的XML配置文件默認名稱為hibernate.cfg.xml。5.4Hibernate的配置文件<?xmlversion='1.0'encoding='UTF-8'?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><propertyname="connection.driver_class">com.mysql.jdbc.Driver</property><propertyname="connection.url">jdbc:mysql://localhost:3306/webases</property><propertyname="connection.username">root</property><propertyname="connection.password">274507</property><propertyname="dialect">org.hibernate.dialect.MySQLDialect</property><propertyname="show_sql">true</property><mappingresource="com/Hibernate/test_products.hbm.xml"/></session-factory></hibernate-configuration>5.4Hibernate的配置文件Hibernate具有許多可選配置參數(shù),這些參數(shù)必須包含在<session-factory>中。以上配置文件中各個屬性參數(shù)的含義如表5-1所示。參

數(shù)描

述connection.driver_class數(shù)據(jù)庫JDBC驅(qū)動程序connection.url數(shù)據(jù)庫連接URLconnection.username訪問數(shù)據(jù)庫的用戶名connection.password訪問數(shù)據(jù)庫的密碼dialect數(shù)據(jù)庫方言show_sql系統(tǒng)運行時,輸出SQL語句到控制臺5.4Hibernate的配置文件值得注意的是,除了表5-1所列的常用配置參數(shù)之外,配置文件中還有一個非常重要的參數(shù)<mapping/>。其中resource指定了Hibernate中持久化類映射文件的位置。系統(tǒng)啟動時,Hibernate根據(jù)resource屬性自動查找映射文件,并初始化持久化類和數(shù)據(jù)表之間的對應關(guān)系。另外,Dialect參數(shù)是和所使用的數(shù)據(jù)庫種類相關(guān)。5.5Hibernate中的持久化類在Hibernate項目中實現(xiàn)數(shù)據(jù)庫的面向?qū)ο蟛僮?,需要?chuàng)建一個持久化類,通過映射文件將持久化對象與數(shù)據(jù)表建立關(guān)聯(lián),并在配置文件中通過<mapping>參數(shù)告知Hibernate映射文件的位置。5.5.1對象狀態(tài)瞬時態(tài)

所謂瞬時態(tài),指對象通過new操作創(chuàng)建,與數(shù)據(jù)庫中的數(shù)據(jù)沒有任何關(guān)聯(lián)。瞬時態(tài)對象不會被持久化到數(shù)據(jù)庫中,也不會被賦予持久化標識符。通過持久化類Customer創(chuàng)建的對象testPerson此時并沒有通過Session對象的實例對它進行任何持久化操作,也就是說testPerson對象此時與數(shù)據(jù)庫中的記錄沒有任何關(guān)系,它處于瞬時態(tài)。CustomertestPerson=newCustomer();testPerson.setFirstname("Jerry");testPerson.setLanguage("Chinese");5.5.1對象狀態(tài)持久態(tài)

所謂持久態(tài),是指該對象處于Hibernate框架所管理的狀態(tài)。它與Session對象的實例相關(guān),對其所做的任何變更操作都會被Hibernate持久化到數(shù)據(jù)庫中。當一個實體對象通過Session與數(shù)據(jù)庫發(fā)生了關(guān)聯(lián),并且處于Session的有效期內(nèi),那么這個對象就處于持久態(tài)。Sessionsession=SessionFactory.openSession();Transactiontr=session.beginTransaction();//創(chuàng)建一個事務CustomertestPerson=newCustomer();testPerson.setFirstname("Jerry");testPerson.setLanguage("Chinese");//至此,testPerson仍為瞬時態(tài)session.save(testPerson);//該語句執(zhí)行后,testPerson變?yōu)槌志脩B(tài),被Hibernate納入管理器mit();//提交事務,此時會將testPerson的數(shù)據(jù)同步到數(shù)據(jù)庫中5.5.1對象狀態(tài)脫離態(tài)

當與持久對象關(guān)聯(lián)的Session被關(guān)閉后,該對象就變?yōu)槊撾x態(tài)了。Sessionsession=SessionFactory.openSession();Transactiontr=session.beginTransaction();CustomertestPerson=newCustomer();testPerson.setFirstname("Jerry");testPerson.setLanguage("Chinese");session.save(testPerson);mit();session.close();//至此,testPerson對象進入脫離態(tài)5.5.1對象狀態(tài)圖5-7對象狀態(tài)轉(zhuǎn)換圖5.5.2創(chuàng)建持久化類持久化類是指其對象實例需要被Hibernate持久化到數(shù)據(jù)庫中的類,創(chuàng)建持久化類需要注意以下幾點:持久化類符合JavaBean的規(guī)范,包含一些屬性,以及與之對應的getXXX()和setXXX()方法。name屬性的get方法為getName()如果持久化類的屬性為boolean類型,那么他的get方法名即可以用get作為前綴,也可以用is作為前綴持久化類需有一個id屬性,用來唯一標識類的每一個對象持久化類必須提供一個不帶參的默認構(gòu)造方法5.5.2創(chuàng)建持久化類創(chuàng)建一個簡單的持久化類示例Customer.javapublicclassCustomer{privateIntegerid;//對象idprivateStringusername;//用戶名privateStringpassword;//密碼

publicIntegergetId(){ returnid;}publicvoidsetId(Integerid){ this.id=id;}publicStringgetUserName(){ returnusername;}publicvoidsetUserName(Stringusername){ this.username=username;}publicStringgetPassword(){ returnpassword;}publicvoidsetPassword(Stringpassword){ this.password=password;}}5.5.2創(chuàng)建持久化類該持久化類包括三個屬性信息:id、用戶名、密碼。每個屬性都可以通過映射文件Customer.hbm.xml與數(shù)據(jù)表中的字段建立對應關(guān)系。創(chuàng)建好持久化類之后,就可以通過Session對象實例對數(shù)據(jù)庫進行操作publicclassHibernateTest{publicstaticvoidmain(String[]args){SessionFactorysessions=newConfiguration().configure().buildSessionFactory();Sessionsession=sessions.openSession();Transactiontx=null;try{tx=session.beginTransaction();Customercus=newCustomer();cus.setUserName("zhangsan");cus.setPassword("123456");System.out.println("開始插入數(shù)據(jù)到數(shù)據(jù)庫......");session.save(cus);mit();}}5.6Hibernate的對象—關(guān)系映射文件Hibernate映射文件中包含了基本的映射信息,它描述了每一個持久化類與其對應的數(shù)據(jù)表之間的關(guān)聯(lián)信息圖5-8對象—關(guān)系映射文件所處位置對象—關(guān)系映射文件(1)創(chuàng)建數(shù)據(jù)庫表CUSTOMERS

在CUSTOMERS表中定義了三個字段,ID、NAME和PASSWORD,其中ID字段作為主鍵與持久化類Customer的id屬性對應。createtableCUSTOMERS(IDint(20)notnullprimarykeyauto_increment,NAMEvarchar(20)notnull,PASSWORDvarchar(20)notnull);對象—關(guān)系映射文件(2)創(chuàng)建對象—關(guān)系映射文件

創(chuàng)建映射文件Customer.hbm.xml,把對象—關(guān)系映射的邏輯放在此文件中。<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mappingpackage="hibernate.ch05"><classname="Customer"table="T_CUSTOMERS"><idname="id"column="ID"type="integer"><generatorclass="identity"/></id><propertyname="username"column="NAME"type="string"length="20"></property><propertyname="password"column="PASSWORD"type="string"length="20"></property></class></hibernate-mapping>對象—關(guān)系映射文件<hibernate-mapping>元素在映射文件中,<hibernate-mapping>是對象—關(guān)系映射的根元素,其他元素必須嵌入其內(nèi)。屬性功能描述默認值schema數(shù)據(jù)庫的schema名稱

auto_import設定在映射文件中是否可以在查詢語言中使用非完整類名。Truedefault-cascade默認的級聯(lián)方式Nonedefault-lazy對于沒有設定延遲加載的類和集合是否設定延遲加載Truedefault-access屬性訪問方式Propertycatalog數(shù)據(jù)庫的catalog名稱

package映射文件中類默認的包名

表5-2<hibernate-mapping>元素屬性對象—關(guān)系映射文件<class>元素它用來描述持久化類與數(shù)據(jù)庫中表的映射關(guān)系。其中name屬性指定類名,table屬性指定所對應的表名。<id>元素它用來描述持久化類Customer的OID與數(shù)據(jù)表的主鍵的映射。其中name屬性指定類的主鍵,column指定表的主鍵。<property>元素property元素用于描述普通字段的關(guān)聯(lián),即某個對象的屬性與數(shù)據(jù)表中字段的對應關(guān)系。5.7Hibernate關(guān)系映射5.7.1一對一關(guān)聯(lián)5.7.2一對多關(guān)聯(lián)5.7.3多對多關(guān)聯(lián)5.7.1一對一關(guān)聯(lián)一對一關(guān)聯(lián)比較容易理解,即A對象與B對象一一對應。例如,現(xiàn)假設學校宿舍是單人間,那么學生對象Student和宿舍對象Dormitory就是一對一關(guān)系,即一個學生只能住一個宿舍,而一個宿舍里也只能住一個學生。要建立它們之間的一對一關(guān)聯(lián),可以使用<one-to-one>元素進行設置。首先需要在Student對象的映射文件Student.hbm.xml中定義到Dormitory對象的關(guān)聯(lián)5.7.1一對一關(guān)聯(lián)<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping><classname="sec1.Student"table="STUDENT"><idname="id"column="ID"type="integer"><generatorclass="identity"/></id><propertyname="name"column="NAME"type="string"length="20"></property></class>

<one-to-onename="dormitory"class="Dormitory"></hibernate-mapping>5.7.1一對一關(guān)聯(lián)<one-to-onename="student"class="Student"constrainted="true">同樣的,還需要在Dormitory對象的映射文件Dormitory.hbm.xml中定義到Student對象的關(guān)聯(lián)其中<one-to-one>元素屬性如表5-8所示。屬性功能描述默認值name映射類屬性的名稱

class映射的目標類名稱

cascade操作時的級聯(lián)關(guān)系

constrainted當前類對應的表與被關(guān)聯(lián)的表之間是否存在外鍵約束falsefetch抓取數(shù)據(jù)的策略

property-ref指定關(guān)聯(lián)類的屬性名,此屬性和本類的主鍵相對應關(guān)聯(lián)類的主鍵accessHibernate訪問這個屬性的策略propertyformula定義一個SQL表達式來計算這個屬性的值

lazy指定對于此關(guān)聯(lián)對象是否使用延遲加載以及延遲加載的策略proxyentity-name被關(guān)聯(lián)類的實體名

5.7.1一對一

注解@OneToOnecascade={CascadeType.REFRESH}的含義是只是查詢級聯(lián),它還有其他3個類型:CascadeType.MERGE級聯(lián)更新CascadeType.PERSIST級聯(lián)保存CascadeType.REMOVE級聯(lián)刪除optional=false定義關(guān)聯(lián)類不一定要存在@JoinColumn關(guān)聯(lián)的對象的字段5.7.2一對多關(guān)聯(lián)對于一對多關(guān)聯(lián)的定義,Dormitory與Student之間是一對多關(guān)聯(lián),那么Dormitory對象的實例就要對應多個Student對象的實例。在Hibernate中這種關(guān)聯(lián)通過集合對象來處理,這里使用<set>元素完成配置。在Dormitory.hbm.xml映射文件中添加<one-to-many>元素其中<key>標簽指定對應字段,一對多關(guān)聯(lián)映射通常在多的一端維護關(guān)系。<setname="student"inverse="true"cascade="save-update"><keycolumn="Dorm_id"/><one-to-manyclass="Student"/></set>5.7.2多對一與一對多反向,Student與Dormitory之間是多對一關(guān)聯(lián),則需要在Student.hbm.xml映射文件中添加<many-to-one>元素值得注意的是,<key>標簽和<many-to-one>標簽加入的字段必須保持一直,否則會產(chǎn)生數(shù)據(jù)混亂。<many-to-onename="dormitory"column="Dorm_id"/>5.7.3多對多關(guān)聯(lián)例如學生Student對象與課程Course對象之間就是多對多關(guān)聯(lián),即一個學生可以選修多門課程,而一門課程可以被多名學生選修。要完成多對多關(guān)聯(lián)配置,需要在兩個對象的映射文件中同時進行配置。與此同時,還需要創(chuàng)建一張中間表t_stu_cour。首先,在Student.hbm.xml中添加以下代碼<setname="course"table="t_stu_cour"inverse="true"cascade="save-update"><keycolumn="Stu_id"/><many-to-manyclass="Course"column="Cour_id"/></set>5.7.3多對多關(guān)聯(lián)同樣,在Course.hbm.xml映射文件中添加以下代碼。其中Stu_id和Cour_id是中間表t_stu_cour中的兩個字段<setname="student"table="t_stu_cour"inverse="true"cascade="save-update"><keycolumn="Cour_id"/><many-to-manyclass="Student"column="Stu_id"/></set>5.7.3多對多關(guān)聯(lián)<many-to-many>子元素屬性如表5-11所示屬性功能描述默認值column中間關(guān)聯(lián)表中映射到關(guān)聯(lián)目標表的關(guān)聯(lián)字段

class關(guān)聯(lián)的目標類

fetch設置抓取數(shù)據(jù)的策略selectlazy指定對于此關(guān)聯(lián)對象是否使用延遲加載策略proxynot-found指定外鍵引用的數(shù)據(jù)不存在時的處理方式exceptionentity-name被關(guān)聯(lián)類的實體名

formula定義一個SQL表達式來計算此屬性的值

表5-11<many-to-many>元素屬性5.8通過HibernateAPI操縱數(shù)據(jù)庫(1)創(chuàng)建一個Configuration對象實例

創(chuàng)建一個Configuration對象實例,為接下來讀取配置文件做好準備工作。(2)讀取配置文件

默認情況下,Hibernate會在CLASSPATH所指定的路徑下尋找hibernate.cfg.xml文件或者perties文件。讀取配置文件的工作是通過Configuration對象的configure()方法完成。Configurationconfig=newConfiguration();5.8通過HibernateAPI操縱數(shù)據(jù)庫(3)創(chuàng)建SessionFactory對象實例調(diào)用Configuration類的buildSessionFactory()方法創(chuàng)建一個SessionFactory對象實例,并把Configuration對象所包含的所有配置信息拷貝到SessionFactory對象的緩存中(4)創(chuàng)建Session對象Hibernate初始化完成后,就可以調(diào)用SessionFactory對象的oepnSession()方法創(chuàng)建Session對象實例,通過Session對象執(zhí)行訪問數(shù)據(jù)庫的操作。Session接口提供數(shù)據(jù)庫操作方法save()方法:將Java對象保存至數(shù)據(jù)庫。當運行session.save(cus)方法時,Hibernate執(zhí)行以下SQL語句Sessionsession=sessions.openSession();Transactiontx=session.beginTransaction();Customercus=newCustomer();cus.setUserName("zhangsan");cus.setPassword("123456");session.save(cus);mit();insertintoCUSTOMERS(ID,NAME,PASSWORD)values(1,'zhangsan','123456');Session接口提供數(shù)據(jù)庫操作方法update()方法:更新數(shù)據(jù)庫中的Java對象。Sessionsession=sessions.openSession();Transactiontx=session.beginTransaction();Customercus=newCustomer();cus.setId("2");cus.setUserName("wangwu");cus.setPassword("225599");session.update(cus);mit();Session接口提供數(shù)據(jù)庫操作方法delete()方法:刪除數(shù)據(jù)庫中的Java對象值得注意的是,刪除操作的依據(jù)是根據(jù)這個實體對象的標識符(主鍵)來進行的。Sessionsession=sessions.openSession();Transactiontx=session.beginTransaction();Customercus=newCustomer();cus.setId("1");session.delete(cus);mit();Session接口提供數(shù)據(jù)庫操作方法load()方法:從數(shù)據(jù)庫中加載Java對象load()方法與get()類似,都是通過對象的標識符(主鍵)找到數(shù)據(jù)表中對應的記錄。Sessionsession=sessions.openSession();Transactiontx=session.beginTransaction();Customercus=newCustomer();cus=session.load(Customer.class,"2");mit();Session接口提供數(shù)據(jù)庫操作方法get()方法:通過標識符得到指定類的Java對象實例當查找的記錄不存在時,get()方法會返回null,而load()方法將會拋出一個HibernateException異常。load()方法可以返回實體的代理類實例,而get()方法只能直接返回實體類。load()方法可以充分利用Hibernate的內(nèi)部緩存和二級緩存中現(xiàn)有的數(shù)據(jù),而get()方法只能在Hibernate內(nèi)部緩存中進行數(shù)據(jù)查找。Session接口提供數(shù)據(jù)庫操作方法find()方法:從數(shù)據(jù)庫中查詢Java對象tx=session.beginTransaction();Listcustomers=session.find("fromCustomerascusorderbycus.idasc");mit();5.9在MyEc

溫馨提示

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

評論

0/150

提交評論