Criteria示例

package cn.bdqn.test;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.SimpleExpression;
import org.junit.Test;
import org.junit.experimental.theories.suppliers.TestedOn;

import cn.bdqn.bean.Dept;
import cn.bdqn.bean.Emp;
import cn.bdqn.util.HibernateSessionFactory;

/**
 * 
 * @author Administrator Criteria 相关查询
 */
public class CriteriaTest {

    // 查询所有的部门信息
    @Test
    public void test1() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        // 创建criteria对象
        Criteria criteria = session.createCriteria(Dept.class);
        // 获取集合
        List<Dept> list = criteria.list();
        for (Dept dept : list) {
            System.out.println("部门编号:" + dept.getId() + "	部门名称:"
                    + dept.getName());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }

    // 查询在一区的部门信息(eq)
    @Test
    public void test2() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        /*
         * //01.创建criteria对象 Criteria criteria =
         * session.createCriteria(Dept.class); //增加条件 Criterion criterion =
         * Restrictions.eq("loc", "一区"); criteria=criteria.add(criterion);
         * List<Dept> list = criteria.list();
         */
        // 02.拼接
        List<Dept> list = session.createCriteria(Dept.class)
                .add(Restrictions.eq("loc", "一区")).list();
        for (Dept dept : list) {
            System.out.println("部门编号:" + dept.getId() + "	部门名称:"
                    + dept.getName());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }

    // 查询员工薪水大于2000的(gt)
    @Test
    public void test3() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        List<Emp> list = session.createCriteria(Emp.class)
                .add(Restrictions.gt("salary", 4000d)).list();
        for (Emp emp : list) {
            System.out.println("员工的姓名:" + emp.getName() + "	员工薪水:"
                    + emp.getSalary());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }

    // 查询员工薪水在2000和7000之间的员工(between)
    @Test
    public void test4() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        List<Emp> list = session.createCriteria(Emp.class)
                .add(Restrictions.between("salary", 2000d, 7000D)).list();
        for (Emp emp : list) {
            System.out.println("员工的姓名:" + emp.getName() + "	员工薪水:"
                    + emp.getSalary());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }

    // 查询不属于任何部门的员工(isNull)
    @Test
    public void test5() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        List<Emp> list = session.createCriteria(Emp.class)
                .add(Restrictions.isNull("dept")).list();
        for (Emp emp : list) {
            System.out.println("员工的姓名:" + emp.getName() + "	员工的部门:"
                    + emp.getDept());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }

    // 查询没有员工的部门(isEmpty)
    @Test
    public void test6() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        List<Dept> list = session.createCriteria(Dept.class)
                .add(Restrictions.isEmpty("emps")).list();
        for (Dept dept : list) {
            System.out.println("没有员工的部门:" + dept.getName());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }

    // 查询职位是保安的员工
    @Test
    public void test7() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        List<Emp> list = session.createCriteria(Emp.class)
                .add(Restrictions.eq("job", "保安")).list();
        for (Emp emp : list) {
            System.out.println("员工的姓名:" + emp.getName() + "	员工的部门:"
                    + emp.getDept());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }

    // 01.查询职位是保安或者保姆的员工
    @Test
    public void test8() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        List<Emp> list = session
                .createCriteria(Emp.class)
                .add(Restrictions.or(Restrictions.eq("job", "保安"),
                        Restrictions.eq("job", "保姆"))).list();
        for (Emp emp : list) {
            System.out.println("员工的姓名:" + emp.getName() + "	员工的部门:"
                    + emp.getDept());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }
    // 02.查询职位是保安或者保姆的员工
    @Test
    public void test9() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        //定义一个集合用来保存这两个职位
        List jobList=new ArrayList();
        jobList.add("保安");
        jobList.add("保姆");
        //增加条件
        List<Emp> list = session.createCriteria(Emp.class).add(Restrictions.in("job", jobList)).list();
        for (Emp emp : list) {
            System.out.println("员工的姓名:" + emp.getName() + "	员工的部门:"
                    + emp.getDept());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }
    
    //查询职位是保安或者保姆再或者是保姆1的员工(disjunction适合多条件)
    @Test
    public void test10() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        //增加条件
        List<Emp> list = session.createCriteria(Emp.class)
                .add(Restrictions.disjunction()
                        .add(Restrictions.eq("job", "保安"))
                        .add(Restrictions.eq("job", "保姆"))
                        .add(Restrictions.eq("job", "保姆1"))
                        ).list();
        for (Emp emp : list) {
            System.out.println("员工的职位:" + emp.getJob() + "	员工的部门:"
                    + emp.getDept());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }
    //查询员工姓名中包含a的所有员工(like)
    @Test
    public void test11() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        //增加条件
        List<Emp> list = session.createCriteria(Emp.class)
                .add(Restrictions.like("name", "%a%")).list();
        for (Emp emp : list) {
            System.out.println("员工的姓名:" + emp.getName() + "	员工的部门:"
                    + emp.getDept());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }
    
    //查询员工姓名中包含a的所有员工(ilike 忽略大小写)
    @Test
    public void test12() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        //增加条件
        List<Emp> list = session.createCriteria(Emp.class)
                .add(Restrictions.ilike("name", "%a%")).list();
        for (Emp emp : list) {
            System.out.println("员工的姓名:" + emp.getName() + "	员工的部门:"
                    + emp.getDept());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }
    
    /*
     * 查询员工姓名中包含a的所有员工(ilike 忽略大小写) 不使用%  使用MatchModle.ANYWHERE
     * ignoreCase()这也是忽略大小写
     */
    @Test
    public void test13() {
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        //增加条件
        List<Emp> list = session.createCriteria(Emp.class)
                .add(Restrictions.ilike("name", "a",MatchMode.ANYWHERE)).list();
        for (Emp emp : list) {
            System.out.println("员工的姓名:" + emp.getName() + "	员工的部门:"
                    + emp.getDept());
        }
        // 关闭session
        HibernateSessionFactory.closeSession();
    }
    
    /*
     * ************分页**************
     *查询员工职位是 保安 ,并且按照薪水进行降序排列(Order.desc)
     *
     */
    @Test
    public void pageList(){
        // 打开session
        Session session = HibernateSessionFactory.getSession();
        //查询总记录数的条件
        Criteria criteria = session.createCriteria(Emp.class)
        .add(Restrictions.eq("job", "保安")).setProjection(Projections.count("id"));
        //开始查询
        int counts = ((Long)criteria.uniqueResult()).intValue();
        //每页显示几条记录
        int pageSize=2;  
        //总页数
        int totalPage=(counts%pageSize==0)?(counts/pageSize):(counts/pageSize+1);
        //当前页码
        int pageIndex=3;
        //薪水降序
        criteria= session.createCriteria(Emp.class)
         .add(Restrictions.eq("job", "保安"))
         .addOrder(Order.desc("salary"));
        //开始分页
      List<Emp> list=     criteria.setFirstResult((pageIndex-1)*pageSize)
         .setMaxResults(pageSize).list();
        for (Emp emp : list) {
            System.out.println(emp.getName()+"	薪水"+emp.getSalary());
        }
        System.out.println("总记录数"+counts);
        System.out.println("总页数"+totalPage);
        System.out.println("当前页数"+pageIndex);
        // 关闭session
        HibernateSessionFactory.closeSession();
    }
}
原文地址:https://www.cnblogs.com/go4mi/p/5564683.html