- 浏览: 237063 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (165)
- Java基础 (49)
- 开发工具 (3)
- Python基础 (1)
- Oracle基础 (9)
- Java 符号计算 (0)
- 计算机基本原理 (10)
- SQL (6)
- javascript (16)
- HTML (2)
- XML (4)
- 程序员之路 (7)
- JDBC (1)
- Unicode (0)
- 字符编码 (3)
- JSP基础 (2)
- Servlet&JSP (9)
- MySQL基础 (1)
- UML基础 (1)
- Hibernate (2)
- Java包 (1)
- Spring (1)
- Struts2 (9)
- 系统命令 (1)
- Tomcat (1)
- Windows (1)
- Android (1)
- C#基础 (14)
- HTML5 (1)
- .NET基础 (1)
- 数据库基础 (2)
- ASP.NET基础 (7)
- 开源Java (3)
- 趣味算法 (1)
- 面向对象思想 (1)
- 软件应用 (1)
- Web工程 (1)
- jquery (2)
- JPA (0)
- 设计模式 (0)
最新评论
-
静夜独窗:
JavaBean组件能说的具体一点吗,我感觉这样说理解的不清晰 ...
EL 表达式语言 -
静夜独窗:
在Java中,不同字符集编码的转换是通过Unicode作为中介 ...
JavaWeb中的乱码产生与解决方案
按条件方式查询QBC
Query By Criteria,Hibernate提供了Criteria接口类为开发者在运行时建立查询条件,开发者可以动态的建立查询条件。
相比于SQL、HQL,QBC的可读性弱。
创建Criteria实例
Criteria接口位于org.hibernate包下,是一个通过组装不同查询条件来获取持久对象的条件类对象。
Session是Criteria实例的工厂。以下是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接口的主要实现类包括:Example,Junction,SimpleExpression。
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查询方式"这个主题,显然是围绕Hibernate中的Criteria API展开的,这是一种灵活且类型安全的查询机制,用于在Java代码中构建SQL查询。Criteria API提供了一种面向对象的方式来查询数据库,避免了直接...
首先,让我们了解Criteria查询的基本组成部分: 1. **CriteriaQuery**: 这是查询的主对象,用于定义查询的类型(例如,选择、更新或删除)以及要查询的数据实体。 2. **Root**: 它代表查询的起点,通常是对数据库...
本篇将详细讲解如何在Hibernate中利用Criteria查询来实现类似SQL的查询操作,并探讨其在实际开发中的应用。 Criteria查询是Hibernate提供的一种灵活的查询方式,它可以让我们根据业务需求动态地构建查询条件。这种...
与传统的SQL查询相比,Criteria查询更加面向对象,易于理解和维护。在Hibernate框架中,Criteria查询是除HQL之外的另一种常用查询方式。 #### 二、Criteria 接口 `org.hibernate.Criteria` 接口代表了针对某个特定...
### Hibernat 使用Criteria查询多对多关系(SET集合)条件 #### 背景介绍与概念理解 在Java开发中,特别是在企业级应用中,持久化层的处理至关重要。Hibernate作为一款流行的Java持久化框架,它提供了一种非常简便...
在探讨Hibernate中关于Criteria查询条件的选择时,我们深入解析了Criteria接口如何被用来构建复杂的查询语句,以及各种表达式如何被运用到这些查询中。以下是对文档中提及的各个知识点的详细阐述: ### Criteria...
Hibernate中的Criteria连表查询,包括单表属性查询,多表内连,以及左外连接查询
1、掌握Hibernate框架应用项目 2、学习HQL参数查询和Criteria查询 3、比较HQL和Criteria的不同 建立web项目,通过页面查询构造动态查询语句,struts2和hibernate框架整合。
本资料主要关注的是Hibernate中的Criteria查询,这是一种灵活且强大的查询机制,允许程序员以编程方式构建SQL查询。 Criteria查询是Hibernate提供的API,与传统的HQL(Hibernate Query Language)查询相比,它更...
这个案例是根据分组查询,并且得到每组的条数,不懂得可以q我:1710086675,欢迎认识更多新朋友
【Hibernate的Criteria查询方法】 在软件开发中,尤其是在Java领域,ORM(对象关系映射)框架如Hibernate大大简化了数据库操作。Hibernate Criteria查询是其中一种强大的API,它提供了一种面向对象的方式来执行...
在Java的Hibernate框架中,Criteria查询提供了一种面向对象的方式来执行数据库查询,使得开发者无需直接编写SQL语句,尤其对不熟悉SQL的人来说更为友好。Criteria查询是Hibernate的一部分,它是SSH(Struts、Spring...
**Criterion** 是Criteria查询条件的基础接口。它定义了如何设置查询条件,例如等价于(eq)、大于等于(ge)、范围(between)等。Criterion可以通过Restrictions工具类来创建,这个工具类提供了大量的静态方法用于...
本篇内容将聚焦于Hibernate中的Criteria查询,这是一种动态构建SQL查询的方法,无需直接编写SQL语句,非常适合在程序运行时根据条件构建查询。 在Hibernate中,Criteria API提供了一种类型安全的方式来执行查询,它...
首先,我们需要从`Session`对象创建一个Criteria实例,这是所有Criteria查询的起点: ```java Session session = sessionFactory.openSession(); Criteria criteria = session.createCriteria(User.class); ``` ...
Hibernate Criteria 是一种在Java应用程序中使用Hibernate ORM框架执行SQL查询的方式。它提供了一种面向对象的方式来构建查询,使得代码更加可读和易于维护。Criteria API 提供了多种方法来构建复杂的查询,包括添加...
创建Criteria查询的第一步是获取`Session`对象,然后调用`createCriteria()`方法,传入需要查询的实体类名。例如: ```java Criteria criteria = session.createCriteria(User.class); ``` 3. **添加限制条件...