您好,登錄后才能下訂單哦!
這篇文章主要介紹了Criteria查詢語句的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
Criteria查詢
package com.shiryu.otm; import java.util.Iterator; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Expression; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.criterion.Subqueries; public class Test2 { public static void main(String args[]) { SessionFactory factory = new Configuration().configure().buildSessionFactory(); Session session = factory.openSession(); Transaction tr = session.beginTransaction(); // Criteria查詢語句的補充 // 一、復合查詢 // 在這個一對多的例子中。我們使用復合查詢,查詢所有用戶及其地址。 // Criteria criteria = session.createCriteria(User.class); // List list = criteria.list(); // // for (int i = 0; i < list.size(); i++) { // User user = (User) list.get(i); // System.out.println("\t user:"+i+" name is:" + user.getName()); // // Set addrSet = user.getAddresses(); // Iterator it = addrSet.iterator(); // while(it.hasNext()){ // Address addr = (Address)it.next(); // System.out.println("\t\t user:"+i+" address is:"+addr.getAddress()); // } // } // 通過Criteria查詢條件,我們可以查詢位于上海的用戶 // Criteria criteria = session.createCriteria(User.class); // // Criteria addCriteria = // criteria.createCriteria("addresses");//這里addresses和User類對應 // addCriteria.add(Expression.like("address", // "%shanghai%"));//這里構造新的Criteria查詢過濾條件 // List list = criteria.list(); // // for (int i = 0; i < list.size(); i++) { // User user = (User) list.get(i); // System.out.println("\t user:" + i + " name is:" + user.getName()); // // Set addrSet = user.getAddresses(); // Iterator it = addrSet.iterator(); // while (it.hasNext()) { // Address addr = (Address) it.next(); // System.out.println("\t\t user:" + i + " address is:" // + addr.getAddress()); // } // } /* * 二、DetachedCriteria的使用 hibernate2 中critria * 生命周期位于宿主Session生命周期之內,session創建criteria實例,Session被銷毀,critria實例也隨之失效 * 這很大程度上限制了criteria的重用hibernate3 中提供了DetachedCriteria * 它可以脫離Session實例獨立存在,我們可以把通用的criteria查詢條件進行抽離,更好的實現代碼重用 */ DetachedCriteria deCriteria = DetachedCriteria.forClass(User.class); deCriteria.add(Expression.eq("name", "zhaiyu")); deCriteria.add(Expression.eq("age", new Integer(21))); Criteria criteria = deCriteria.getExecutableCriteria(session);// 在其需要的時候與session進行綁定 Iterator it = criteria.list().iterator(); while (it.hasNext()) { User user = (User) it.next(); System.out.println(user.getName()); } /* * DetachedCriteria 也可以用于子查詢表達 下例返回了年齡超過了平均值的用戶記錄 */ DetachedCriteria avgAge = DetachedCriteria.forClass(User.class); avgAge.setProjection(Projections.avg("age")); Criteria criteria2 = session.createCriteria(User.class); criteria2.add(Subqueries.propertyGt("age", avgAge)); List list = criteria2.list(); // 我們可以將DetachedCriteria納入查詢表達式 :select ... from User where age > (select // avg(age) from User) // (select avg(age) from User) 由DetachedCriteria avgAge描述 /* 三、Criteria查詢語句的高級特性 */ // 限定返回記錄范圍 Criteria criteria3 = session.createCriteria(User.class); // 限定從第100條開始的20條記錄 criteria3.setFirstResult(100); criteria3.setMaxResults(20); // 對記錄進行排序 Criteria criteria4 = session.createCriteria(User.class); criteria4.add(Expression.eq("id", new Integer(2))); criteria4.addOrder(Order.asc("name")); criteria4.addOrder(Order.desc("id")); /* Criteria分組與統計 */ Criteria criteria5 = session.createCriteria(User.class); criteria5.setProjection(Projections.groupProperty("age")); Iterator it3 = criteria5.list().iterator(); while (it.hasNext()) { System.out.println(it.next()); } } }
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Criteria查詢語句的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。