org.hibernate.criterion.Restrictions
HQL(Hibernate Query Language) 和 Criteria 都是面向對象的查詢,只不過Criteria更面向對象,Criteria和Restrictions這個類連用來實現條件查詢
下面給出一個小例子:
這里只列出其中一個頁面,其它頁面都沒有列出,主要是讓大家看看Query和Criteria怎么用
首先是Query的用法:
1 package cn.itcast.hibernate.domain; 2 import java.util.ArrayList; 3 import java.util.Date; 4 import java.util.List; 5 import org.hibernate.Query; 6 import org.hibernate.Session; 7 import cn.itcast.hibernate.method.MethodManager; 8 public class QueryTest { 9 /** 10 * @param args 11 */ 12 public static void main(String[] args) { 13 User user = new User(); 14 15 for(int i=1; i<5; i++) { 16 user.setName("Aaron"+i); 17 user.setBirthday(new Date()); 18 MethodManager.addUser(user);//保存數據 19 } 20 User ss = new User(); 21 ss.setName("Aaron1"); 22 ss.setBirthday(new Date()); 23 MethodManager.addUser(ss); 24 25 User ss1 = new User(); 26 ss1.setName("Aaron1"); 27 ss1.setBirthday(new Date()); 28 MethodManager.addUser(ss1); 29 30 query("Aaron1"); 31 } 32 @SuppressWarnings("unchecked") 33 static void query(String userName){ 34 Session session = null; 35 try{ 36 session = HibernateUtils.getSession(); 37 String hql = "from User user where user.name = ?"; 38 //String hql1 = "from User user where user.name.birthday is not null"; //多個屬性不為空 39 //String hql = "from User as user where user.name = :ss"; 40 Query query = session.createQuery(hql); 41 query.setString(0, userName);//問號的位置從0開始 42 //query.setString("ss", userName);//當多個問號時,可以指定別名,這樣可以防止混亂 43 44 query.setFirstResult(0);//表示從結果集的第一條記錄開始 45 query.setMaxResults(10);//表示每次取20條記錄,這樣可以實現跨數據庫分頁 46 List<User> list = query.list(); 47 /* Iterator<User> iterator = query.iterate(); 48 while(iterator.hasNext()){ 49 System.out.println(iterator.next().getName()); 50 } */ 51 52 //User u = (User)query.uniqueResult();//確定獨一無二的結果 53 //System.out.println(u); 54 55 /* List names = new ArrayList(); 56 names.add("Aaron1"); 57 names.add("Aaron2"); 58 Query q = session.createQuery("from User user where user.name in (:naa) order by user.birthday desc"); 59 q.setParameterList("naa", names); 60 61 List<User> cats = q.list(); 62 for(User userList : cats){ 63 System.out.println(userList.getName()+","+userList.getBirthday()); 64 } 65 *///查詢條件是一個集合 66 67 for(User userList : list){ 68 System.out.println(userList.getName()+","+userList.getBirthday()); 69 } 70 } finally { 71 if(session!=null) 72 session.close();//必須關閉session 73 } 74 } 75 }
Criteria的用法:
package cn.itcast.hibernate.domain; import java.util.Date; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.criterion.Restrictions; import cn.itcast.hibernate.method.MethodManager; public class CriteriaQuery { /** * @param args */ public static void main(String[] args) { User user = new User(); for(int i=1; i<5; i++) { user.setName("Aaron"+i); user.setBirthday(new Date()); MethodManager.addUser(user);//保存數據 } User ss = new User(); ss.setName("Aaron1"); ss.setBirthday(new Date()); MethodManager.addUser(ss); User ss1 = new User(); ss1.setName("Aaron1"); ss1.setBirthday(new Date()); MethodManager.addUser(ss1); query("Aaron1"); } @SuppressWarnings("unchecked") static void query(String userName){ Session session = null; try{ //Criteria和Restrictions實現條件查詢 session = HibernateUtils.getSession(); Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.eq("name", userName)); criteria.add(Restrictions.le("birthday", new Date()));//多個add表示與 // criteria.add(Restrictions.or(Restrictions.eq("name", userName), Restrictions.eq("name", "Aaron2")));//表示邏輯或,表示名字為Aaron和Aaron1的都查詢出來 criteria.addOrder(Order.desc("id")); //按照id倒序 //criteria.setFirstResult(0); //criteria.setMaxResults(30); List<User> list = criteria.list(); for(User userList : list){ System.out.println(userList.getName()+","+userList.getBirthday()); } } finally { if(session!=null) session.close();//必須關閉session } } }
文章出處:http://hi.baidu.com/quandang/item/18cc13dc228b2c50d63aaec0