`
付绍高
  • 浏览: 36992 次
  • 性别: Icon_minigender_1
  • 来自: 江西临川
社区版块
存档分类
最新评论

Criteria

阅读更多

Hibernate提供了完善的按条件(Query By Criteria, QBC)

org.hibernate.Criteria接口表示特定持久类的一个查询。

Criteria 代表一次查询

Criterion 代表一个查询条件。

Restrictions 产生查询条件的工具类。

Criterion Criteria 的查询条件。Criteria 提供了 add(Criterion criterion) 方法来

1:添加查询条件。

Session Criteria实例的工厂。

Criteria criteria = sess.createCriteria(News.class);

List  news = criteria.list();

2:限制结果集内容

一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。org.hibernate.criterion.Restrictions 定义了获得某些内置Criterion类型的工厂方法。Criterion 的实例可以通过 Restrictions 工具类来创建

List news = sess.createCriteria(News.class)

    .add( Restrictions.like("title", "%fendou%") )

    .add( Restrictions.between("id", 2, 8) )

.list();

 

Restrictions 提供了大量的静态

方法,如 eq (等于)、 ge (大于等于)、 between 等来方法的创建 Criterion 查询条件 ,通过往该实例的 add(Criteria) 方法来增加查询条件形成一个查询条件集合。

QL运算符

QBC运算符

含义

=

Restrictions.eq()

等于

<>

Restrictions.not(Exprission.eq())

不等于

>

Restrictions.gt()

大于

>=

Restrictions.ge()

大于等于

<

Restrictions.lt()

小于

<=

Restrictions.le()

小于等于

is null

Restrictions.isnull()

等于空值

is not null

Restrictions.isNotNull()

非空值

like

Restrictions.like()

字符串模式匹配

and

Restrictions.and()

逻辑与

and

Restrictions.conjunction()

逻辑与

or

Restrictions.or()

逻辑或

or

Restrictions.disjunction()

逻辑或

not

Restrictions.not()

逻辑非

in(列表)

Restrictions.in()

等于列表中的某一个值

not in(列表)

Restrictions.not(Restrictions.in())

不等于列表中任意一个值

between x and y

Restrictions.between()

闭区间xy中的任意值

not between x and y

Restrictions.not(Restrictions..between())

小于值X或者大于值y


3:结果集排序与分页

可以使用org.hibernate.criterion.Order来为查询结果排序

List news = sess.createCriteria(News.class)

    .add( Restrictions.like("title", "%F%")

.addOrder( Order.desc("id") )

.setFirstResult(0)

    .setMaxResults(20)

.list();

4: 使用createCriteria()非常容易的在互相关联的实体间建立约束

 

Criteria c=session.createCriteria(News.class);

                 news=c.add(Restrictions.in("id", new Long []{2l,4l}))

                        .add(Restrictions.like("title", "%今日%"))

                        .createCriteria("category")

                        .add(Restrictions.eq("id", 2))

                        .addOrder(Order.desc("id"))

                        .list();

5:投影(Projections)

org.hibernate.criterion.Projections Projection 的实例工厂。我们通过调用setProjection()应用投影到一个查询。

session=HibernateUtil.getSession();

                 Criteria c=session.createCriteria(News.class);

                          c.setProjection( Projections.projectionList()

                   .add( Projections.property("title"))

                   .add( Projections.property("category")));

                 news=c.list();

                 for(int i=0;i<news.size(); i++){

                      Object[] obj=(Object[])news.get(i);

                      System.out.println(obj[0]+"***"+obj[1]);

                 }

6:查询示例 (Query By Example, QBE)

org.hibernate.criterion.Example类允许你通过一个给定实例 构建一个条件查询(主要用于模糊查询)

List<News> news=new ArrayList<News>();

           News exn=new News();

           exn.setTitle("%今日%");

                 Example example=Example.create(exn);

                                 example.enableLike();

Session session=HibernateUtil.getSession();

                 Criteria c=session.createCriteria(News.class); 

                            c.add(example);

                 news=c.list();       

 

Hibernate 中的原生SQLNative SQL)查询

 Hibernate3允许你使用手写的sql来完成所有的create,update,delete,load操作(包括存储过程)

1SQL查询是通过SQLQuery接口来控制的,它是通过调用Session.createSQLQuery()方法来获得

session=HibernateUtil.getSession();

news=session.createSQLQuery("select * from news_news n")

                      .addEntity(News.class).list();

addEntity()方法将SQL表的实体类联系起来,并且确定查询结果集的返回值形态。

2:原生的SQL查询可能返回一个简单的标量值或者一个标量和实体的结合体

session=HibernateUtil.getSession();

max=(Long)session.createSQLQuery("select max(n.n_id) as maxid from news_news n")

           .addScalar("maxid",Hibernate.LONG)

           .uniqueResult();

3:命名SQL查询

可以在映射文档中定义查询的名字,然后就可以象调用一个命名的HQL查询一样直接调用命名SQL查询.在这种情况下,我们不 需要调用addEntity()方法.

po类的xml文件中命名一个sql

<sql-query name="sqlallnews">

       <return class="com.fendou.domain.News"/>

       select * from news_news n

       </sql-query>

实现类调用:

news=session.getNamedQuery("sqlallnews")

4:使用存储过程来查询

Hibernate 3引入了对存储过程查询的支持. 存储过程必须返回一个结果集

如下面存储过程例子:

CREATE OR REPLACE FUNCTION selectAllnews

    RETURN SYS_REFCURSOR

AS

    st_cursor SYS_REFCURSOR;

BEGIN

    OPEN st_cursor FOR

 SELECT *

 FROM news_news;

      RETURN  st_cursor;

 END;

Hibernate里要要使用这个查询,你需要通过命名查询来映射它.

<sql-query name="callselectAllnews" callable="true">

       <return  class="com.fendou.domain.News">         

       </return>

      { ? = call selectAllnews () }

</sql-query>

news=session.getNamedQuery("callselectAllnews")

                    .list();

对存储过程进行的查询无法使用setFirstResult()/setMaxResults()进行分页

 

Hibernate过滤数据

Hibernate3 提供了一种创新的方式来处理具有“显性(visibility)”规则的数据,那就是使用Hibernate filter Hibernate filter是全局有效的、具有名字、可以带参数的过滤器, 对于某个特定的Hibernate session您可以选择是否启用(或禁用)某个过滤器。过滤器条件相当于定义一个 非常类似于类和各种集合上的“where”属性的约束子句

1:定义一个过滤器

<hibernate-mapping/> 节点之内的<filter-def/>节点

<filter-def name="newsCategoryfilter">

     <filter-param name="catid" type="int"/>

</filter-def>

2:定义好之后,就可以在某个类中要使用的属性下使用这个过滤器:

<filter name=" newsCategoryfilter " condition=":catid =c_id"/>

3Session中默认是不启用过滤器的,必须通过Session.enabledFilter()方法显式的启用。 该方法返回被启用的Filter的实例

session.enableFilter("newsCategoryfilter ").setParameter("catid", 1);

String hql="from News";

                 Query query=session.createQuery(hql);

                 query.setFirstResult(0);

                 query.setMaxResults(5);

                 news=query.list();

通过使用过滤器可以定义常用的筛选规则,如果是临时的还是使用常规的查询比较好。

分享到:
评论

相关推荐

    Hibernate中Criteria的完整用法

    Hibernate中的Criteria API是一种用于执行动态查询的机制,它允许开发者在运行时构建SQL查询,而无需直接编写SQL语句。Criteria API提供了更加面向对象的方式来处理数据库查询,这使得代码更易于理解和维护,尤其是...

    Criteria标准化对象查询小例子

    在Java世界中,Criteria API是JPA(Java Persistence API)的一部分,用于构建动态、类型安全的查询。这个“Criteria标准化对象查询小例子”提供了一个实际应用Criteria API的示例,帮助开发者理解如何利用它来执行...

    Criteria的完整用法.pdf

    ### Criteria的完整用法详解 #### 一、概述 在基于Spring和Hibernate的项目开发中,Criteria API提供了灵活且强大的查询功能,使开发者能够轻松构建复杂的查询条件,从而提高数据检索的效率与精确度。本文将深入...

    criteria介绍与使用

    ### Criteria介绍与使用 在Java开发中,特别是涉及到数据库操作时,经常需要用到各种查询方式来获取数据。在Hibernate框架中,`Criteria`提供了一种非常灵活且强大的查询机制,允许开发者构建复杂的查询条件,而...

    Hibernate的Criteria用法总结

    在Java持久层框架Hibernate中,Criteria API是一种动态构建SQL查询的方法,它允许开发者在运行时构建查询,提供了更面向对象的查询方式。本篇将详细阐述Hibernate Criteria API的使用。 首先,Criteria API由...

    Hibernate-Criteria_模糊查询

    在深入探讨Hibernate与Criteria结合进行模糊查询之前,我们先来了解一下Hibernate和Criteria的基本概念,以及为何选择使用它们进行模糊查询。 ### Hibernate简介 Hibernate是一个开放源代码的对象关系映射(ORM)...

    Hibernate criteria基本操作

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

    Hibernate的Criteria文档

    在Java的持久层框架Hibernate中,Criteria API是一个强大的查询工具,它可以用来替代传统的SQL或HQL(Hibernate Query Language)查询,以实现更加面向对象的数据库交互。Criteria API的设计旨在屏蔽不同数据库之间...

    Hibernate Criteria 排序的問題

    ### Hibernate Criteria 排序问题详解 #### 一、前言 在使用Hibernate进行数据库操作时,经常需要对查询结果进行排序处理。对于简单的查询场景,使用HQL(Hibernate Query Language)即可轻松实现排序功能;但对于...

    hibernateCriteria查询

    ### Hibernate Criteria 查询详解 #### 一、概述 Hibernate Criteria 查询是一种强大的对象化查询方式,它为开发者提供了一种灵活而直观的方式来构建复杂的查询逻辑。与传统的SQL查询相比,Criteria查询更加面向...

    Hibernate中Criteria的完整用法.docx

    Hibernate 中 Criteria 的完整用法 Hibernate 中 Criteria 的完整用法是 Hibernate 框架中的一种查询机制,允许开发者灵活地根据查询条件来组装查询语句。在使用 Spring 和 Hibernate 进行开发时,Criteria 的优势...

    Hibernate-Criteria 模糊查询

    ### Hibernate-Criteria 模糊查询详解 在Java的持久化技术中,Hibernate作为ORM(对象关系映射)框架的一种,提供了强大的数据访问能力。而其中的`Criteria`接口更是为复杂的查询需求提供了一种灵活且功能强大的...

    Criteria连表查询

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

    Hibernate的Criteria用法总结.doc

    Hibernate 的 Criteria 用法总结 Hibernate 的 Criteria 是一个完全面向对象、可扩展的条件查询 API,通过它完全不需要考虑数据库底层如何实现、SQL 语句如何实现。Criteria 提供了灵活的查询条件组装方式,能够...

    关联映射hibernate的criteria的用法

    **关联映射Hibernate的Criteria用法详解** 在Java开发中,Hibernate作为一种强大的对象关系映射(ORM)框架,极大地简化了数据库操作。其中,Criteria API是Hibernate提供的一个动态查询工具,它允许开发者以面向...

    Hibernate中Criteria的使用

    Hibernate 中 Criteria 的使用 Hibernate 中 Criteria 的使用是 Hibernate 框架中的一种查询机制,对于研究 Hibernate 源码有一些作用。在查询方法设计上可以灵活地根据 Criteria 的特点来方便地进行查询条件的组装...

    Hibernate中Criteria的用法

    Hibernate 中 Criteria 的用法 Hibernate 中 Criteria 的用法是 Hibernate 框架中的一种查询机制,它提供了灵活的查询方式,可以根据不同的条件进行查询。Criteria 查询机制主要包括 QBE(Query By Example)、QBC...

    DetachedCriteria Criteria 使用方法

    - **使用场景**:`Criteria` 适用于即时查询,而 `DetachedCriteria` 更适合跨层传递查询条件。 - **灵活性**:`DetachedCriteria` 提供了更大的灵活性,可以在不同层之间传递而不会丢失查询状态。 #### 三、`...

Global site tag (gtag.js) - Google Analytics