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