韓順平hibernate3.3視頻教程筆記.源碼匯總第3day_第1頁
韓順平hibernate3.3視頻教程筆記.源碼匯總第3day_第2頁
韓順平hibernate3.3視頻教程筆記.源碼匯總第3day_第3頁
韓順平hibernate3.3視頻教程筆記.源碼匯總第3day_第4頁
韓順平hibernate3.3視頻教程筆記.源碼匯總第3day_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、是目前 web 編程第一語言,歡迎詳情查看 htt韓順平老師力作,為什么要學習 hql(hibernate query language)-這個是? 刪除,功能強大ses.delete(對象) - 批量刪除? 添加ses.saveses.persist? 修改-批量修改sessin.update(對象)查詢 對象 obj obj.set();? 查詢load get查詢所有是 男的雇員?hql 的詳解為了講解清楚,我模擬一個學生選課系統(tǒng) ,創(chuàng)建三張表從創(chuàng)建的三張表,hibernate 設計者務邏輯,看出:在設計表的時候,應當每張表有一個主鍵,而且該主鍵最好不含業(yè)product 表id 12pr

2、oductNo bi001nj111name冰箱電腦price 10002000現(xiàn)在使用 hibernate 工具,自動生成對象 和文件,如果的表有主外鍵的關系,則應當先主表,再從表* uniqueResult 方法如果檢索一個對象,明確知道最多只有一個對象,則建議使用該方法:具體用法如下:Student s=(Student) ses.createQuery(from Student where sid=20050003).uniqueResult();System.out.pr*distinct 的用法過濾重復的/比如,顯示所有學生的List list=sesln(s.getSname()

3、;和.createQuery(select distinct sage,ssex from Student).list();for(i=0;ilist.size();i+)Object objs=(Object) list.get(i);System.out.prln(objs0.toString()+ +objs1.toString();*betn and.List list=ses.createQuery(select distinct sage,ssex,sname from Student where sage betn20 and 22).list();for(i=0;ilist.s

4、ize();i+)Object objs=(Object) list.get(i); System.out.prln(objs0.toString()+objs1.toString()+objs2.toString();*in /not in/查詢計算機系和外語系的學生信息List list=ses外語系).list();/取出 1. for 增強for(Student s:list).createQuery(from Student where sdept in (計算機系,System.out.prln(s.getSname()+ +s.getSaddress()+ +s.getSdept

5、();*group by 使用/顯示各個系的學生的平均List list=ses.createQuery(select avg(sage),sdept from sdept).list();/取出 1. for 增強for(Object obj:list)Student group bySystem.out.prln(obj0.toString()+ +obj1.toString();/having 的使用/1.對分組查詢后的結果,進行篩選:比如請顯示人數(shù)大于 3 的系名稱/a. 查詢各個系分別有多少學生.Listlist=ses.createQuery(selectcount(*)asc1,

6、sdeptfromStudent group by sdepving count(*)3).list();/取出 1. for 增強for(Object obj:list)System.out.prln(obj0.toString()+ +obj1.toString();少于 200 人的系/2 查詢/a.查詢各個系的有多個個List list=ses.createQuery(select count(*) as c1,sdept fromStudent where ssex=F group bysdept).list();/取出 1. for 增強for(Object obj:list)Sy

7、stem.out.prln(obj0.toString()+ +obj1.toString();/1.查詢計算機系共多少人?-如果返回的是一列數(shù)據(jù)/這時的取法是直接取出 list-object 而不是 list-ObjectList list=ses.createQuery(select sage fromStudent where sdept=計算機系).list();/取出 1. for 增強for(Object obj:list)System.out.prln(obj.toString();3.查詢選修 11 號課程的最高分和最低分.List list=ses.createQuery(s

8、elect11,max(grade),min(grade)fromStudcoursewhere course.cid=11).list();/取出 1. for 增強for(Object obj:list)System.out.pr min=+obj2.toString();ln(obj0.toString()+max=+obj1.toString()+/計算各個科目不及格的學生數(shù)量.(學生練習!)List list=ses.createQuery(select count(*),student.sdept from Studcourse where gradePreparedSement

9、set)使用參數(shù)綁定的好處有 3:1.可讀性提高, 2 效果高 3,防止 sql 注入? 面試題: 如果不使用參數(shù)綁定,怎樣防止登錄時, sql 注入? namepassword思路: 1. 通過用戶名,查詢出該用戶名在數(shù)據(jù)庫中對應的,然后再與用戶輸入的比較,如果相等,則用戶和法,否則,.參數(shù)綁定有兩種形式Query q=ses.createQuery(from Student where sdept=:dept and sage:age)如果的參數(shù)是 :冒號形式給出的,則的參數(shù)綁定應當這樣:List list=ses.createQuery(from Student where sdept=

10、:a1 and sage:sage).setString(a1, 計算機系).setString(sage, 2).list();還有一種形式:Query q=ses.createQuery(from Student where sdept=? and sage?)的參數(shù)是以 ? 形式給出的則,參數(shù)綁定應當:如果List list=ses.createQuery(from Student where sdept=? and sage?).setString(0, 計算機系).setString(1, 2).list();參數(shù)的綁定,可以分開寫:形式如下:Query query=ses.crea

11、teQuery(from Student where sdept=? and sage?);query.setString(0, 計算機系); query.setString(1, 2);List list=query.list();for(i=0;ilist.size();i+) Student s= list.get(i);System.out.prln(s.getSname()+ +s.getSage();把 HibernateUtil 升級了在文件中得到 hql 語句hibernate 提供了一種更加靈活的查詢方法:把 hql 語句配置到 對象關系22文件,在程序中,List list

12、=ses這樣獲取并執(zhí)行:.getNamedQuery(myquerytest).list();System.out.prln(list.size();Iterator it=list.iterator();while(isNext()Object obj=(Object)it.next();System.out.prln(n=+obj0);hibernate 對象的三種關系:1.2.3.4.one to one :人one to many部門 員工many-to-one員工部門many-to-many學生老師criterial 使用:/查詢大于 10 歲的學生 criteriaSesTrans

13、=HibernateUtil.getCurrentSes();ion tx=s.begranion();Criteria cri=s.createCriteria(Student.class);/添加檢索條件 cri.add(Restrictions.gt(sage, new Long(10); List list=cri.list();for(Student s1: list)System.out.prln(s1.getSname();mit();hibernate 開發(fā)的三種方式中的:編寫這里object +文件 - 創(chuàng)建出對應的數(shù)據(jù)庫,說明如果要自動的創(chuàng)建出對應的數(shù)據(jù)庫,需要做配置(hi

14、bernate.cfg.xml).create這里有四個配置值: create , update , create-drop, validatecreate : 當?shù)膽贸绦蚣虞d hibernate.cfg.xml new Configuration().config(); 就會根據(jù)映射文件,創(chuàng)建出數(shù)據(jù)庫, 每次都會重新創(chuàng)建, 原來表中的數(shù)據(jù)就沒有!update: 如果數(shù)據(jù)庫中沒有該表,則創(chuàng)建,如果有表,則看有沒有變化,如果有變化,則更新.create-drop: 在顯示關閉 sesFactory 時,將 drop 掉數(shù)據(jù)庫的 schemavalidate: 相當于每次數(shù)據(jù)之前都會驗證數(shù)據(jù)庫中

15、的表結構和 hbm 文件的結構是否一致在開發(fā)測試中,配置哪個都可以測試,但是如果項目發(fā)布后,最好自己配置一次,讓對應的數(shù)據(jù)庫生成,完后取消配置,1.2.3.4.5.對象的細節(jié):需要一個無參的構造函數(shù)(用于 hibernate 反射該對象)應當有一個無業(yè)務邏輯的主鍵屬性.給每個屬性提供 get set 方法.在 domian 對象中的屬性,只有配置到了對象屬性一般是 private 范圍文件后,才會被 hiberante 管理.對對象關系文件的說明對象關系文件中,有些屬性是可以不配,hibernate 會采用默認機制,比如 table 值不配,則以類的小寫做表名 type 不配置,則hibern

16、ate 會根據(jù)類的屬性類型,選擇一個適當?shù)念愋蚳ibernate 對象的三種狀態(tài),轉換圖:面試圖:如果判斷一個對象處于怎樣的狀態(tài)?主要的依據(jù)是: 1.瞬時態(tài): 沒有 ses持久態(tài): 有 ses脫管態(tài)/游離態(tài):看該對象是否處于 ses, 2, 看在數(shù)據(jù)庫中有沒有對應的管理,同時數(shù)據(jù)庫沒有對應管理,同時在數(shù)據(jù)庫中有沒有 ses.管理,但是在數(shù)據(jù)庫中有懶加載:簡述: 當查詢一個對象的時候,在默認情況下,返回的只是該對象的普通屬性,當用戶去使用對象屬性時,才會向數(shù)據(jù)庫發(fā)出再一次的查詢.這種現(xiàn)象解決方法可以這樣:稱為 lazy 現(xiàn)象.1.2.3.顯示初始化 Hibernate.initized(修改對象關系文件 lazy改寫通過過濾器(web 項目) openSes對象) lazy=falseInViewhibernate 對象的關系many-to-one one-to-many1.2.看

溫馨提示

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

評論

0/150

提交評論