課程思維導圖t5hibernate查詢_第1頁
課程思維導圖t5hibernate查詢_第2頁
課程思維導圖t5hibernate查詢_第3頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

HibernateQueryLanguage(HQL)QueryByCriteriaNativeHibernateQueryHibernateQueryHibernateQueryLanguage(HQL)提供了十分強大的功能,推薦大家使用這種查詢方式。HQL具有與SQL語言類似的語 范,只不過SQL針對表中字段進行查詢,而HQL針對持久化對象,它用來取得對象,而不進行update、delete和insert等操作。而且HQL是完全面向?qū)ο?.fromfrom單的HQLfromStudent,也可以寫成selectsfromStudents。它簡單地返回Student除了Java,HQL上一句HQLfromFROM但是Studentstudent寫成fromstudent報錯。下列程序演示如何通過執(zhí)行fromStudent象。Queryquery=session.createQuery(“fromStudent”);Listlist=query.list();for(inti=0;i<list.size();i++){Studentstu=(Student)list.get(i);System.out.println(stu.getName());}如果執(zhí)行HQL語句“fromStudent,Course”,并不簡單地返回兩個對象,而是返回這兩個對 積,這類似于SQL語句中字段的全外連接。在實際應用中,像“fromStudent,有時并不需要得到對象的所有屬性,這時可以使用select,selectfromStudents。下面程序演示如何執(zhí)行這個語句:Queryquery=session.createQuery(“selectfromStudents”);Listlist=query.list();for(inti=0;i<list.size();i++){Stringname=(String)list.get(i);System.out.println(ame());Queryquery=session.createQuery(“select,s.sexfromStudentass”);Listlist=query.list();for(inti=0;i<list.size(iObjectobj(Object[])list.get(i);System.out.println(ame(obj[0]+“的是:”+obj[1]));}在使用屬性查詢時,由于使用對象數(shù)組,操作和理解都不太方便,如果將一個object[publicStudent(Stringname,Stringsex){=name;this.sex=sex;}可以在HQL有count():統(tǒng)計記錄條數(shù)min():求最小值max():求最大值sum(age():求平均值例如,要取得Student如下HQL取得Student的平 的HQL語句如下selectavg(s.age)fromStudentasselectcount(*)fromQueryquery=session.createQuery(“selectnewStudent(,s.sex)fromStudents”);Listlist=query.list();for(inti=0;i<list.size();i++){Studentstu=(Student)list.get(i);System.out.println(stu.getName());}selectdistincts.agefromStudentasHQLHQLwhere這一機制。where表范圍,例如下面語句會返回所有名字為“Bill”的StudentQueryquery=session.createQuery("fromStudentasswhere='Bill'");where子句允許出現(xiàn)的表達式包括了SQL中可以使用的大多數(shù)情況:數(shù)學操作:+,-,*,/ 較操作:=,>=,<=,<>,!=,like邏輯操作:and,or,not字符串連接:||SQL標量函數(shù):例如upper()和lower()all:表示所有的記錄。any:表示所有記錄中的任意一條。some:與anyin:與anyexists:表示子查詢至少要返回一條記錄。 都大于22的班級對象 等于22的班級fromGroupgwhere22<all(selects.agefromg.students或或fromGroup或或fromGroupgwhere22in(selects.agefromg.studentsfromGroupgwhere22=some(selects.agefromg.students5.orderbyfromStudentsascdesc序SQL樣HQLinnerjoin:leftouterjoin:左外連接rightouterjoinfulljoin:全連接,但不常用innerjoin簡寫為join,例如在查詢得到Group對應的Student……//打開Session,開啟事務Student stu=null; 實例Group group=null;// Group實例Queryquery=session.createQuery("fromGroupgjoing.students");Listlist=query.list();Objectobj[]=null; for(inti=0;i<list.size();i++) {obj=(Object[])list.get(i);//取得集合中的第i個數(shù)組group=(Group)obj[0]; //group是數(shù)組中第一個對象stu=(Student)obj[1]; //stu是數(shù)組中第二個對象System.out.println(stu.getName()+"屬于:"+group.getName()關閉QueryBy當查詢數(shù)據(jù)時,人們往往需要設置查詢條件。在SQLHQL常放在where子句中。此外,HibernateCriteria(CriteriaQuery),這種查詢方式把查詢條件封裝為一個CriteriaSessioncreateCriteria()方法構建一個org.hibernate.CriteriaCriteriaadd()方法加入到fromGroupgwhere22=any(selects.agefromg.students例程1- Criteriacr=session.createCriteria(Student.class);//生成一Criteriacr=session.createCriteria(Student.class);//生成一個Criteria象cr.add(Restrictions.eq("name","Bill"));//等價于wherename=’BillListlistcr.list();StudentstuStudent)list.get(0);詢限制機制。它提供了許多方法,以實現(xiàn)查詢限制。這些方法及其他一些criteria制方法列于表1-1。表1- CriteriaQuery常用的查詢限制方 參數(shù)為Map使用key/value相當greater-than,less-than,less-equal,對應SQLbetween對應SQLlike對應SQLinandor判斷屬性是否為空,為空返回true,否則返回Mat字符串精確匹配,相當于“l(fā)ikeMat字符串在中間位置,相當于“l(fā)ikeMat字符串在最前面的位置,相當于“l(fā)ikeMat字符串在最后面的位置,相當于“l(fā)ike例1:查詢學生名字以t開頭的所有Student對象 以字母F開頭的所有Student對象,并 例3:查詢學生 在Bill,Jack和Tom之間的所有Student對象 式Criteriacr=session.createCriteria(Student.class);cr.add(Restrictions.like(“name”,“F%”);cr.addOrder(Order.asc(“name”));Listlist=cr.list();Studentstu=(Student)list.get(0);Criteriacr=session.createCriteria(Student.class);cr.add(Restrictions.eq(“age”,newInteger(22));cr.add(Restrictions.isNull(“age”));Listlist=cr.list();Studentstu=(Student)list.get(0);String[]names={“Bill”,“Jack”,“Tom”}Criteriacr=session.createCriteria(Student.class);cr.add(Restrictions.in(“name”,names))Listlist=cr.list();Studentstu=(Student)list.get(0);Criteriacr=session.createCriteria(Student.class);cr.add(Restrictions.like(“name”,“t”,Mat ode.START))Listlist=cr.list();Studentstu=(Student)list.get(0);Criteriacr=session.createCriteria(Student.class);cr.add(Restrictions.like(“name”,“t%”))Listlist=cr.list();Studentstu=(Student)list.get(0);調(diào)用調(diào)用Order.asc應是CriteriaaddOrder()方法。在Criteria查詢中使用 來表示預先抓?。‥agerfetching),如下所示可以使用CriteriaAPI示Criteriacr=session.createCriteria(Group.class); ode(“students”,Fet cr.add(Restrictions.like(“name”,“2005”,Mat ode.END))Listlist=cr.list();fromGlikeselectg.*,s.*fromGroupgleftouterjoinStudentsong.id=s.group_idwherelike'%2005'NativeSQLNativeSQL本地本地SQL查詢(NativeSQLQuery)指的是直接使用本地數(shù)據(jù)庫(如Oracle)的SQL語言進行查詢。它能夠掃清你把原來直接使用SQL/JDBC的程序遷移到基于Hibernate應用的 。Stringsql="select{s.*}fromt_studentswheres.age>22";SQLQueryslqQuery=session.createSQLQuery(sql);sqlQuery.addEntity("s",Student.class);Listlist=sqlQuery.list();for(intStringsql="select{s.*}fromt_studentswheres.age>22";SQLQueryslqQuery=session.createSQLQuery(sql);sqlQuery.addEntity("s",Student.class);Listlist=sqlQuery.list();for(inti=0;list.size();i++){Studentstu=(Student)list.get(i);System.out.println(stu.getAge()+""+stu.getName());}createSQLQuery(Stringsql)利用傳入的SQL一個SQLQuery(SQLQueryQuery的子接口)。使用這個方法時,還需要傳入查詢的實體類,因此要配合SQLQuerypublicSQLQueryaddEntity(Stringalias,Class{}號用 數(shù)據(jù)表的別名,例如以上代碼中{s.*}表示使用s來作為t_student表的別名2.命名SQLHQL用命名SQL詢例如在Student.hbm.xml命名SQL所示 SQL ><classname="Student"table="student"lazy="false">……</class><sql-queryname="QueryStudents"><![CDATA[select{s.*}fromt_studentswheres.age>22]]><returnalias="s"class="Student"/></sql-query></hibernate-map 編寫如下代碼來調(diào)用這個命名SQL義編寫如下代碼來調(diào)用這個命名SQL義的Queryquery=session.getNamedQuery(“QueryStudents”);query.setInteger(“age”,22);Listlist=query.list();for(inti=0;list.size();i++){Studentstu=(Student)list.get(i);System.out.println(stu.getAge()+“”+stu.getName());}……<sql-queryname=”QueryStudents”><![CDATA[select{s.*}fromt_studentswheres.age>:age]]><returnalias=”s”class=”Student”/></sql-query>…..3.自定義insert、updatedeleteHibernate3.x添了<sql-insert>、<sql-update><sql-delete>3可以使用這3己的insert、update和delete例如在Student.hbm.xml ><classname="Student"table="student"lazy="false"><idname="id"unsaved-value="null"type="string"column="id"><generatorclass="uuid.hex"/><propertyname="name"type="string"/><propertyname="age"type="int"/><sql-<!--insert句-->insertintot_student(name,age,id)values(?sql-insert>sql-update>updateupdatet_studentsetna

溫馨提示

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

評論

0/150

提交評論