框架筆記hibernate1 8在HIBERNATE中配置數(shù)據(jù)庫連接池_第1頁
框架筆記hibernate1 8在HIBERNATE中配置數(shù)據(jù)庫連接池_第2頁
框架筆記hibernate1 8在HIBERNATE中配置數(shù)據(jù)庫連接池_第3頁
框架筆記hibernate1 8在HIBERNATE中配置數(shù)據(jù)庫連接池_第4頁
框架筆記hibernate1 8在HIBERNATE中配置數(shù)據(jù)庫連接池_第5頁
已閱讀5頁,還剩118頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Hibernate 第1章HIBERNATE的基本介 快速案 課后練 對(duì)MYSQL數(shù)據(jù)庫和表的常用指令的整 第2章SESSION的CRUD操 對(duì)PET對(duì)象進(jìn)行CRUD操 SESSION中容易兩個(gè)方法- 第3章持久化對(duì)象的狀 游離狀 刪除狀 第4章SESSION的各種方法詳 SESSION的GET方 SESSION方法之-LOAD方 SESSION方法之- session方法之- SESSION方法中- 第5章單表的映 基本介 IDENTITY和SEQUENCE生成方 ASSIGNED(自分配算法 在XX.HBM.XML的其它相關(guān)配 配置動(dòng)態(tài)添加和動(dòng)態(tài)修改,建設(shè)SQL語句的字 第6章映射關(guān)系(多表 查詢MASTER對(duì)象,目前不能獲取到對(duì)應(yīng)的PET對(duì)象集 更新查詢到一個(gè)對(duì)象,即更新Pet對(duì)象關(guān)聯(lián)的master對(duì) 課后作 第7章雙向的多對(duì)一映 基本介 雙向多對(duì)一的級(jí) 第8章基于外鍵的一對(duì)一的映 基本介 第9章基于主鍵的一對(duì)一的映 第10章單向的多對(duì)多的映 第11章雙向多對(duì)多的映射關(guān) 第12章檢索策 關(guān)聯(lián)的SET集合對(duì)象的檢索策 第13章HIBERNATE的檢索方 HQL的基本介紹和原 創(chuàng)建一個(gè)講解HQL的測試項(xiàng)目-職員管理系 HQL查詢-基本部 查詢部門號(hào)為1的所有雇 id10的雇員[如果我們明確的知道返回的就是一個(gè)數(shù)據(jù), 分頁查詢,按照工資降序排列,每頁查詢3個(gè)人,請(qǐng)查詢出第二頁的雇 使用命名查詢方式檢索部門號(hào)為2,同時(shí)薪水大于2000的 HQL語句的子查 HQL刪除和更 第14章QBC檢 QBC和HQL的比 QBC的案例演 查詢部門號(hào)為1,并且薪水大于100.00的所有雇 查詢部門號(hào)為1,或者薪水大于100.00的所有雇員,單獨(dú)使用 查詢部門號(hào)為1,并且薪水大于100.00的所有雇員,或者job是CLERK的雇 QBC的分頁查 使用原生SQL完成查詢部門號(hào)為1的所有雇 刪除編號(hào)為11的雇員,修改和添 第15章二級(jí)緩 1章Hibernatehibernateweb判斷是否是同一個(gè)對(duì)象,hashCode獲取它的值,hibernate//petNickname字段刪除,但是持久類中沒有刪除,更新之后快速案1hibernate需要hibernate插件,可以安裝,也可以后安裝安裝-luna將我們的hiberant包放在一個(gè)比較簡單 (沒有特殊字符和中文菜單->help->installnewsoftwareeclipse的插件的版本不匹配[換插件eclipse創(chuàng)建一個(gè)項(xiàng)目(webjavaapplication項(xiàng)目hibernatehibernateziphibernate-release-4.2.4.Final.zip\hibernate-release-4.2.4.Final\lib\requiredPet類(javabean/pojo類名字就是按這個(gè)寫這個(gè)文件路徑點(diǎn)中這個(gè)類->右鍵->生成*.hbm.xmlPet.hbm.xml引入到j(luò)avapet//創(chuàng)建流程是:1.Java類;2.jar3.4.創(chuàng)建*.hbm.xml5.創(chuàng)建*.hibernate.xml文件,并引入*.hbm.xml配置文件.5.創(chuàng)建一個(gè)類,;*.hibernate.xml對(duì)象,獲取服務(wù)對(duì)象,獲取session對(duì)象,開啟線程,創(chuàng)建持久類對(duì)象,save方法hibenate添加一個(gè)商品(id,name,price,provider,address)//hibernate獲取數(shù)據(jù)庫中的數(shù)據(jù)并將它封裝成對(duì)象hibernatec3p0jar\hibernate-release-4.2.4.Final\lib\optional\c3p0\三個(gè):C3p0的配置信息要在map前面,否則會(huì)報(bào)錯(cuò)mysql2章sessioncrudpet對(duì)象進(jìn)行crud//SQL語句,session中獲取,//petID屬性,SQLIDsession中容易兩個(gè)方法-flushsession/update--舉例//第一條語句從數(shù)據(jù)庫中獲取數(shù)據(jù)對(duì)象后,session緩存里面.第二條語句輸出.commit().flush方法,SQL語句將數(shù)debugsessionflush方法 在執(zhí)行commit之前會(huì)執(zhí)行flush語句將session里面的手動(dòng)調(diào)用 如果手動(dòng)刷新后.在事務(wù)提交的時(shí)候,它會(huì)判斷是否刷新過,如果刷新過就不會(huì)再刷新.所以,update語句會(huì)在輸出語句之前發(fā)出在執(zhí)行HQL前,保證HQL查詢的結(jié)果是的,會(huì)先將session緩存的數(shù)flushhql//hqlsession緩存的數(shù)據(jù)庫查詢語句.hql語句的時(shí)候,會(huì)將session中的數(shù)據(jù)flush到數(shù)據(jù)表里面,使session中的數(shù)據(jù)和數(shù)據(jù)庫中的數(shù)據(jù)refresh基本介紹refreshsession緩存.//session中后會(huì)不會(huì)發(fā)生覆蓋?session緩存是將創(chuàng)建的對(duì)象到session中,他們是同一個(gè)對(duì)象.//剛將一頁游離態(tài)的對(duì)象持久化之后,sessionIDSQL語句.SQL語句,session中獲取對(duì)象//Petpet3(pet)session.get(pet.calss,2)//columnintegers//映射的表名不要使用SQL的關(guān)鍵字.如果一定要用使用反引號(hào)(``),可以關(guān)要加上單引號(hào).單引號(hào)是關(guān)鍵在的作用//第一個(gè)save方直接輸出SQL語句在輸出輸出語句.update語句先輸出再執(zhí)SQL語句//save命名保存數(shù)據(jù)之后,要放在map之//id立即失效,SQL語句是在事務(wù)提交前發(fā)出的.所以它依然id獲取3章持久化對(duì)象的狀態(tài)//session.save()后就是持久化狀態(tài).session中存在:持久化一個(gè)對(duì)象,然后在獲取這個(gè)對(duì)象,hashcode值形同就說明他們他們是同一的對(duì)象.session中緩存的對(duì)象是將持久化之后的對(duì)象的地址值到session中,當(dāng)需要的時(shí)候就根據(jù)地址值獲取舉例說明org.hibernate.MapException:Couldnotinstantiateidgenerator .itbull.bean.Aniaml].//ID的自增長方式的字母寫deleteID還可以用,deletecommit//從下面的結(jié)果可以看出,delete語句并不是立即發(fā)出的,commit之后才發(fā)出.ID4章sessionhibernate,我們就在上一個(gè)項(xiàng)目修改一把即可Publicvoidinit(){}Publicvoid 關(guān)Publicvoidsessionsave基本介紹session緩存//IntegerID,Integet第一個(gè)為主鍵,可以手動(dòng)選擇第二為主鍵引號(hào)(可以關(guān)鍵字)括起來.sessionsavepersistsavesessionget基本介紹小結(jié)sessionsessionsession會(huì)話關(guān)聯(lián).session.close()緩存也沒有了session.save()session方法之-load基本介紹如果使用懶加載它不會(huì)發(fā)出SQL語句,只是返回一個(gè)對(duì)象,里面只有如果不適用懶加載,會(huì)直接發(fā)出SQL語句查詢數(shù)據(jù)庫,返回的是類的//在hbm配置文件里面的class里面修改lazy的屬性值,true使用懶加載,false錯(cuò)誤信息如果關(guān)閉了session,而你又繼續(xù)使用這個(gè)session里面的對(duì)象就會(huì)包異 -nosession方法之-基本介紹基本使用前面我們已經(jīng)了,直接看細(xì)1select-before-updatetrueupdate,這個(gè)配置是在Xxxx.hbm.xml//如果沒有配置select-before-update,下面的語句先執(zhí)行將輸出語句,commitSQL語句,delete舉例說明一把看截圖的注釋配置這個(gè)選項(xiàng)的的位置在//無論是懶加載,還是對(duì)updateselect-before-update都是對(duì)整個(gè)持久類有效的,所以在class里面添加OID時(shí),會(huì)拋出異常,jdbc中,只是返回受0的結(jié)果異常:Batchupdatereturnedunexpectedrowcountfromupdate,利用這個(gè)機(jī)制SessionUpdateSessionOID的對(duì)象存在,那么這個(gè)更新操作就會(huì)報(bào)錯(cuò)!報(bào)錯(cuò)如下org.hibernate.NonUniqueObjectException:adifferentobjectwiththesameidentifiervaluewasalreadyassociatedwiththesession方法之-基本介紹OIDsession存在報(bào)異常,update//updatecommit發(fā)出原因:設(shè)計(jì)者認(rèn)為在一個(gè)事務(wù)里面要對(duì)此修改,如果update語句太麻煩.update語IDnullsave,IDunsaved-valuesession方法中-//unsaved-value刪除掉后,id看一個(gè)案例5章單表的映射這里我們需要給大家講解一個(gè)持久類去映射成表的各個(gè)細(xì)節(jié)問題主鍵生成方式的示意圖mysql就是auto_incrementsqlserveridentity...,但是注意,如果你的數(shù)據(jù)庫默認(rèn)不支持自增長,則不能使用這個(gè)nativeoracle不支持.oidhibernatehibernate采用查到該表中的最大主鍵值+1,oid的值??囱菔緃ilo 和sequenceassigned自分配算法基本說明:oid的值由程序員直接給.hibernate都不去管理.native的生成方式,使用范圍比較廣.oraclesequence序列方式.hibernatejava的持久對(duì)象(屬性類型)hibernatehibernateJAVA類型SQL類型.看一個(gè)一覽表Monster2entry(入職時(shí)間),值保留年月日,做說明一下:mysqldatetime::分:date:timestamp:1970:1-10:0:0StringBlobmonsterhibernate映射保存到表中,并且可以讀出該圖(1)可以這樣映射,同樣和音頻也(2)在絕大部分情況下,不會(huì)保存blob,而且記錄,的路(3)blob數(shù)據(jù),本身和hibernate關(guān)系不大,參考jdbc/io即可xx.hbm.xmlsqlphotonull,dynamic-insertinsertphoto,photonulldynamic-insertinsertphoto字段,如圖6章映射關(guān)系(多表舉例說明//petmaster對(duì)象,masterMasterPetMaster.hbm.xmlPet.hbm.xml//表示他們關(guān)系的是many-to-one:many指的是本類對(duì)象.one指的是內(nèi)類屬性master.class指master對(duì)應(yīng)一的那一方的全類名.里面的columnPet的master屬性生成的表的字段名,Master表的主鍵Hibernatemany-to-one使用:3insertsql語句思考:原則:1.先添加有主對(duì)象(有外鍵指向的)2.再添加從對(duì)pet_id3的寵物信息和他的主人的信息,一條語句hibernatehibernat也可以自動(dòng)完成任配置的方式hibernate叫做,啟用迫切左外連接.MasterPetPetmaster對(duì)說明:Pet中緩存的有相同oid,就會(huì)報(bào)錯(cuò).如果直接獲取session里面的對(duì)象,并對(duì)他Pet(多的一方),但是不能任意的刪Master(1的一方),因?yàn)橛型怄I約束(如圖)說明如果要?jiǎng)h除master(1的一方),需要將該master所有的pet對(duì)象都刪master對(duì)象.7章雙向的多對(duì)一映射HibernatesetPet中對(duì)應(yīng)一個(gè)Master對(duì)象,Master中對(duì)應(yīng)一個(gè)Pet的Set集合(多個(gè)Pet對(duì)象)由于默認(rèn)的關(guān)系:Pet是many-to-one Master是one-to-many默認(rèn)外鍵指向主鍵.manyPet,one指的masterJunit代碼生成表案例演示目標(biāo):添加一個(gè)Master,有兩個(gè)寵物[蜘蛛,白骨,],能夠?qū)崿F(xiàn)通過牛sql:2因?yàn)樵谀J(rèn)的情況下,master和pet都會(huì)去這個(gè)多對(duì)一的關(guān)系,因此當(dāng)添pet后,masterpet的外鍵.讓某一方放棄這個(gè)關(guān)系,一般我們讓1的一方放棄.配置一下即可案例說明案例master_id2mastermaster所有寵物都刪除.雙向多對(duì)一的級(jí)案例演示masterpet是一步一步添加,hibernatepet也添加.masterpet的關(guān)聯(lián)關(guān)系寫master即可.8比如人和的關(guān)系就是一對(duì)一的關(guān) 的字段名為_FK是指 的主基于外鍵的多對(duì)一和一對(duì)一,需要使用many-to-one并且要添加//基于外鍵的一對(duì)一需要生成外鍵,many-to-one生成外鍵9我們還是以和Card的關(guān)系來講解這個(gè)基于主鍵的一對(duì)一的關(guān)系CardCardid即作為主(1)創(chuàng) .java和Card.java[這個(gè)和基于外鍵的持久類一樣,不截圖(2)基于主鍵的一對(duì)一不需要使用one-to-one constrained屬性寫在那里,那里就作為我們查 _id=1的人和對(duì)應(yīng)的hibernate就會(huì)先添 10章單向的多對(duì)多的映射student_coursestudentcourse3NF單向的多對(duì)多關(guān)系是有many-to-many體現(xiàn)的 在set集合中在哪個(gè)類里面指定外 分析了中間 student_course表的說明添加兩個(gè)學(xué)生,和兩門課程,并且讓學(xué)生都選擇這兩門課程代碼111Student.java生成的表(和單向的多對(duì)多完全一樣說添加兩個(gè)學(xué)生,和兩門課程,讓選擇2門課,讓選擇一門課,并建案例演示練個(gè)一對(duì)一的映射[丈夫和妻子]/基于主鍵的一對(duì)一和基于外鍵的一對(duì)一--老師的關(guān)系(完成創(chuàng)建和查詢,修改,刪除12章檢索策略hibernate類級(jí)別檢索策略((2)關(guān)聯(lián)的Set集合對(duì)象的檢索策(3)關(guān)聯(lián)的單個(gè)對(duì)象的策關(guān)于檢索策略的基本的說明(基本原則 sql語句過多于是我們?cè)诳紤]延遲加載時(shí),還有考慮在適當(dāng)?shù)那闆r下使用迫切左外連接迫切左外連接的好處是,一個(gè)sql語句可以取回的數(shù)據(jù)這兩個(gè)策略存在一定的,因此需要程序員根據(jù)實(shí)際情況來選擇。(殺雞刀和說明:load方法.PetMaster屬性,如果不修改設(shè)置,默認(rèn)是懶加載,load后不會(huì)立即獲Master里面的屬性.使用迫切左外后,一條SQL語句就能獲取所有的信關(guān)聯(lián)的Set基本說明Set集合對(duì)象的檢索策略(主要是研究三個(gè)配置[lazy,batch-size,fetch]),這里我們使用前面學(xué)習(xí)過的雙向的多對(duì)一的案例.lazy舉例說明Lazy設(shè)置在master里面的set里面,不是在one-to-many里如果不使用懶加載,SQLset集合對(duì)象,他會(huì)在獲取本類屬性的時(shí)候,set集合對(duì)象懶加載:不用的時(shí)候,SQL語句.當(dāng)你用的時(shí)候,他會(huì)獲取所有的屬性.在具有關(guān)set集合對(duì)象是,master里面的屬性,set集合.它只會(huì)發(fā)出一條SQL語句(因?yàn)樗紫仁菓屑虞d).set集合對(duì)象,SQL語句.一set集合,master屬性batch-size屬性Master對(duì)象時(shí),batch-size可以指定,Master關(guān)聯(lián)集合—Pets集合,初始化的個(gè)數(shù).batch-size1masterpet集合,如果數(shù)據(jù)庫里面有兩個(gè)master對(duì)象,SQL語句來獲取pets集合.2,則代表發(fā)SQLpets集合.batch-size修改不是在one-to-many,而是在他的父類的set里hqlfetch當(dāng)fetch="subselect"時(shí),等價(jià)于batch-size最大值。如果你還配置batch-sizebatch-size無效說明:Set集合對(duì)象是一樣的,因此這里我就不說13章hibernatehibernate5種方式對(duì)數(shù)據(jù)進(jìn)行檢索說明:前面我們了oid和對(duì)象圖導(dǎo)航查詢,現(xiàn)在重點(diǎn)是hql HQLhql的全稱(hibernatequerylanguage)hibernate查詢語言,是hibernate的。可以完成對(duì)數(shù)據(jù)的各種檢索,刪除,修改。添們還是使用session.save方法.Hql原理圖創(chuàng)建一個(gè)講解hql的測試項(xiàng)目-1:query步驟2:修改數(shù)據(jù)庫名和,即使用一個(gè)新的空的數(shù)據(jù)庫.tndb02[createdatabasetndb02charset=utf8]3:Test.javaJunitpublicvoid}INSERTINTOdeptVALUES(null,'ACCOUNTING','NEWYORK'),(null,'RESEARCH','DALLAS'),(null,'SALES',(null,'OPERATIONS',INSERTINTOempVALUES(null,'SMITH','CLERK', '1990-12-17',800.00,(null,'ALLEN',,'1991-2-20',1600.00,(null,'WARD',,'1991-2-22', (null,'JONES',,'1991-4-2',(null,'MARTIN',,'1991-9-5:添加一些測試數(shù)據(jù)hql測試.ziphibernate-sql.txt有測試數(shù)據(jù),'1991-5-1',,'1991-6-'SCOTT',''KING',''TURNER',,'1991-9-8','FORD',','1991-12-3',3000.00,HQL查詢-案例具體演示查詢所有的雇員Hql語句操作針對(duì)的是類和屬性;hqlselect1的所有雇員From前面沒有語句,e.dept=1DeptID1.1ID查詢id為10的雇員[如果我們明確的知道返回的就是一個(gè)數(shù)據(jù),uniqueResult()]:如果直接輸出對(duì)象,使用占位符完成查詢int是表示這個(gè)占位符是第幾個(gè),使用命名方式占位,設(shè)置值是使用的是名字,通過設(shè)置實(shí)體對(duì)象來查詢?cè)谳敵雠判虻臅r(shí)候有注意hql中排序的順序要和輸出的順序一致.上面的排序順序如果顛倒,得到的結(jié)果是的,所以還要注意排序的先后3個(gè)人,sqlselect*fromemporderbysaldesclimit3使用命名查詢方式檢索部門號(hào)為2大于2000的人:說明:1:要求:使用命名查詢方式檢索雇員號(hào)為2的人,2:使用指定的構(gòu)造器返回對(duì)象,要求:使用命名查詢方式檢索雇員號(hào)為2的人,要求:2000部門傳統(tǒng)的 selectdept_fk,avg(sal)fromempgroupbydept_fkhavingavg(sal)>案例:注意獲取持久類的部分屬性,迫切左外連接說明:迫切左外連接就在指在進(jìn)行左外連接查詢時(shí),將關(guān)聯(lián)的對(duì)象也查詢出來,比22號(hào)部門關(guān)聯(lián)的雇員信息也檢索出來案例:2返回的是對(duì)象,selectd是將這個(gè)對(duì)象都返回,select*.set集合的時(shí)候不SQL語句,在發(fā)出迫切左外連接會(huì)獲取它關(guān)聯(lián)的對(duì)象,hibernateSQLFetchhqlsql語句。使用普通的方式也可以完成小結(jié)leftjoinfetch[fetch體現(xiàn)迫切,不能去掉HQL語句的子查詢HQL刪除和更新案例:案例:請(qǐng)刪除id=10的雇員,請(qǐng)更新id=11的雇員,將號(hào)更新為hql測試環(huán)境搭建說明:這些題是mysql的時(shí)候作業(yè),使用hql來完成有部分完

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論