教案查詢分析_第1頁
教案查詢分析_第2頁
教案查詢分析_第3頁
教案查詢分析_第4頁
教案查詢分析_第5頁
免費預覽已結束,剩余13頁可下載查看

下載本文檔

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

文檔簡介

1、Hibernate查詢Hibernate查詢概述:數(shù)據(jù)查詢與檢索是Hibernate中的一個亮點。相對其他ORM實現(xiàn)而言,Hibernate提供了靈活多樣的查詢機制。標準化對象查詢(Criteria Query):以對象的方式進行查詢,將查詢語句封裝為對象操作。優(yōu)點:可讀性好,符合Java 程序員的編碼習慣。缺點:不夠成熟,不支持投影(projection)或統(tǒng)計函數(shù)(aggregation)Hibernate語言查詢(Hibernate Query Language,HQL):它是完全面向對象的查詢語句,查詢功能非常強大,具備多態(tài)、關聯(lián)等特性 。Hibernate官方推薦使用HQL進行查詢。

2、Native SQL Queries(原生SQL查詢):直接使用標準SQL語言或跟特定數(shù)據(jù)庫相關的SQL進行查詢。Hibernate查詢語言(HQL)HQL用面向對象的方式生成SQL以類和屬性來代替表和數(shù)據(jù)列支持多態(tài)支持各種關聯(lián)減少了SQL的冗余HQL支持所有的關系數(shù)據(jù)庫操作連接(joins,包括Inner/outer/full joins),笛卡爾積(cartesian products)投影(projection)聚合(Aggregation,max, avg)和分組(group)排序(Ordering)子查詢(Subqueries)SQL函數(shù)(SQL function calls)例子:

3、 Hibernate查詢語言(HQL)簡單例子:查詢用戶名以“J”開頭的所有用戶。Query query = session.createQuery(from User user where like J%); List users = query.list();復雜例子:從User和Group中查找屬于“admin”組的所有用戶。Query query = session.createQuery(“from User user where =admin”);如果用傳統(tǒng)的SQL則查詢語句如下:select user.userId as user

4、Id, as name, user.groupId as groupId, user.idCardId as idCardId from TBL_USER user, TBL_GROUP group where (group.groupName=admin and user.groupId=group.groupId)HQL查詢步驟獲取Hibernate的Session對象編寫HQL語句session.createQuery(HQL)創(chuàng)建Query對象query.setXXX設置查詢參數(shù)query.list()得到查詢結果(持久化實體集)HQL最終轉換成SQL到數(shù)據(jù)庫執(zhí)行在

5、hibernate.cfg.xml中設置show_sql屬性為true輸出對應的sql:trueHQL查詢參數(shù)?session.createQuery(“from User where id=?”). setInteger(0,1):參數(shù)名session.createQuery(“from User where id=:userid”). setInteger(“userid”,1)分頁控制setFirstResult(int firstResult);setMaxResults(int maxResults);HQL子句from子句from as 對象 where .結果為持久化類的對象集合

6、關聯(lián)和連接隱式連接:from User u where u.group.id=2;返回User對象的集合顯式連接:from User u inner join u.group g with u.group.id=g.id where g.id=2返回以User對象和Group 對象組成的數(shù)據(jù)為元素的集合select子句選擇指定屬性或某個實體select from User as uselect u.group from User as u返回Listselect new list(u.id,) from User as u;返回java對象seleect new My

7、Class(u.id,) from User as u返回Mapselect new map(u.id,) from User as u聚合函數(shù)同SQL的聚合函數(shù)where子句篩選結果,一般使用隱式連接查詢from User as u where u.group.region.city=hz支持SQL的條件表達式(P485)子查詢HQL子查詢只可以出現(xiàn)在select子句或where子句中命名查詢在映射文件中配置元素在程序中通過session.getNamedQuery(“queryName”)調用。在hibernate.cfg.xml的hibernate-mapping

8、元素中添加 在代碼中調用命名查詢Query query = session.getNamedQuery(getUserByName); query.setParameter(name, name); query.list();標準化對象查詢(Criteria Query)標準化查詢的三個基礎類Criteria:代表一次查詢Criterion:代表一個查詢條件Restrictions:產(chǎn)生查詢條件的工具類更具面向對象特色Criteria查詢步驟獲取Hibernate的session對象session.createCriteria創(chuàng)建Criteria對象使用Restrictions的靜態(tài)方法創(chuàng)建C

9、riterion查詢條件向Criteria查詢中添加Criterion查詢條件criteria.list()方法返回結果集例子:標準化對象查詢(Criteria Query)簡單例子:查詢用戶名以“J”開頭的所有用戶。Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.ilike(“name, “J%); List users = criteria.list();原生SQL語句查詢可以利用數(shù)據(jù)庫本身特性原JDBC業(yè)務遷移 邏輯復雜的SQL調用存儲過程 通過SQLQuery接口完成 執(zhí)

10、行SQL語句查詢的步驟獲取Hibernate的session對象寫SQL語句session.createSQLQuery創(chuàng)建查詢對象query.setXXX為SQL參數(shù)賦值query.addScalar()將查詢結果與標量值相關聯(lián);query.addEntity()將查詢結果與實體對象相關聯(lián)query.list()返回實際結果集標量查詢:返回Object或Object為元素的Listsession.createSQLQuery(“select * from user_table”).addScalar(“name”,StandardBasicTypes.STRING). addScalar(“

11、id”,StandardBasicTypes.INTEGER).list()實體查詢:返回指定實體對象為元素的Listsession.createSQLQuery(“select * from user_table where age:age and gender=:gender”).addEntity(User.class).setInteger(“age”,18).setString(“gender”,”female”).list()轉換成ValueObject通過Transformer對象將結果集的記錄轉換成為javabean對象(ValueObject)session.createSQLQuery(“select ca.id, as teacherName, as courseName, as roomName ca.time as courseTime,ca.num from course_arrange ca,course c,teacher t,room r where ca.course_id=c.id and ca.teacher_id=t.id and ca.room_id=r.id”).setResultTransformer(Transformers.aliasToBean(CourseArrangeBean

溫馨提示

  • 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

提交評論