Criteria查询

Posted -EASY-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Criteria查询相关的知识,希望对你有一定的参考价值。

查询所有部门信息:

/**
         * 查询所有部门信息
         */
        @Test
        public void groupTest(){
            Criteria criteria = session.createCriteria(Dept.class);
            List<Dept> list = criteria.list();
            for (Dept item : list) {
                System.out.println(item.getDeptName());
            }
        }

运行结果:

 

 

带条件查询部门名称为 "大神部" 的部门信息:

/**
         * 带条件查询部门名称为 "大神部" 的部门信息
         */
        @Test
        public void hasConditionTest(){
            Criteria criteria = session.createCriteria(Dept.class);
            Criterion criterion = Restrictions.eq("deptName", "大神部");
            criteria.add(criterion);
            List<Dept> list = criteria.list();
            for (Dept item : list) {
                System.out.println(item.getDeptName()+"\\t"+item.getDeptNo());
            }
        }

结果:

 

 

 

关联查询  查询"大神部"的所有员工:

/**
         * 关联查询  查询"大神部"的所有员工
         */
        @Test
        public void connectTest(){
            Criteria criteria = session.createCriteria(Emp.class);
            
            //给Emp中关联的dept对象起一个别名 为  d
            criteria.createAlias("dept", "d");
            Criterion criterion = Restrictions.eq("d.deptName", "大神部");
            
            criteria.add(criterion);
            List<Emp> list = criteria.list();
            for (Emp item : list) {
                System.out.println(item.getEmpName());
            }
        }

结果:

 

 

 

范围查询部门为"大神部" 和  "就业部"  的员工信息:

/**
         * 范围查询部门为"大神部" 和  "就业部"  的员工信息
         */
        @Test
        public void rangeTest(){
            Criteria criteria = session.createCriteria(Emp.class);
            
            List<String> lists=new ArrayList<String>();
            lists.add("大神部");
            lists.add("就业部");
            
            //给Emp中关联的dept对象起一个别名 为  d
            criteria.createAlias("dept", "d");
            Criterion criterion = Restrictions.in("d.deptName", lists);
            
            criteria.add(criterion);
            List<Emp> list=criteria.list();
            
            for (Emp item : list) {
                System.out.println(item.getEmpName());
            }
        }

结果:

 

 

 

 

查询部门表中包含"就业部"的所有员工姓名:

/**
         * 字符串模式匹配
         * 查询部门表中包含"就业部"的所有员工姓名
         */
        @Test
        public void ilikeTest(){
            Criteria criteria = session.createCriteria(Emp.class);
            
            //给Emp中关联的dept对象起一个别名 为  d
            criteria.createAlias("dept", "d");
            Criterion criterion = Restrictions.ilike("d.deptName", "%就业部%");
            
            criteria.add(criterion);
            List<Emp> list=criteria.list();
            
            for (Emp item : list) {
                System.out.println(item.getEmpName());
            }
        }

结果:

 

 

 

 

and 过滤 查询部门是"就业部" 并且员工姓名包含"小"的员工信息:

/**
         * 逻辑运算
         * and 过滤 查询部门是"就业部" 并且员工姓名包含"小"的员工信息
         */
        @Test
        public void andTest(){
            Criteria criteria = session.createCriteria(Emp.class);
            
            //给Emp中关联的dept对象起一个别名 为  d
            criteria.createAlias("dept", "d");
            Criterion c1 = Restrictions.eq("d.deptName", "就业部");
            Criterion c2 = Restrictions.ilike("empName", "%小%");
            
            Criterion criterion = Restrictions.and(c1, c2);
            
            criteria.add(criterion);
            List<Emp> list=criteria.list();
            
            for (Emp item : list) {
                System.out.println(item.getEmpName());
            }
        }

结果:

 

 

 

 

集合运算    查询没有员工的部门:

/**
         * 集合运算
         * 查询没有员工的部门
         */
        @Test
        public void isEmptyTest(){
            Criteria criteria = session.createCriteria(Dept.class);
            
            Criterion criterion = Restrictions.isEmpty("emps");
            
            criteria.add(criterion);
            List<Dept> list=criteria.list();
            
            for (Dept item : list) {
                System.out.println(item.getDeptName());
            }
        }

结果:

 

 

 

动态查询    查询员工部门是"就业部" 并且 员工编号大于0的 员工信息:

/**
         * 动态查询
         * 查询员工部门是"就业部"   并且  员工编号大于0的  员工信息
         */
        @Test
        public void dynameicTest(){
            Criteria criteria = session.createCriteria(Emp.class);
            //构建出一个和page对应的条件类   以此判断是否为空
            EmpCondition condition=new EmpCondition();
            condition.setDeptName("就业部");
            condition.setEmpId(0);
            
            //判定之后  动态拼接检索条件
            if (condition.getDeptName()!=null) {
                //给Emp中关联的dept对象起一个别名 为  d
                criteria.createAlias("dept", "d");
                
                //用户填写的部门名称作为检索条件
                criteria.add(Restrictions.eq("d.deptName", condition.getDeptName()));
            }
            if (condition.getEmpId()!=null) {
                criteria.add(Restrictions.gt("empId", condition.getEmpId()));
            }
            List<Emp> list=criteria.list();
            
            for (Emp item : list) {
                System.out.println(item.getEmpName());
            }
        }

结果:

 

 

 

排序addOrder()   查询员工编号大于0的 员工信息,按员工编号排序:

/**
         * 排序addOrder()
         * 查询员工编号大于0的  员工信息,按员工编号排序
         */
        @Test
        public void orderTest(){
            Criteria criteria = session.createCriteria(Emp.class);
            Criterion criterion = Restrictions.gt("empId", 0);
            
            criteria.add(criterion).addOrder(Order.asc("empId"));
            
            
            List<Emp> list=criteria.list();
            
            for (Emp item : list) {
                System.out.println(item.getEmpName());
            }
        }

结果:

 

 

 

 

总记录数   和     分页  查询员工表中4-6条数据,每页显示3条:

/**
         * 
         *  总记录数   和     分页  查询员工表中4-6条数据,每页显示3条
         */
        @Test
        public void pageListTest(){
            Criteria criteria = session.createCriteria(Emp.class);
            
            //总记录数
            //新的类型:Projections
            Projection projection = Projections.count("empId");
            criteria.setProjection(projection);
            //看总记录数 转成Integer类型
            Integer count= ((Long)criteria.uniqueResult()).intValue();
            System.out.println("总记录数:"+count);
            
            
            //预置两个变量
            int pageSize=3;
            int pageIndex=2;
            
            criteria.setFirstResult((pageIndex-1)*pageSize);
            criteria.setMaxResults(pageSize);
            
            List<Emp> list=criteria.list();
            
            for (Emp item : list) {
                System.out.println(item.getEmpName());
            }
        }

分页结果:

总记录数结果:

 

以上是关于Criteria查询的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate使用HQL,Criteria和Native SQL查询,哪个好?

mysql中字段为text类型使用mybatis的Criteria查询无法进行封装

如何在JPA Criteria查询API中编写自定义查询作为根?

Criteria查询

grails的criteria和hql查询

Hibernate 中Criteria Query查询详解