hibernate_01_基本配置和查詢_關(guān)鍵類(lèi)_HQL_條件查詢_C3p0_第1頁(yè)
hibernate_01_基本配置和查詢_關(guān)鍵類(lèi)_HQL_條件查詢_C3p0_第2頁(yè)
hibernate_01_基本配置和查詢_關(guān)鍵類(lèi)_HQL_條件查詢_C3p0_第3頁(yè)
hibernate_01_基本配置和查詢_關(guān)鍵類(lèi)_HQL_條件查詢_C3p0_第4頁(yè)
hibernate_01_基本配置和查詢_關(guān)鍵類(lèi)_HQL_條件查詢_C3p0_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Hibernate王健為什么用Hibernate?l為什么要有Hibernate在原始操作數(shù)據(jù)庫(kù)的過(guò)程中,我們都是將JavaBean傳遞到Dao中,然后再?gòu)腄ao中解析成SQL語(yǔ)句。而Hibernate可以直接處理JavaBean,保存一個(gè)Bean就是執(zhí)行一個(gè)SQL.l然后就是:處理分頁(yè),一般應(yīng)用程序都會(huì)有分頁(yè)功能.數(shù)據(jù)移植,可能你的項(xiàng)目要運(yùn)行在多個(gè)不同的數(shù)據(jù)庫(kù)上。目錄l1:認(rèn)識(shí)Hibernatel 1、完全借助MyEclipse工具開(kāi)發(fā)Hibernate應(yīng)用。l 2、分析MyEclipse生成的配置文件和工具類(lèi)。l 3、修改工具類(lèi),并進(jìn)行簡(jiǎn)單的查詢。l 4、使用hibernate進(jìn)行CRUD

2、操作。必須打開(kāi)事務(wù)。l 5、更好的認(rèn)識(shí)Hibernate-體系結(jié)構(gòu)。l 6、Session,與SessionFactory介紹。l 7、 主鍵生成策略。l 8、關(guān)鍵類(lèi)介紹。Query,CriteirHibernate的體系結(jié)構(gòu):認(rèn)識(shí)Hibernate:l在今日的企業(yè)環(huán)境中,把面向?qū)ο蟮能浖完P(guān)系型數(shù)據(jù)庫(kù)一起使用可能是相當(dāng)麻煩和浪費(fèi)時(shí)間l的。Hibernate 是一個(gè)面向 Java 環(huán)境的對(duì)象/關(guān)系型數(shù)據(jù)庫(kù)映射工具。對(duì)象/關(guān)系型數(shù)據(jù)庫(kù)映射l(object/relational mapping,ORM)這個(gè)術(shù)語(yǔ)表示一種技術(shù),用來(lái)把對(duì)象模型表示的對(duì)象映射l到基于 SQL 的關(guān)系模型數(shù)據(jù)結(jié)構(gòu)中去,即將

3、數(shù)據(jù)表影射為JavaBean.lHibernate 不僅管理 Java 類(lèi)到數(shù)據(jù)庫(kù)表的映射(包括 Java 數(shù)據(jù)類(lèi)型到 SQL 數(shù)據(jù)類(lèi)型的映射),l還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,可以大幅度減少開(kāi)發(fā)時(shí)對(duì)人工使用 SQL 和 JDBC 處理數(shù)據(jù)的l時(shí)間。HQLlHibernate 的目標(biāo)是對(duì)于開(kāi)發(fā)者通常的數(shù)據(jù)持久化相關(guān)的編程任務(wù),解放其中的 95%。對(duì)于以數(shù)l據(jù)為中心的程序來(lái)說(shuō),它們往往只在數(shù)據(jù)庫(kù)中使用存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)商業(yè)邏輯,Hibernate 可能不l是最好的解決方案;對(duì)于那些在基于 Java 的中間層應(yīng)用中,它們實(shí)現(xiàn)面向?qū)ο蟮臉I(yè)務(wù)模型和商l業(yè)邏輯的應(yīng)用,Hibernate 是最有用的。不管怎

