Criteria查询数据

Criteria介绍:

Criteria查询是Hibernate提供的一种查询方式,与HQL基于字符串的查询形式完全不同。Hibernate提供了org.hiberanee.Criteria 接口、orghibernate.criterionCriterion 接口和org.hibernate.criterion.Restrictions类等CriteriaAPI,用于支持在运行时动态生成查询语句。

简单使用Criteria:

先面是有一个简单的例子来介绍一下Criteria:

Session session = HibernateUtil.currentSession();
        Criteria criteria = session.createCriteria(House.class);
            List<House> list = criteria.list();
            for (House house : list) {
                System.out.println(house.getTitle());
            }

执行上述代码结果如下:

其中Session.createCriteria(House.class)方法返回一个Criteria查询接口,House是定义好的持久化类,在调用Criteria查询接口(Criteria)的list方法时Hibernate会动态生成查询所有房屋的sql语句去和数据库进行交互从而生成House对象集合返回给应用程序!

带条件的Criteria:

如果不想查询所有的房屋而只是查询标题是“中关村大街一室一厅”的房屋则可以运行如下代码:

Session session = HibernateUtil.currentSession();
            Criteria criteria = session.createCriteria(House.class);
            criteria.add(Restrictions.eq("title", "中关村大街一室一厅"));
            List<House> list = criteria.list();
            for (House house : list) {
                System.out.println(house.getTitle());
            }

其结果如下:

其中Criteria接口的add方法是向查询语句中设定查询条件其方法参数为Criterion接口,而Restrictions类的静态方法er则返回该接口实例其接受两个参数(属性名称,属性值)。代表查询所有房屋标题等于“中关村大街一室一厅”的房屋信息。当然Restrictions类还有许多其他的方法如(gt:大于、lt:小于,like等这里不再进行一一举例)!

使用Criteria进行两表关联查询:

比如房屋信息表和街道信息表存在多对一的关联关系(在House类中保存着Stree(街道)类的引用属性street)

这是如果想查询”中关村大街“下的所有房屋信息则可以使用一下语句

Session session = HibernateUtil.currentSession();
        Criteria criteria = session.createCriteria(House.class);
            criteria.createAlias("street", "stt");
            criteria.add(Restrictions.eq("stt.name", "中关村大街"));
            List<House> list = criteria.list();
            for (House house : list) {
                System.out.println(house.getTitle());
            }

其结果如下:

其中Criteria接口的createAlias方法设置House类的street属性的别名为stt,注意:这里必须给street属性设置别名不然Hibernate将抛出异常无法执行查询!

使用Projection投影查询列;

如果你想查询房屋信息表中总共有几条记录时就需要使用Projection了代码如下:

Session session = HibernateUtil.currentSession();
        Criteria criteria = session.createCriteria(House.class);
            criteria.setProjection(Projections.rowCount());
            Object objcou = criteria.uniqueResult();
            Integer count=((Long)objcou).intValue();
            System.out.println(count);

执行结果:

使用Criteria进行排序查询:

Criteria使用addOrder方法来指定排序查询如按照id列进行降序排序代码如下:

Session session = HibernateUtil.currentSession();
        Criteria criteria = session.createCriteria(House.class);
        criteria.addOrder(Order.desc("id"));
        List<House> list = criteria.list();
        for (House house : list) {
            System.out.println(house.getTitle());
        }

其结果如下:

DetachedCriteria:

DetachedCriteria不需要使用Session对象来创建,

demo:

Session session = HibernateUtil.currentSession();
        DetachedCriteria detachedCriteria=DetachedCriteria.forClass(House.class);
        detachedCriteria.createAlias("street", "stt");
        detachedCriteria.add(Restrictions.eq("stt.name", "中关村大街"));
        List<House> list = detachedCriteria.getExecutableCriteria(session).list();
        for (House item : list) {
            System.out.println(item.getTitle());
        }

结果:

时间: 2024-11-07 01:24:51

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检索方式和Criteria查询的讲解

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

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

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

Oracle in 查询数据

问题描述: 查询所有的数据,查询结果:146360 select count(1) from bank_cde; in查询的获取部分数据,查询结果 :73080 select count(1) from bank_cde t where t.belongcode2 in('ABC','BCOM','BOC','CCB','CEB','CGB','CIB','CITIC','CMBC','ICBC','PAB','POST','SPDB'); not in查询数据,结果为0 select coun

。。。Hibernate 查询数据 事务管理。。。

在Hibernate中,查询数据的时候,可能会需要事务的管理,为什么呢?因为在查询数据库的时候,Hibernate将数据从数据库里面查询出来之后,会先把数据放入Hibernate的session缓存里,下次你再次发送同一个请求的时候,Hibernate会先从缓存里面查数据,如果发现有这样的数据,OK,那就直接把这个数据拿过去显示,如果没有的话,才会到数据库里面查询显示.这个就是说,在页面显示的数据是A,到后台把数据改为B,现在前台刷新,则还会显示数据A,不会显示数据B的原因!

查询数据过多页面反应慢引入缓存解决方案(Redis、H2)

问题:原系统查询接口不支持分页也不可能加入分页支持,导致Ajax查询数据过多,返回数据达到2W多条记录时响应已经极慢,查询功能不要求数据实时性,页面反应速度极慢.体验不好:经排查是由于数据量过大导致写回页面的时候慢,实现是直接Servlet输出流写到页面上(output.write(buffer, 0, b)): 需求变更:加快页面相应速度,页面要有分页功能,可以改变原接口 在这种情况下有两种解决方案: 1.前端js分页 2.加入第三方缓存部件(内存数据库等) 两种解决方案的缺点: 第一种方案的