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

结果:

Criteria查询数据的更多相关文章

  1. Hibernate框架Criteria查询

    本文章适合一些初学者 一.使用Criteria查询数据        1.条件查询            1.1:使用Criteria查询的步骤                    1.使用Sess ...

  2. 第九章 Criteria查询及注解

    第九章   Criteria查询及注解9.1 使用Criteria查询数据    9.1.1 条件查询        Criteria查询步骤:            1)使用session接口的cr ...

  3. Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)

    写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...

  4. Criteria查询初学者的采纳点哦

    一.Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象    from  Emp e group by e.dept.deptName 2.OID检索 ...

  5. Hibernate框架之Criteria查询

    首先给大家说说Hibernate检索方式 Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象 2.OID检索方式:按照对象的OID来检索对象 3.HQ ...

  6. Hibernate 、Hql查询和Criteria查询

    HQL查询: public Object query(String name){ Session s=null; try{ s=HibernateSessionFactory.getSession() ...

  7. Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

    Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...

  8. Criteria查询

    1.Criteria表达式 Criteria c=session.createCriteria(User.class); List result=c.list(); Iterator it=resul ...

  9. Hibernate(十二)Criteria查询

    一.简述 Criteria是一种比hql更面向对象的查询方式.Criteria 可使用 Criterion 和 Projection 设置查询条件.可以设置 FetchMode(联合查询抓取的模式 ) ...

随机推荐

  1. oreData的学习记录

    1.如果想创建一个带有coreData的程序,要在项目初始化的时候勾选中 2.创建完成之后,会发现在AppDelegate里多出了几个属性,和2个方法 <span style="fon ...

  2. CDH的几个包的下载地址

    https://archive.cloudera.com/cdh5/parcels/5.3.0/ http://archive.cloudera.com/cm5/installer/5.3.0/ ht ...

  3. puma vs passenger vs rainbows! vs unicorn vs thin 适用场景 及 performance

    ruby的几个web server,按照开发活跃度.并发方案及要点.适用场景等分析puma vs passenger vs rainbows! vs unicorn vs thin. 1. thin: ...

  4. Asp.net Core WebApi 全局异常类

    通过全局异常类,所有程序中遇到的错误都会被拦截,并友好的返回结果. 1.自定义一个全局异常处理类中间件 using Microsoft.AspNetCore.Http; using Newtonsof ...

  5. .net微信公众号开发——群发消息

    作者:王先荣    本文将介绍微信公众号开发中用于群发消息的类MassMessage,包括:(1)MassMessage类:(2)群发:(3)删除:(4)预览:(5)查询发送状态:(6)接收推送群发结 ...

  6. JavaScriptSerializer 中的匿名类型 转json

    二:JavaScriptSerializer 中的匿名类型 这个类型我想大家都清楚,不过性能更高的方式应该是用JsonConvert吧,但这个不是本篇讨论的话题,我们重点来看看匿名类型的Json序列化 ...

  7. C#利用NOPI处理Excel的代码

    using System; using System.Data; using System.IO; using System.Text; using System.Web; using NPOI.HP ...

  8. Excel的一些常用设置

    1. Freeze表头 (1) 下拉Worksheet的Pane,让该sheet有2个工作区,将该pane下拉到某一特定的行. (2)Window->Freeze Panes.此时会将pane智 ...

  9. javascript方法 call()和apply()的用法

    先上代码: apply()方法示例 /*定义一个人类*/ function Person(name,age) { this.name=name; this.age=age; } /*定义一个学生类*/ ...

  10. [under the hood]Reduce EXE and DLL Size with LIBCTINY.LIB

    Matt Pietrek Download the code for this article: Hood0101.exe (45KB) W ay back in my October 1996 co ...