4、樣,Hibernate 一定可以幫助你消除或者包裝那l些針對(duì)特定廠商的 SQL 代碼,而且?guī)椭憬Y(jié)果集從表格式的表示形式轉(zhuǎn)換到一系列的對(duì)象中去。Hibernate核心接口lSession,一個(gè)Session就是一個(gè)Connection,也是一個(gè)一級(jí)緩存.l持久化對(duì)象狀態(tài) 是在緩存中已經(jīng)被托管還是已經(jīng)從緩存中刪除.lConfiguration 配置對(duì)像,此類(lèi)用于讀取hibernate.cfg.xml文件.lServiceRegistry為SessionFactory提供注冊(cè)服務(wù)。lSessionFactory 通過(guò)Configuration生成一個(gè)Session工廠,用于管理所有的Session

5、,即連接.lTransaction -事務(wù).lCriteria標(biāo)準(zhǔn)/QueryHQL/SQLQuerySQL 查詢對(duì)像.用UML時(shí)序圖表示上面的創(chuàng)建過(guò)程:2、完全借助MyEclipse開(kāi)發(fā)第一個(gè)Hibernate應(yīng)用l第一步:使用DB Browser建立與MySql數(shù)據(jù)庫(kù)的連接。l第二步:建立一個(gè)Java項(xiàng)目。l第三步:通過(guò)MyEclipse的Add功能,加入它對(duì)Hibernate的支持。l第四步:修改生成的類(lèi)文件。l第五步:進(jìn)行簡(jiǎn)單的查詢。第一步:建立數(shù)據(jù)表:,第二步:建立一個(gè)Java項(xiàng)目:第三步:加入對(duì)Hibernate的支持:第五步:進(jìn)行簡(jiǎn)單的查詢操作首先在要生成JavaBean:3、配

6、置和修改Hibernate的配置文件:l1、修改獲取SessionFacotry/Session的類(lèi):2、修改配置文件:3、認(rèn)識(shí)*.hbm.xml影射文件:內(nèi)建的映射類(lèi)型:-基本映射類(lèi)型Java類(lèi)型標(biāo)準(zhǔn)的SQL類(lèi)型 integer int/java.lang.IntegerINTEGER long long/java.lang.LongBIGINT short short/java.lang.ShortSMALLINT float float/java.lang.FloatFLOAT double double/java.lang.DoubleDOUBLE big_decimal java.m

7、ath.BigDecimalNUMERIC character java.lang.StringCHAR(1) string java.lang.StringVARCHAR byte byte/java.lang.ByteTINYINT boolean boolean/java.lang.BooleanBIT yes_no boolean/java.lang.BooleanCHAR(1) (Y or N) true_false boolean/java.lang.BooleanCHAR(1)(T or F)內(nèi)建的映射類(lèi)型:-時(shí)間映射類(lèi)型Java類(lèi)型標(biāo)準(zhǔn)的SQL類(lèi)型date java.util.

8、Date/java.sql.DateDATE time java.util.Date/java.sql.DateTIME timestamp java.util.Date/java.sql.TimestampTIMESTAMP calendar java.util.CalendarTIMESTAMP calendar_date java.util.CalendarDATE內(nèi)建的映射類(lèi)型:-二進(jìn)制映射類(lèi)型Java類(lèi)型標(biāo)準(zhǔn)的SQL類(lèi)型 binary byteVARBINARY text java.lang.StringCLOB clob java.sql.ClobCLOB blob java.sq

9、l.BlobBLOB serializable 實(shí)現(xiàn)了Serializable的java類(lèi)VARBINARY4、完成CRUD使用hibernate進(jìn)行CRUD操作。必須打開(kāi)事務(wù):Session,與SessionFactory介紹:lSession是運(yùn)行在Java程序與Hibernate之間最主要的類(lèi)。它為 應(yīng)用程序提供持久化的服務(wù)。它包含一些重要的方法:l save,persist 對(duì)應(yīng) insert語(yǔ)句。lDelete 對(duì)應(yīng) delete語(yǔ)句。lUpdate,merge對(duì)應(yīng)update語(yǔ)句操作Session進(jìn)行數(shù)據(jù)執(zhí)行的模板代碼如下:SessionFactory介紹:l每一個(gè)項(xiàng)目,只擁有一個(gè)

