Hibernate的Criteria接口

来源:互联网 发布:好看的照相软件 编辑:程序博客网 时间:2024/05/16 09:34
一 Criteria接口
Criteria是一种比HQL更面向对象的查询方式。
Criteria的创建方式:
Criteria crit = session.createCriteria(DomainClass.class);
简单属性条件
criteria.add(Restrictions.eq(propertyName, value)),
criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName))
最简单案例:返回50条记录
Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();
限制结果集内容
List cats = sess.createCriteria(Cat.class).add( Restrictions.like("name", "Fritz%") ).add( Restrictions.between("weight",minWeight, maxWeight) ).list();

二 实战
package com.cakin.view;import java.util.Date;import java.util.List;import javax.management.RuntimeErrorException;import org.hibernate.Criteria;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.criterion.Order;import com.cakin.domain.Employee;import com.cakin.util.HibernateUtil;import com.cakin.util.MySessionFactory;public class TestMain {    /**     * @param args     */    public static void main(String[] args) {        Session session=HibernateUtil.getCurrentSession();        Transaction ts=null;        try {                ts=session.beginTransaction();            Criteria cri=session.createCriteria(Employee.class).            setMaxResults(2).addOrder(Order.desc("id") );            List<Employee> list=cri.list();            for(Employee e: list){                System.out.println(e.getName());            }            ts.commit();        } catch (Exception e) {            if(ts!=null){                ts.rollback();            }            throw new RuntimeException(e.getMessage());        }finally{            //关闭session            if(session!=null&&session.isOpen()){                session.close();            }        }    }}

三 测试结果
Hibernate:
    select
        this_.id as id0_0_,
        this_.name as name0_0_,
        this_.email as email0_0_,
        this_.hiredate as hiredate0_0_
    from
        employee this_
    order by
        this_.id desc limit ?
cakin
xiaoming

四 Criteric优点和缺点
优点:更加面向对象,如果你对hql语句不太了解,可以使用。
缺点:功能不如hql强大.而且hql是hibernate官方推荐使用的语句。

五 实例
package com.cakin.view;import java.util.List;import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.criterion.Restrictions;import com.cakin.util.*;import com.sina.domain.Course;import com.sina.domain.Studcourse;import com.sina.domain.Student;public class TestMain2 {    /**     * @param args     */    public static void main(String[] args) {        //查询年龄大于10岁的学生 criteria        Session s=HibernateUtil.getCurrentSession();        Transaction tx=s.beginTransaction();        Criteria cri=s.createCriteria(Student.class);        //添加检索条件        cri.add(Restrictions.gt("sage", new Integer(10)));        List<Student> list=cri.list();        for(Student s1: list){            System.out.println(s1.getSname());        }        tx.commit();    }}

六 测试结果
林青霞
刘德华
成龙
林可欣
周华健
周润发
原创粉丝点击