`
fehly
  • 浏览: 248658 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Criteria查询

阅读更多

Hibernate的三种查询方式

1.HQL (Hibernate Query Lanuage) 语句,这是类似SQL语句的一种对象化查询语句.

2.使用Criteria对象,进行按条件查询(Query by Criteria,简称QBC)和按示例查询(Query by Example 简称QBE).

3.生成原生的sql(Native SQL)语句.

Criteria的基本使用

Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Testbook.class);
List<Testbook> list=criteria.list();
tx.commit();

 

 查询Testbook 中所有的数据,然后返回

Criteria 接口的核心方法

 

add()      增加一个代表查询条件的Criterion对象
addOrder()    增加一个代表排序的Criterion对象
createAlias()    创建关联查询,为所关联的持久化类建立别名
createCriteria()   在相互关联的持久化类之间建立条件约束
setFirstResult()   设定要获取的第一条记录的位置
setMaxResults()    设定要获取的记录的最大数量
list()     获取满足查询条件的记录的集合
uniqueResult()    获取满足查询条件的唯一记录

 

对查询结果进行排序

Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Testbook.class).add(
Restrictions.like("name","任%")).add(Restrictions.between("id",1000,1010));
criteria.addOrder(Order.desc("id")).addOrder(Order.asc("createdTime"));
List<Testbook> list=criteria.list();
tx.commit();

 

实现分页显示数据

Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Testbook.class).add(
Restrictions.like("name","任%"));
criteria.addOrder(Order.desc("id"));
criteria.setMaxResults(30);
criteria.setFirstResult(10);//setFirstResult()从0开始计数
List<Testbook> list=criteria.list();
tx.commit();

 

 

只查询一条记录

Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Testbook.class).add(
Restrictions.like("name","任%"));
criteria.addOrder(Order.desc("id"));
criteria.setMaxResults(1);
Testbook tb=(Testbook)criteria.uniqueResult();
tx.commit();

 

Restrictions类

<----------------------------------------------------------------------------------------------------------->

 

 


条件"或"方式组合查询条件

Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
Criterion criterion1=Restrictions.or(Restrictions.like("name","任%"),
Restrictions.between("id",1000,1010));
criteria.add(criterion1);
List<Testbook> list=criteria.list();
tx.commit();

 

 

 

使用原生SQL语句设定查询条件

Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
criteria.add(Restrictions.sqlRestriction("{alias}.name=?","Narcissus",Hibernate.STRING));
List<Testbook> list=criteria.list();
tx.commit()

 

 统计函数查询

Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
criteria.setProjection(Projections.max("price"));
Double maxValue=(Double)criteria.uniqueResult();
tx.commit();
System.out.println(maxValue);

 

统计函数组合查询条件

Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
criteria.setProjection(Projections.max("price"));
Double maxValue=(Double)criteria.uniqueResult();
tx.commit();
System.out.println(maxValue);

 

 

获取多个统计函数的值

Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
ProjectionList proList=Projections.projectionList();
proList.add(Projections.max("price"));
proList.add(Projections.min("price"));
proList.add(Projections.avg("price"));
proList.add(Projections.sum("price"));
proList.add(Projections.count("price"));
proList.add(Projections.countDistinct("price"));
proList.add(Projections.rowCount());
criteria.setProjection(proList);
Object values[]=(Object[])criteria.uniqueResult();
tx.commit();

 

 

 

 分组查询

Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
criteria.setProjection(Projections.groupProperty("price"));
List<Double> list=criteria.list();
tx.commit();

 

 分组统计

Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
ProjectionList proList=Projections.projectionList();
proList.add(Projections.rowCount());//商品的个数
proList.add(Projections.sum("price"));
proList.add(Projections.groupProperty("name"));
criteria.setProjection(proList);
List<Double> list=criteria.list();
tx.commit();

 

 

 

投影查询
在一个表中有很多个字段,投影查询只是查询某一个或多个字段,也称局部查询

 

Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
criteria.setProjection(Property.forName("price"));
criteria.add(Restrictions.gt("price",new Double(40.0)))
List<Double> list=criteria.list();
tx.commit();

 

使用Property类的forName()方法实现分组统计

 

Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
ProjectionList proList=Projections.projectionList();
proList.add(Projections.forName("price").max());
proList.add(Projections.forName("price").min());
proList.add(Projections.forName("price").avg());
proList.add(Projections.forName("category.id").group().as("c"));
criteria.setProjection(proList);
criteria.addOrder(Order.desc("c"));
List<Object[]> list=criteria.list();
tx.commit();

 

使用DetachedCriteria对象实现离线查询

//在表现层,构造DetachedCriteria对象,保存用户动态的查询条件
DetachedCriteria detchedCriteria=DetachedCriteria.forClass(Testbook.class);
detchedCriteria.add(Restrictions.like("name","任%")).add(Restrictions.between("id",new Integer(1),new Integer(10)));
detchedCriteria.addOrder(Order.desc("id"));

//在业务逻辑层,DetachedCriteria对象与当前的Session对象进行绑定,获取查询结果
Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
Transaction tx=detchedCriteria.getExecutableCriteria(session);
List<Testbook> list=criteria.list();
tx.commit();

 

根据示例对象进行查询

 

 

先定义一个模板然后把这个模板的样式传进去,查询,例如这里定义的Testbook中的名字为Narcissus的字段,进行查询,条件可以为一个也可以为多个,对应的就是where中的条件

 

Testbook tb=new Testbook();
tb.setName("Narcissus");
Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
Criteria criteria=session.createCriteria(Testbook.class);
Criteria.add(Example.creaate(tb));
List<Testbook> list=criteria.list();
tx.commit();

 

分享到:
评论
1 楼 NeverStoping 2011-09-15  
使用Property类的forName()方法实现分组统计

Java代码 
Transaction tx = session.beginTransaction();  
Criteria criteria=session.createCriteria(Testbook.class);  
ProjectionList proList=Projections.projectionList();  
proList.add(Projections.forName("price").max());  
proList.add(Projections.forName("price").min());  
proList.add(Projections.forName("price").avg());  
proList.add(Projections.forName("category.id").group().as("c"));  
criteria.setProjection(proList);  
criteria.addOrder(Order.desc("c"));  
List<Object[]> list=criteria.list();  
tx.commit(); 

这位大哥,上边写的对到下边怎么错了,。

相关推荐

    09 Criteria查询方式

    "09 Criteria查询方式"这个主题,显然是围绕Hibernate中的Criteria API展开的,这是一种灵活且类型安全的查询机制,用于在Java代码中构建SQL查询。Criteria API提供了一种面向对象的方式来查询数据库,避免了直接...

    Criteria标准化对象查询小例子

    首先,让我们了解Criteria查询的基本组成部分: 1. **CriteriaQuery**: 这是查询的主对象,用于定义查询的类型(例如,选择、更新或删除)以及要查询的数据实体。 2. **Root**: 它代表查询的起点,通常是对数据库...

    Hibernate中,利用Criteria查询容器实现sql的写法

    本篇将详细讲解如何在Hibernate中利用Criteria查询来实现类似SQL的查询操作,并探讨其在实际开发中的应用。 Criteria查询是Hibernate提供的一种灵活的查询方式,它可以让我们根据业务需求动态地构建查询条件。这种...

    hibernateCriteria查询

    与传统的SQL查询相比,Criteria查询更加面向对象,易于理解和维护。在Hibernate框架中,Criteria查询是除HQL之外的另一种常用查询方式。 #### 二、Criteria 接口 `org.hibernate.Criteria` 接口代表了针对某个特定...

    Hibernat 使用Criteria查询多对多关系(SET集合)条件

    ### Hibernat 使用Criteria查询多对多关系(SET集合)条件 #### 背景介绍与概念理解 在Java开发中,特别是在企业级应用中,持久化层的处理至关重要。Hibernate作为一款流行的Java持久化框架,它提供了一种非常简便...

    Hibernate中关于Criteria查询条件的选择.doc

    在探讨Hibernate中关于Criteria查询条件的选择时,我们深入解析了Criteria接口如何被用来构建复杂的查询语句,以及各种表达式如何被运用到这些查询中。以下是对文档中提及的各个知识点的详细阐述: ### Criteria...

    Criteria连表查询

    Hibernate中的Criteria连表查询,包括单表属性查询,多表内连,以及左外连接查询

    HQL参数查询和Criteria查询

    1、掌握Hibernate框架应用项目 2、学习HQL参数查询和Criteria查询 3、比较HQL和Criteria的不同 建立web项目,通过页面查询构造动态查询语句,struts2和hibernate框架整合。

    Hibernate_Criteria条件查询数据

    本资料主要关注的是Hibernate中的Criteria查询,这是一种灵活且强大的查询机制,允许程序员以编程方式构建SQL查询。 Criteria查询是Hibernate提供的API,与传统的HQL(Hibernate Query Language)查询相比,它更...

    hibernate如何使用criteria联合查询 group by 的语句

    这个案例是根据分组查询,并且得到每组的条数,不懂得可以q我:1710086675,欢迎认识更多新朋友

    Hibernate的Criteria 查询方法

    【Hibernate的Criteria查询方法】 在软件开发中,尤其是在Java领域,ORM(对象关系映射)框架如Hibernate大大简化了数据库操作。Hibernate Criteria查询是其中一种强大的API,它提供了一种面向对象的方式来执行...

    Java的Hibernate框架中Criteria查询使用的实例讲解

    在Java的Hibernate框架中,Criteria查询提供了一种面向对象的方式来执行数据库查询,使得开发者无需直接编写SQL语句,尤其对不熟悉SQL的人来说更为友好。Criteria查询是Hibernate的一部分,它是SSH(Struts、Spring...

    Hibernate中Criteria的完整用法

    **Criterion** 是Criteria查询条件的基础接口。它定义了如何设置查询条件,例如等价于(eq)、大于等于(ge)、范围(between)等。Criterion可以通过Restrictions工具类来创建,这个工具类提供了大量的静态方法用于...

    Criteria hibernate

    本篇内容将聚焦于Hibernate中的Criteria查询,这是一种动态构建SQL查询的方法,无需直接编写SQL语句,非常适合在程序运行时根据条件构建查询。 在Hibernate中,Criteria API提供了一种类型安全的方式来执行查询,它...

    关联映射hibernate的criteria的用法

    首先,我们需要从`Session`对象创建一个Criteria实例,这是所有Criteria查询的起点: ```java Session session = sessionFactory.openSession(); Criteria criteria = session.createCriteria(User.class); ``` ...

    Hibernate criteria基本操作

    Hibernate Criteria 是一种在Java应用程序中使用Hibernate ORM框架执行SQL查询的方式。它提供了一种面向对象的方式来构建查询,使得代码更加可读和易于维护。Criteria API 提供了多种方法来构建复杂的查询,包括添加...

    Criteria用法详解

    创建Criteria查询的第一步是获取`Session`对象,然后调用`createCriteria()`方法,传入需要查询的实体类名。例如: ```java Criteria criteria = session.createCriteria(User.class); ``` 3. **添加限制条件...

Global site tag (gtag.js) - Google Analytics