10、此類(lèi)的對(duì)像。SessionFactory是線程安全的。l此類(lèi),負(fù)責(zé)獲取或是創(chuàng)建Sessions.l它同樣包含一些重要的方法,如從二級(jí)緩存中清除某個(gè)對(duì)像。l考慮以下代碼:Hibernate初始化過(guò)程分析:l第一步:hibernate會(huì)先實(shí)例化org.hibernate.cfg.Configuration類(lèi).此類(lèi)在實(shí)例化的過(guò)程中,會(huì)同時(shí)實(shí)例化SettingsFactory類(lèi),SettingsFactory類(lèi)的作用是保存用戶的配置信息.默認(rèn)讀取perties資源文件。l第二步:調(diào)用configuration.configure方法,此方法于接收用戶的配置文件即:hibern

11、ate.cfg.xml文件.此方法默認(rèn)在classpath下查找hibernate.cfg.xml文件.l第三步:調(diào)用configuration.buildSessionFactory方法.此方法用于讀取所有在hibernate.cfg.xml中的配置,從而構(gòu)造出一個(gè)SessionFactoryImpl類(lèi).在SessionFactoryImpl(即SessionFactory)中,保存著二級(jí)緩存用的計(jì)數(shù)器,所有影射類(lèi)都保存在map中,查詢緩存,攔截器.此類(lèi)的構(gòu)造方法應(yīng)該是最為復(fù)雜的一個(gè).l第四步:在SessionFactory中,通過(guò)openSession可以獲取一個(gè)連接,一個(gè)Session,

12、其實(shí)它的實(shí)現(xiàn)類(lèi)為SessionImpl,即為一個(gè)Connection,但此Connection是經(jīng)過(guò)動(dòng)態(tài)代理以后的.見(jiàn)BorrowedConnectionProxy的源代碼,此類(lèi)負(fù)責(zé)動(dòng)態(tài)代理Connection,而真正的連接則是由DriverManagerConnectionProvider來(lái)負(fù)責(zé),通過(guò)查看它的源代碼可知,它的連接方式仍然是使用DriverManager注冊(cè)的JDBC連接.l第五步:將創(chuàng)建的N個(gè)Session,放到ThreadLocale以便于線程局部共享.主鍵生成策略1:l經(jīng)常使用的幾個(gè)主鍵生成策略為:1:assigned -表示在新增數(shù)據(jù)時(shí)由應(yīng)用程序(用戶自己)指定主鍵的值

13、。主要針對(duì)主鍵是采用自然主鍵的形式。這種方式,適用于主鍵列不是自動(dòng)增長(zhǎng)列。 其缺點(diǎn)為在執(zhí)行新增操作時(shí),需查詢數(shù)據(jù)庫(kù)判斷生成的主鍵是否已經(jīng)存在。 2:increment -表示新增數(shù)據(jù)操作時(shí)由hibernate自動(dòng)生成主鍵值。其生成的值為:先查詢?cè)撝麈I列的最大值,然后在最大值的基礎(chǔ)上加上1.適用于采用代理主鍵形式的主鍵列。同樣不能用于主鍵列是自動(dòng)增長(zhǎng)的表。但是,該主鍵生成策略也有些缺點(diǎn)。 (1)新增數(shù)據(jù)前先查詢一遍,影響了性能。 (2)主鍵的類(lèi)型只能為數(shù)值型的int或者long (3)并發(fā)操作時(shí)的沖突問(wèn)題多線程,多CPU。 主鍵生成策略2:l3:identity -不如說(shuō)是為sqlerver數(shù)據(jù)

