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());
}
结果:
Criteria查询数据的更多相关文章
- Hibernate框架Criteria查询
本文章适合一些初学者 一.使用Criteria查询数据 1.条件查询 1.1:使用Criteria查询的步骤 1.使用Sess ...
- 第九章 Criteria查询及注解
第九章 Criteria查询及注解9.1 使用Criteria查询数据 9.1.1 条件查询 Criteria查询步骤: 1)使用session接口的cr ...
- Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)
写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...
- Criteria查询初学者的采纳点哦
一.Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象 from Emp e group by e.dept.deptName 2.OID检索 ...
- Hibernate框架之Criteria查询
首先给大家说说Hibernate检索方式 Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象 2.OID检索方式:按照对象的OID来检索对象 3.HQ ...
- Hibernate 、Hql查询和Criteria查询
HQL查询: public Object query(String name){ Session s=null; try{ s=HibernateSessionFactory.getSession() ...
- Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...
- Criteria查询
1.Criteria表达式 Criteria c=session.createCriteria(User.class); List result=c.list(); Iterator it=resul ...
- Hibernate(十二)Criteria查询
一.简述 Criteria是一种比hql更面向对象的查询方式.Criteria 可使用 Criterion 和 Projection 设置查询条件.可以设置 FetchMode(联合查询抓取的模式 ) ...
随机推荐
- GRIDVIEW多行多列合并单元格(合并列)
GitHub项目地址:https://github.com/mingceng/merge-gridviewcell 去年的时候,我写了两篇文章: GridView多行多列合并单元格(完整代码和例子) ...
- IOS 7 UI 的适配
官方问题答案:https://developer.apple.com/library/ios/qa/qa1797/_index.html 官方建议: https://developer.apple.c ...
- CountDownLatch线程阻塞用法实例
在编写多线程的工作中,有个常见的问题:主线程(main) 启动好几个子线程(task)来完成并发任务,主线程要等待所有的子线程完成之后才继续执行main的其它任务. 默认主线程退出时其它子线程不会停, ...
- js数据类型判断和数组判断
这么基础的东西实在不应该再记录了,不过嘛,温故知新~就先从数据类型开始吧 js六大数据类型:number.string.object.Boolean.null.undefined string: 由单 ...
- XML 文档和数据
.NET Framework 4.5 其他版本 .NET Framework 提供了一组全面而集成的类,可用来方便地生成可以识别 XML 的应用程序. 通过以下命名空间中的类,可以分析和编写 XML, ...
- Porter/Duff,图片加遮罩setColorFilter
同步发表于http://avenwu.net/2015/02/03/porterduff Fork on github https://github.com/avenwu/support 经常会遇到给 ...
- 【终极解决方案】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。
困扰我大半年的错误,今天偶然间被解决了,特此分享给被同样问题纠结的朋友们! 之前的求助帖,无人应答: http://www.cnblogs.com/freeton/archive/2012/08/28 ...
- JSON处理
var ajax = function () { mui.ajax(projectPath+'/goods/goodsprice.do', { dataType: 'json', type: 'pos ...
- PD16 Generate Datebase For Sql2008R2时报脚本错误“对象名sysproperties无效”
PowerDesinger16创建数据库表到SQL2008R2时,执行报“对象名sysproperties无效”错误. 主要是在建模时我们对表.列增加了些说明注释,而Sql2005之后系统表syspr ...
- oracle小数点前零丢失的问题
1.问题起源 oracle 数据库 字段值为小于1的小数时,使用char类型处理,会丢失小数点前面的0 例如0.2就变成了.2 2.解决办法: (1)用to_char函数 ...


