`

Criteria查询

 
阅读更多

 

 

按条件方式查询QBC

Query By CriteriaHibernate提供了Criteria接口类为开发者在运行时建立查询条件,开发者可以动态的建立查询条件。

相比于SQLHQLQBC的可读性弱。

 

创建Criteria实例

Criteria接口位于org.hibernate包下,是一个通过组装不同查询条件来获取持久对象的条件类对象。

SessionCriteria实例的工厂。以下是Session创建Criteria的方法:

 

Criteria createCriteria(Class persistentClass)

通过持久类创建Criteria。查询结果为持久类的集合。

 

Criteria createCriteria(Class persistentClass, String alias)

通过持久类创建Criteria,并为持久类起一个别名。查询结果为持久类的集合。

 

Criteria createCriteria(String entityName)

通过实体映射文件的名称创建Criteria。查询结果为持久类的集合。

 

Criteria createCriteria(String entityName, String alias)

通过实体映射文件的名称创建Criteria,并为持久类起一个别名。查询结果为持久类的集合。

 

 

Criterion条件

Criterion接口是Criteria的查询条件。

Criterion接口的主要实现类包括:ExampleJunctionSimpleExpression

 

Criterion接口中定义两个方法:

TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery)

          Return typed values for all parameters in the rendered SQL fragment

 String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)

          Render the SQL fragment

 

 

Criterion接口实现类一般通过Restrictions类来创建。

Restrictions的常用方法:

static Criterion allEq(Map propertyNameValues)

          Apply an "equals" constraint to each property in the key set of a Map

static LogicalExpression and(Criterion lhs, Criterion rhs)

          Return the conjuction of two expressions

static Criterion between(String propertyName, Object lo, Object hi)

          Apply a "between" constraint to the named property

static Conjunction conjunction()

          Group expressions together in a single conjunction (A and B and C...)

static Disjunction disjunction()

          Group expressions together in a single disjunction (A or B or C...)

static SimpleExpression eq(String propertyName, Object value)

          Apply an "equal" constraint to the named property

static PropertyExpression eqProperty(String propertyName, String otherPropertyName)

          Apply an "equal" constraint to two properties

static SimpleExpression ge(String propertyName, Object value)

          Apply a "greater than or equal" constraint to the named property

static PropertyExpression geProperty(String propertyName, String otherPropertyName)

          Apply a "greater than or equal" constraint to two properties

static SimpleExpression gt(String propertyName, Object value)

          Apply a "greater than" constraint to the named property

static PropertyExpression gtProperty(String propertyName, String otherPropertyName)

          Apply a "greater than" constraint to two properties

static Criterion idEq(Object value)

          Apply an "equal" constraint to the identifier property

static Criterion ilike(String propertyName, Object value)

          A case-insensitive "like", similar to Postgres ilike operator

static Criterion ilike(String propertyName, String value, MatchMode matchMode)

          A case-insensitive "like", similar to Postgres ilike operator

static Criterion in(String propertyName, Collection values)

          Apply an "in" constraint to the named property

static Criterion in(String propertyName, Object[] values)

          Apply an "in" constraint to the named property

static Criterion isEmpty(String propertyName)

          Constrain a collection valued property to be empty

static Criterion isNotEmpty(String propertyName)

          Constrain a collection valued property to be non-empty

static Criterion isNotNull(String propertyName)

          Apply an "is not null" constraint to the named property

static Criterion isNull(String propertyName)

          Apply an "is null" constraint to the named property

static SimpleExpression le(String propertyName, Object value)

          Apply a "less than or equal" constraint to the named property

static PropertyExpression leProperty(String propertyName, String otherPropertyName)

          Apply a "less than or equal" constraint to two properties

static SimpleExpression like(String propertyName, Object value)

          Apply a "like" constraint to the named property

static SimpleExpression like(String propertyName, String value, MatchMode matchMode)

          Apply a "like" constraint to the named property

static SimpleExpression lt(String propertyName, Object value)

          Apply a "less than" constraint to the named property

static PropertyExpression ltProperty(String propertyName, String otherPropertyName)

          Apply a "less than" constraint to two properties

static NaturalIdentifier naturalId()

           

static SimpleExpression ne(String propertyName, Object value)

          Apply a "not equal" constraint to the named property

static PropertyExpression neProperty(String propertyName, String otherPropertyName)

          Apply a "not equal" constraint to two properties

static Criterion not(Criterion expression)

          Return the negation of an expression

static LogicalExpression or(Criterion lhs, Criterion rhs)

          Return the disjuction of two expressions

static Criterion sizeEq(String propertyName, int size)

          Constrain a collection valued property by size

static Criterion sizeGe(String propertyName, int size)

          Constrain a collection valued property by size

static Criterion sizeGt(String propertyName, int size)

          Constrain a collection valued property by size

static Criterion sizeLe(String propertyName, int size)

          Constrain a collection valued property by size

static Criterion sizeLt(String propertyName, int size)

          Constrain a collection valued property by size

static Criterion sizeNe(String propertyName, int size)

          Constrain a collection valued property by size

static Criterion sqlRestriction(String sql)

          Apply a constraint expressed in SQL.

static Criterion sqlRestriction(String sql, Object[] values, Type[] types)

          Apply a constraint expressed in SQL, with the given JDBC parameters.

static Criterion sqlRestriction(String sql, Object value, Type type)

          Apply a constraint expressed in SQL, with the given JDBC parameter.

 

 

另外,Example类提供一个方法用来创建所有的条件:

static Example create(Object entity)

          Create a new instance, which includes all non-null properties by default

 

protected  void addComponentTypedValues(String path, Object component, CompositeType type, List list, Criteria criteria, CriteriaQuery criteriaQuery)

           

protected  void addPropertyTypedValue(Object value, Type type, List list)

           

protected  void appendComponentCondition(String path, Object component, CompositeType type, Criteria criteria, CriteriaQuery criteriaQuery, StringBuffer buf)

           

protected  void appendPropertyCondition(String propertyName, Object propertyValue, Criteria criteria, CriteriaQuery cq, StringBuffer buf)

 

Example enableLike()

          Use the "like" operator for all string-valued properties

 Example enableLike(MatchMode matchMode)

          Use the "like" operator for all string-valued properties

 Example excludeNone()

          Don't exclude null or zero-valued properties

 Example excludeProperty(String name)

          Exclude a particular named property

 Example excludeZeroes()

          Exclude zero-valued properties

 TypedValue[] getTypedValues(Criteria criteria, CriteriaQuery criteriaQuery)

          Return typed values for all parameters in the rendered SQL fragment

 Example ignoreCase()

          Ignore case for all string-valued properties

 Example setEscapeCharacter(Character escapeCharacter)

          Set escape character for "like" clause

 Example setPropertySelector(Example.PropertySelector selector)

          Set the property selector

 String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)

          Render the SQL fragment

 String toString()

           

 

Order排序

Order类相当于order by之后的排序字段。

构造方法:

protected  Order(String propertyName, boolean ascending)

排序对象。propertyName为排序属性名称。ascending表示是否为正序。

 

sstatic Order asc(String propertyName)

          Ascending order

static Order desc(String propertyName)

          Descending order

 Order ignoreCase()

           

 String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)

          Render the SQL fragment

 String toString()

           

 

 

 

Projection条件

Projection是查询条件的另一种表现形式。

Projection主要是提供Criteria的报表查询功能。并能根据条件实现分组。

 

String[] getAliases()

 

String[] getColumnAliases(int position)

 

 

String[] getColumnAliases(String alias, int position)

 

 

 Type[] getTypes(Criteria criteria, CriteriaQuery criteriaQuery)

 

 Type[] getTypes(String alias, Criteria criteria, CriteriaQuery criteriaQuery)

 

 boolean isGrouped()

 

 String toGroupSqlString(Criteria criteria, CriteriaQuery criteriaQuery)

 

 String toSqlString(Criteria criteria, int position, CriteriaQuery criteriaQuery)

 

 

 

Projections类Projection的实力工厂方法。

Projections的方法:

 

static Projection alias(Projection projection, String alias)

          Assign an alias to a projection, by wrapping it

static AggregateProjection avg(String propertyName)

          A property average value

static CountProjection count(String propertyName)

          A property value count

static CountProjection countDistinct(String propertyName)

          A distinct property value count

static Projection distinct(Projection proj)

          Create a distinct projection from a projection

static PropertyProjection groupProperty(String propertyName)

          A grouping property value

static IdentifierProjection id()

          A projected identifier value

static AggregateProjection max(String propertyName)

          A property maximum value

static AggregateProjection min(String propertyName)

          A property minimum value

static ProjectionList projectionList()

          Create a new projection list

static PropertyProjection property(String propertyName)

          A projected property value

static Projection rowCount()

          The query row count, ie.

static Projection sqlGroupProjection(String sql, String groupBy, String[] columnAliases, Type[] types)

          A grouping SQL projection, specifying both select clause and group by clause fragments

static Projection sqlProjection(String sql, String[] columnAliases, Type[] types)

          A SQL projection, a typed select clause fragment

static AggregateProjection sum(String propertyName)

          A property value sum

 

 

 

添加条件

以上,Criterion和Projection都是对查询条件的描述,在查询前需要把条件交给Criteria接口。相当需为SELECT语句添加WHERE子句。

Criteria接口中定义了如下方法:

Criteria add(Criterion criterion)

该方法为一个Criteria增加一条查询条件。

 

 

另外可以使用Property工厂类来定义和持久对象属性的相关条件。

 

 

添加排序

若需要对结果排序,在在查询之前把排序字段交给Criteria接口。相当于为SELECT语句添加ORDER BY语句。

Criteria接口中定义了如下方法:

Criteria addOrder(Order order)

该方法为结果集排序。

 

返回结果

得到查询结果。

Criteria接口中定义了如下方法:

List list()

返回查询结果集。

 

 

分享到:
评论

相关推荐

    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 查询方法

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

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

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

    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. **添加限制条件...

    Hibernate中Criteria的用法

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

Global site tag (gtag.js) - Google Analytics