Hibernate中Restrictions类的方法简介

org.hibernate.criterion.Restrictions

HQL(Hibernate Query Language) 和 Criteria   都是面向对象的查询,只不过Criteria更面向对象,Criteria和Restrictions这个类连用来实现条件查询

下面给出一个小例子:

这里只列出其中一个页面,其它页面都没有列出,主要是让大家看看Query和Criteria怎么用

首先是Query的用法:

package cn.itcast.hibernate.domain;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import cn.itcast.hibernate.method.MethodManager;
public class QueryTest {
/**
* @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{
    session = HibernateUtils.getSession();
    String hql = "from User user where user.name = ?";
    //String hql1 = "from User user where user.name.birthday is not null"; //多个属性不为空
    //String hql = "from User as user where user.name = :ss";
    Query query = session.createQuery(hql);
    query.setString(0, userName);//问号的位置从0开始
   //query.setString("ss", userName);//当多个问号时,可以指定别名,这样可以防止混乱
   
    query.setFirstResult(0);//表示从结果集的第一条记录开始
    query.setMaxResults(10);//表示每次取20条记录,这样可以实现跨数据库分页     
   List<User> list = query.list();
   /* Iterator<User> iterator = query.iterate();
    while(iterator.hasNext()){
     System.out.println(iterator.next().getName());
    } */
   
    //User u = (User)query.uniqueResult();//确定独一无二的结果
    //System.out.println(u);
   
/*   List names = new ArrayList();
    names.add("Aaron1");
    names.add("Aaron2");
    Query q = session.createQuery("from User user where user.name in (:naa) order by user.birthday desc");
    q.setParameterList("naa", names);
   
    List<User> cats = q.list();
    for(User userList : cats){
     System.out.println(userList.getName()+","+userList.getBirthday());
    }
    *///查询条件是一个集合
  
    for(User userList : list){
     System.out.println(userList.getName()+","+userList.getBirthday());
    }
   } finally {
    if(session!=null)
     session.close();//必须关闭session
   }
}
}



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
   }
}
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值