




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Hibernate王健為什么用Hibernate?l為什么要有Hibernate在原始操作數(shù)據(jù)庫的過程中,我們都是將JavaBean傳遞到Dao中,然后再從Dao中解析成SQL語句。而Hibernate可以直接處理JavaBean,保存一個(gè)Bean就是執(zhí)行一個(gè)SQL.l然后就是:處理分頁,一般應(yīng)用程序都會(huì)有分頁功能.數(shù)據(jù)移植,可能你的項(xiàng)目要運(yùn)行在多個(gè)不同的數(shù)據(jù)庫上。目錄l1:認(rèn)識(shí)Hibernatel 1、完全借助MyEclipse工具開發(fā)Hibernate應(yīng)用。l 2、分析MyEclipse生成的配置文件和工具類。l 3、修改工具類,并進(jìn)行簡單的查詢。l 4、使用hibernate進(jìn)行CRUD
2、操作。必須打開事務(wù)。l 5、更好的認(rèn)識(shí)Hibernate-體系結(jié)構(gòu)。l 6、Session,與SessionFactory介紹。l 7、 主鍵生成策略。l 8、關(guān)鍵類介紹。Query,CriteirHibernate的體系結(jié)構(gòu):認(rèn)識(shí)Hibernate:l在今日的企業(yè)環(huán)境中,把面向?qū)ο蟮能浖完P(guān)系型數(shù)據(jù)庫一起使用可能是相當(dāng)麻煩和浪費(fèi)時(shí)間l的。Hibernate 是一個(gè)面向 Java 環(huán)境的對(duì)象/關(guān)系型數(shù)據(jù)庫映射工具。對(duì)象/關(guān)系型數(shù)據(jù)庫映射l(object/relational mapping,ORM)這個(gè)術(shù)語表示一種技術(shù),用來把對(duì)象模型表示的對(duì)象映射l到基于 SQL 的關(guān)系模型數(shù)據(jù)結(jié)構(gòu)中去,即將
3、數(shù)據(jù)表影射為JavaBean.lHibernate 不僅管理 Java 類到數(shù)據(jù)庫表的映射(包括 Java 數(shù)據(jù)類型到 SQL 數(shù)據(jù)類型的映射),l還提供數(shù)據(jù)查詢和獲取數(shù)據(jù)的方法,可以大幅度減少開發(fā)時(shí)對(duì)人工使用 SQL 和 JDBC 處理數(shù)據(jù)的l時(shí)間。HQLlHibernate 的目標(biāo)是對(duì)于開發(fā)者通常的數(shù)據(jù)持久化相關(guān)的編程任務(wù),解放其中的 95%。對(duì)于以數(shù)l據(jù)為中心的程序來說,它們往往只在數(shù)據(jù)庫中使用存儲(chǔ)過程來實(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ì)像,此類用于讀取hibernate.cfg.xml文件.lServiceRegistry為SessionFactory提供注冊(cè)服務(wù)。lSessionFactory 通過Configuration生成一個(gè)Session工廠,用于管理所有的Session
5、,即連接.lTransaction -事務(wù).lCriteria標(biāo)準(zhǔn)/QueryHQL/SQLQuerySQL 查詢對(duì)像.用UML時(shí)序圖表示上面的創(chuàng)建過程:2、完全借助MyEclipse開發(fā)第一個(gè)Hibernate應(yīng)用l第一步:使用DB Browser建立與MySql數(shù)據(jù)庫的連接。l第二步:建立一個(gè)Java項(xiàng)目。l第三步:通過MyEclipse的Add功能,加入它對(duì)Hibernate的支持。l第四步:修改生成的類文件。l第五步:進(jìn)行簡單的查詢。第一步:建立數(shù)據(jù)表:,第二步:建立一個(gè)Java項(xiàng)目:第三步:加入對(duì)Hibernate的支持:第五步:進(jìn)行簡單的查詢操作首先在要生成JavaBean:3、配
6、置和修改Hibernate的配置文件:l1、修改獲取SessionFacotry/Session的類:2、修改配置文件:3、認(rèn)識(shí)*.hbm.xml影射文件:內(nèi)建的映射類型:-基本映射類型Java類型標(biāo)準(zhǔn)的SQL類型 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)建的映射類型:-時(shí)間映射類型Java類型標(biāo)準(zhǔn)的SQL類型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)建的映射類型:-二進(jìn)制映射類型Java類型標(biāo)準(zhǔn)的SQL類型 binary byteVARBINARY text java.lang.StringCLOB clob java.sql.ClobCLOB blob java.sq
9、l.BlobBLOB serializable 實(shí)現(xiàn)了Serializable的java類VARBINARY4、完成CRUD使用hibernate進(jìn)行CRUD操作。必須打開事務(wù):Session,與SessionFactory介紹:lSession是運(yùn)行在Java程序與Hibernate之間最主要的類。它為 應(yīng)用程序提供持久化的服務(wù)。它包含一些重要的方法:l save,persist 對(duì)應(yīng) insert語句。lDelete 對(duì)應(yīng) delete語句。lUpdate,merge對(duì)應(yīng)update語句操作Session進(jìn)行數(shù)據(jù)執(zhí)行的模板代碼如下:SessionFactory介紹:l每一個(gè)項(xiàng)目,只擁有一個(gè)
10、此類的對(duì)像。SessionFactory是線程安全的。l此類,負(fù)責(zé)獲取或是創(chuàng)建Sessions.l它同樣包含一些重要的方法,如從二級(jí)緩存中清除某個(gè)對(duì)像。l考慮以下代碼:Hibernate初始化過程分析:l第一步:hibernate會(huì)先實(shí)例化org.hibernate.cfg.Configuration類.此類在實(shí)例化的過程中,會(huì)同時(shí)實(shí)例化SettingsFactory類,SettingsFactory類的作用是保存用戶的配置信息.默認(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類.在SessionFactoryImpl(即SessionFactory)中,保存著二級(jí)緩存用的計(jì)數(shù)器,所有影射類都保存在map中,查詢緩存,攔截器.此類的構(gòu)造方法應(yīng)該是最為復(fù)雜的一個(gè).l第四步:在SessionFactory中,通過openSession可以獲取一個(gè)連接,一個(gè)Session,
12、其實(shí)它的實(shí)現(xiàn)類為SessionImpl,即為一個(gè)Connection,但此Connection是經(jīng)過動(dòng)態(tài)代理以后的.見BorrowedConnectionProxy的源代碼,此類負(fù)責(zé)動(dòng)態(tài)代理Connection,而真正的連接則是由DriverManagerConnectionProvider來負(fù)責(zé),通過查看它的源代碼可知,它的連接方式仍然是使用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)增長列。 其缺點(diǎn)為在執(zhí)行新增操作時(shí),需查詢數(shù)據(jù)庫判斷生成的主鍵是否已經(jīng)存在。 2:increment -表示新增數(shù)據(jù)操作時(shí)由hibernate自動(dòng)生成主鍵值。其生成的值為:先查詢?cè)撝麈I列的最大值,然后在最大值的基礎(chǔ)上加上1.適用于采用代理主鍵形式的主鍵列。同樣不能用于主鍵列是自動(dòng)增長的表。但是,該主鍵生成策略也有些缺點(diǎn)。 (1)新增數(shù)據(jù)前先查詢一遍,影響了性能。 (2)主鍵的類型只能為數(shù)值型的int或者long (3)并發(fā)操作時(shí)的沖突問題多線程,多CPU。 主鍵生成策略2:l3:identity -不如說是為sqlerver數(shù)據(jù)
14、庫量身定做的。主要適用于sqlserver數(shù)據(jù)庫的自動(dòng)增長列的表。 l4:native 本地-表示根據(jù)不同的數(shù)據(jù)庫采用不同的主鍵生成策略。比如,當(dāng)前數(shù)據(jù)庫為sqlserver,則會(huì)采用identity,如為oracle,則采用 oracle中的sequence等。區(qū)分?jǐn)?shù)據(jù)庫的不同是以hibernate主配置文件中sessionFactory中配置的數(shù)據(jù)庫方言。mysql 就用不了了, 這個(gè)oracle中必須創(chuàng)建一個(gè)名字為 hibernate_sequence的序列。 l5:UUID-這個(gè)就不用說了吧。適合于各種不同的數(shù)據(jù)庫,生成32位的唯一字符串。但字段必須是varchar類型。建議使用此種形
15、式。Hibernate的查詢:l對(duì)于保存、修改、刪除可以直接使用session,但如果需要更為復(fù)雜的查詢,則可以使用以下幾個(gè)類: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:簡單查詢,2:條件查
16、詢,3:使用mapCriteria:iLikeCriteria:in:在任意情況下都可以使用分頁: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類:-用于執(zhí)行HQL語句:lQuery類,提供使用HQL語言的查詢方式:如lfrom Stud;注意Stud是類名,不是表名,所以第一個(gè)單詞必須大寫。Query條件查詢: - 占位符查詢和命名的查詢Query-通過指定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)鍵在于所處理的類是否存在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的其他說明: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,并添加以下配置通過
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024廣西真龍?zhí)烊鸩视“b有限公司招聘10人筆試參考題庫附帶答案詳解
- 把握技巧:2024試題及答案
- 2024年中國航油甘肅分公司生產(chǎn)技能崗位招聘筆試參考題庫附帶答案詳解
- 網(wǎng)絡(luò)事件響應(yīng)試題及答案
- 低空經(jīng)濟(jì)產(chǎn)業(yè)園社會(huì)資本與企業(yè)投資方案
- 低空經(jīng)濟(jì)產(chǎn)業(yè)園技術(shù)研發(fā)中心建設(shè)規(guī)劃
- 內(nèi)蒙古牙克石市塔爾氣中學(xué)人教版七年級(jí)生物上冊(cè)教學(xué)設(shè)計(jì)第三單元第五章第一節(jié) 光合作用吸收二氧化碳釋放氧氣
- 2024年八年級(jí)地理上冊(cè) 第二章 第一節(jié) 地形與地勢(shì)教學(xué)實(shí)錄 (新版)新人教版
- 3.1細(xì)胞膜的結(jié)構(gòu)和功能(原卷版)
- 《我的生命真美好》教學(xué)設(shè)計(jì)-生命教育
- 2024年安慶市迎江區(qū)招聘社區(qū)人員考試真題
- 燃?xì)夤こ藺I智能應(yīng)用企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 《休閑農(nóng)業(yè)》課件 項(xiàng)目五 休閑農(nóng)業(yè)項(xiàng)目規(guī)劃設(shè)計(jì)
- 期中評(píng)估檢測(cè)題無答案2024-2025學(xué)年七年級(jí)下冊(cè)道德與法治
- 肺栓塞治療及護(hù)理
- 2025年江蘇省職業(yè)院校技能大賽中職組(網(wǎng)絡(luò)建設(shè)與運(yùn)維)考試題(附答案)
- 統(tǒng)編版(2024)七年級(jí)下冊(cè)《道德與法治》課本“活動(dòng)課”參考答案
- 2025年陜西工商職業(yè)學(xué)院單招職業(yè)傾向性測(cè)試題庫含答案
- TCEC-抽水蓄能電站樞紐布置格局比選專題報(bào)告編制規(guī)程
- 2025年鐘山職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性考試題庫必考題
- 綜合與實(shí)踐 低碳生活 教學(xué)設(shè)計(jì) 2024-2025學(xué)年人教版七年級(jí)數(shù)學(xué)下冊(cè)
評(píng)論
0/150
提交評(píng)論