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());
            }
        }

分页结果:

总记录数结果:

时间: 2024-10-31 07:05:17

Criteria查询的相关文章

Criteria查询初学者的采纳点哦

一.Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象    from  Emp e group by e.dept.deptName 2.OID检索方式:按照对象的OID来检索对象  get/load 3.HQL检索方式:使用面向对象的HQL查询语言 4.QBC检索方式:使用QBC(Query By Criteria)API来检索对象,这种API封装了基于字符串形式的查询语句,提供了更加面向对象的查询接口 5.本地SQL检索方式:使用本地数据库

Hibernate(十二)Criteria查询

一.简述 Criteria是一种比hql更面向对象的查询方式.Criteria 可使用 Criterion 和 Projection 设置查询条件.可以设置 FetchMode(联合查询抓取的模式 ) ,设置排序方式,Criteria 还可以设置 FlushModel (冲刷 Session 的方式)和 LockMode (数据库锁模式). Criteria本身只是查询的容器.Criteria查询又称对象查询 Criteria查询采用面向对象的方式封装查询条件.由Hibernater自动生成SQ

hibernate条件查询 Criteria查询

criteria查询 的方法详解 1.获取 criteria对象 Criteria criteria = this.getSession().createCriteria(Record.class); 红色部分为实体类,此处的Record代表信息记录类 2.追加条件 criteria = criteria.add(Expression.eq("level", 1)); 红色部分 Expression.eq("",""),两个参数第一个是 实体类中

Nhibernate系列学习之(三) Criteria查询表达式增删改查

Criteria查询表达式: 正如我们所见,Expression对查询语句的表达式进行了封装和限制,下表列出了Expression所有的方法,以及每个方法所对应的查询表达式及其限制. Restrictions的用法: 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge >= Restrictions.lt < Restrictions.le <= R

Hibernate框架之HQL查询与Criteria 查询的区别

Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: /* * 查询所有房屋 * * (non-Javadoc) * @see Dao.HouseDao#selecthouse() */ public List<House> selecthouse() { // TODO Auto-generated method stub //获取连接 Sess

Hibernate检索方式和Criteria查询的讲解

Hibernate框架5种检索方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象 2.OID检索方式:按照对象的OID来检索对象 3.HQL检索方式:使用面向对象的HQL查询语言 4.QBC检索方式:使用QBC(Query By Criteria)API来检索对象,这种API封装了基于字符串形式的查询语句,提供了更加面向对象的查询接口 5.本地SQL检索方式:使用本地数据库的SQL查询语句 这次重点讲解Criteria查询,首先我们先了解一下它.  Criteria 查询采用面向对象

Criteria查询数据

Criteria介绍: Criteria查询是Hibernate提供的一种查询方式,与HQL基于字符串的查询形式完全不同.Hibernate提供了org.hiberanee.Criteria 接口.orghibernate.criterionCriterion 接口和org.hibernate.criterion.Restrictions类等CriteriaAPI,用于支持在运行时动态生成查询语句. 简单使用Criteria: 先面是有一个简单的例子来介绍一下Criteria: Session

hibernate框架学习笔记7:HQL查询、Criteria查询

HQL查询:hibernate独有的查询语言 适用于不复杂的多表查询 示例: 实体类: package domain; public class Customer { private Long cust_id; private String cust_name; private String cust_source; private String cust_industry; private String cust_level; private String cust_linkman; priv

JPA criteria 查询:类型安全与面向对象

参考:https://my.oschina.net/zhaoqian/blog/133500 一.JPA元模型概念,及使用 在JPA中,标准查询是以元模型的概念为基础的.元模型是为具体持久化单元的受管实体定义的.这些实体可以是实体类,嵌入类或者映射的父类.提供受管实体元信息的类就是元模型类. 描述受管类的状态和他们之间的关系的静态元模型类可以 1.从注解处理器产生 2.从程序产生 3.用EntityManager访问. 如下code,一个简单的实体类package com.demo.entiti

Criteria查询及注解

HQL和Criteria支持的比较运算 HQL运算符 Criteria运算方法 说明 = SimpleExpression Restrictions.eq(String propertyName,Object value) 等于 <> SimpleExpression Restrictions.ne(String propertyName,Object value) 不等于 > SimpleExpression Restrictions.gt(String propertyName,Ob