14、庫(kù)量身定做的。主要適用于sqlserver數(shù)據(jù)庫(kù)的自動(dòng)增長(zhǎng)列的表。 l4:native 本地-表示根據(jù)不同的數(shù)據(jù)庫(kù)采用不同的主鍵生成策略。比如,當(dāng)前數(shù)據(jù)庫(kù)為sqlserver,則會(huì)采用identity,如為oracle,則采用 oracle中的sequence等。區(qū)分?jǐn)?shù)據(jù)庫(kù)的不同是以hibernate主配置文件中sessionFactory中配置的數(shù)據(jù)庫(kù)方言。mysql 就用不了了, 這個(gè)oracle中必須創(chuàng)建一個(gè)名字為 hibernate_sequence的序列。 l5:UUID-這個(gè)就不用說(shuō)了吧。適合于各種不同的數(shù)據(jù)庫(kù),生成32位的唯一字符串。但字段必須是varchar類(lèi)型。建議使用此種形

15、式。Hibernate的查詢:l對(duì)于保存、修改、刪除可以直接使用session,但如果需要更為復(fù)雜的查詢,則可以使用以下幾個(gè)類(lèi):lQuery 用于執(zhí)行HQL session.createQuery(HQL);lSQLQuery 用于執(zhí)行原生的SQL. session.createSQLQuery(SQL);lCriteria 查詢JavaBean. session.createCriteria(JavaBean.class);l條件查詢- Restrictions- Restrictions.eq(propertyName,”value”);首先介紹Criteria:-1:簡(jiǎn)單查詢,2:條件查

16、詢,3:使用mapCriteria:iLikeCriteria:in:在任意情況下都可以使用分頁(yè):l以下使用的是排序lc.addOrder(Order.desc(name);findByExample 根據(jù)給定的示例查詢:lSession ss = HibernateSessionFactory.getSession();lss.beginTransaction();lStud s = new Stud();ls.setName(“EE”);/根據(jù)給定的字段查詢,但不包含主鍵但不包含主鍵lList list = ss.createCriteria(Stud.class)l .add(Examp

17、le.create(s)l .list();lSystem.err.println(list);lss.getTransaction().commit();Query類(lèi):-用于執(zhí)行HQL語(yǔ)句:lQuery類(lèi),提供使用HQL語(yǔ)言的查詢方式:如lfrom Stud;注意Stud是類(lèi)名,不是表名,所以第一個(gè)單詞必須大寫(xiě)。Query條件查詢: - 占位符查詢和命名的查詢Query-通過(guò)指定map/JavaBean的方式使用參數(shù):uniqueResult返回一個(gè)唯一的值:Query的executeUpdate功能可以執(zhí)行更新操作:Execute the update or delete statemen

18、t. merge(合并)與saveOrUpdate的區(qū)別lmerge(合并)和saveOrUpdate都可以用于保存數(shù)據(jù)。它們的區(qū)別關(guān)鍵在于所處理的類(lèi)是否存在id.l在id(主鍵自動(dòng)生成的主鍵)為null的情況下,都是保存。l如果存在Id(主鍵)的情況下merge的處理方式:如果id對(duì)應(yīng)的記錄數(shù)據(jù)存在,則為修改。如果id對(duì)應(yīng)的記錄數(shù)據(jù)不存在 ,則為保存。l如果存在Id(主鍵)的情況下saveOrupdate的處理方式:如果id對(duì)應(yīng)的記錄數(shù)據(jù)存在則為修改。如果id對(duì)應(yīng)的記錄不存在則拋出異常。關(guān)于Query的其他說(shuō)明:lQuery的方法有很多,請(qǐng)大家參考API文檔并結(jié)合代碼練習(xí)。l其他方法如:setParameterListsetFirstResult.setMaxResults更多方法不一一列舉,請(qǐng)同學(xué)們自己查看API。再次分析hibernate.cfg.xml文件:JDBC連接:l就像你剛才看到的,如果希望讓Hibernate幫助你建立數(shù)據(jù)連接必須要在配置文件中配置數(shù)據(jù)連接所需要的屬性,它們是:l(前面的hibernate可以省略)l如果僅使用以上配置,即會(huì)使用Hibernate自帶的數(shù)據(jù)連接池,但lHibernate建議你使用c3p0連接池做為實(shí)現(xiàn)。l如果要使用c3p0的連接,請(qǐng)將c3p0.jar添加到classpath,并添加以下配置通過(guò)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論