- 浏览: 549077 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
coosummer:
推荐使用http://buttoncssgenerator.c ...
【转载】CSS圆角按钮(一) -
saiarmuluo:
不错,支持。
java log4j日志 写入数据库 -
springdata_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
Freemarker 使用 -
zlbdexiaohao:
棒棒的
flex ToolTip汇总 -
hw_128:
demo的代码的,能不能发一下,谢谢 qq257515270 ...
java log4j日志 写入数据库
Criteria Query通过面向对象的设计,将数据查询条件封装为一个对象。简单来说,Criteria Query可以看作是传统SQL的对象化表示,如:
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1));
这里的criteria实例本质上是对SQL“select * from t_user where name='Erica' and sex=1”的封装。
Hibernate在运行期会根据Criteria中指定的查询条件生成相应的SQL语句。
Criteria查询表达式
Criteria本身只是一个容器,具体的查询条件要通过Criteria.add方法添加到Criteria实例中。
方法 | 描述 |
Expression.eq |
对应SQL “field=value”表达式 如:Expression.eq("name","Erica") |
Expression.allEq | 参数为一个Map对象,其中包含了多个属性-值对应关系。相当于多个Expression.eq关系的叠加 |
Expression.gt | 对应SQL“field>value”表达式 |
Expression.ge | 对应SQL“field>=value”表达式 |
Expression.lt | 对应SQL“field<value”表达式 |
Expression.le | 对应SQL“field<=value”表达式 |
Expression.between |
对应SQL“between”表达式 如:Expression.between("age",new Integer(13),new Integer(50)); |
Expression.like | 对应SQL"field like valule"表达式 |
Expression.in | 对应SQL“field in...”表达式 |
Expression.eqproperty | 用于比较两个属性之间的值,对应SQL“field>field” |
Expression.gtProperty | 用于比较两个属性之间的值,对应SQL“field>=field” |
Expression.ltProperty | 用于比较两个属性之间的值,对应SQL"field<field" |
Expression.leProperty | 用于比较两个属性之间的值,对应SQL"field<=field" |
Expression.and |
and关系组合,如: Expression.add(Expression.eq("name","Erica"),Expression.add("sex",new Integer(1))) |
Expression.or |
or关系组合,如: Expression.or(Expression.eq("name","Erica"),Expression.add("sex",new Integer(1))) |
Expression.sql |
作为补充,本方法提供了原生SQL语法的支持,我们可以通过这个方法直接通过SQL语句限定查询条件 下面的代码返回所有名称以"Erica"其实的记录: |
在Hibernate3中,引入了Restrictions类作为Expression的替代。
示例查询
Example类实现了Criteria接口,同样,它也可以用作Criteria的查询条件。Example的作用是:根据已有对象,查找属性与之相符的其他对象。
TUser exampleUser=new TUser();
exapleUser.getName("Erica");
criteria.add(Example.create(exampleUser));
List<TUser> list=criteria.list();
for(TUser user:list){
System.out.println(user.getName());
}
新建一个TUser对象exampleUser,并作为范本,查询所有name属性与之相同的记录。
复合查询
Criteria addrCriteria=criteria.createCriteria("addresses");
addrCriteria.add(Expression.like("addresses","%shanghai%"));
List<TUser> list = criteria.list();
for(TUser user:list){
System.out.println(user.getName());
Set<TAddress> addrSet=user.getAddresses();
for(TAddress addr:addrSet){
System.out.println(addr.getAddress());
}
}
红色部分就是我们新增的复合查询条件,可以看到,我们可以通过Criteria.createCriteria方法在原有Criteria对象的基础上构建复合查询。
DetachedCriteria
Hibernate2中,Criteria生命周期位于其宿主Session生命周期中,也就是说,由某个session创建的Criteria实例,一旦session销毁,那么此Criteria实例也随之失效。
Hibernate3中引入了DetachedCriteria,DetachedCriteria可以脱离session实例独立存在,这样,我们就可以将某些通用的Criteria查询条件进行抽离,每次使用时再与当前session实例绑定以获得更好的代码重用效果。
deCriteria.add(Expression.eq("name","Erica"));
deCriteria.add(Expression.eq("sex",new Integer(1)));
Criteria criteria=deCriteria.getExecutableCriteria(session);
List<TUser> list=criteria.list();
for(TUser user:list){
System.out.println(user.getName());
}
DetachedCriteria的生存周期与session实例无关,我们可以独立创建DetachedCriteria实例,并在需要使用时与session相绑定,从而获得运行期Criteria实例。这样,我们就可以将查询逻辑和Criteria实例分离,以获得最大化代码的重用效果。
DetachedCriteria也可以用于子查询表达:
avgAge.setProjection(Projections.avg("age"));
Criteria criteria=session.createCriteria(TUser.class);
criteria.add(Subqueries.propertyGT("age",avgAge));
通过Subqueries我们可以将DetachedCriteria纳入查询表达式,反映在SQL上则是一个典型的子查询语句。上例生成的SQL语句大致如:select ... from T_User where age > (select avg(age) from T_User)
Criteria高级特性
限定返回的记录范围
通过criteria.setFirstResult/setMaxResults方法可以限制一次查询返回的记录范围:
//限定查询返回检索结果中,从100条结果开始的20条记录
criteria.setFirstResult(100);
criteria.setMaxResults(20);
记录排序:
//
Criteria criteria=session.createCriteria(TUser.class);
criteria.add(Expression.eq("groupId",new Integer(2)));
criteria.addOrder(Order.asc("name"));
criteria.addOrder(Order.desc("groupId"));
分组与统计
在Hibernate3中,我们还可以通过Criteria完成分组和统计。分组、统计表达式由Hibernate3新引入的Projections Class进行封装。
criteria.setProjection(Projections.groupProperty("age"));
List<TUser> list=criteria.list();
for(TUser user:list){
System.out.println(user);
}
上例对当前的TUser记录按照年龄进行分组。通过Projections.groupProperty方法,我们指定了用于分组的目标属性“age”。生成的SQL语句:select this.age as y0_ from T_User this_group by this_.age。
另外,对于多条件组合的统计、分组功能,我们可以借助ProjectionList完成,下面的例子中,我们统计了各个年龄层次中的用户数量:
projectionList.add(Projections.groupProperty("age"));
projectionList.add9Projections.rowCount());
Criteria criteria=session.createCriteria(TUser.class);
criteria.setProjection(projectionList);
本文转载:http://www.cnblogs.com/MeChecksV/
发表评论
-
【转】java中volatile关键字的含义
2013-05-12 16:06 1008用在多线程,同步变量。 线程为了提高效率,将某成员变量(如A ... -
java 收集
2012-10-22 09:16 0OpenSessionInViewFilter在查询完之后不提 ... -
java连接sql时候,获取表格各列属性
2012-10-19 18:09 0import java.sql.Connection; ... -
【转载】log4j 日志大小
2012-03-23 19:31 10661今天群里一个哥们问一 ... -
spring bean 自定义作用域
2012-02-18 15:02 4337一般都知道spring2.x bean的作用域 Bean ... -
【转】java获取jar文件位置
2012-02-16 21:04 2039网络转载 在编程的时候如果在工程中无意中导入多个同样的jar ... -
java 逐位运算符
2012-01-22 16:53 4545运算符归类: 一元运算符:逻辑运算符(!),非运算符( ... -
hibernate hql
2011-12-15 20:05 0hibernate -hql 1.hql中最简单的查询 f ... -
Hibernate初探(二)
2011-12-15 16:32 38hql 关联查询fetch hql code: from Te ... -
hibernate 复合主键
2011-11-01 19:30 1363hibernate 复合主键 在实体中可以定义一个嵌入式组件( ... -
28234行的java 类文件
2011-08-29 16:04 937有图为证:28234行的java 类文件 各位有没有???见过 ... -
递归显示文件夹下文件
2011-08-10 14:43 921public static void main(String[ ... -
java.lang.UnsupportedClassVersionError异常解决办法
2011-06-14 14:32 1531出现错误的原因: 是因为我们使用高版本的JDK编译的Java ... -
内部类修改外部类属性
2011-06-10 16:55 5711public class Test { public Str ... -
java log4j日志 写入数据库
2011-06-01 20:57 11308因一个群朋友log4j日志 ... -
eclipse改图片
2011-05-14 08:44 1235例如:eclipse目录在 D:\rd\eclipse3.3 ... -
【转载】<s:doubleselect>标签的使用
2011-01-05 08:49 5500本文装载自:http://karidyang.iteye.co ... -
spirng2.x-入门
2011-01-04 09:50 958Spring 2.5 中除了提供 @Component 注释外 ... -
自定义 StringUtil 处理类
2011-01-04 09:41 1187isNumber //判读是不是数字 isDate//判读 ... -
struts2 页面国际化
2010-12-29 15:24 1101//输出配置文件中的属性<s:text name=&qu ...
相关推荐
【标题】"hibernate学习笔记-01helloworld"主要涵盖了Hibernate框架的基础入门知识,是初学者了解和掌握Hibernate的重要起点。Hibernate是一款强大的Java对象关系映射(ORM)框架,它简化了数据库操作,使得开发者...
### Hibernate—我的Hibernate学习笔记 #### 一、对象持久化的理论与实践 ##### 对象持久化概念 对象持久化指的是将内存中的对象状态保存至外部持久性存储设备(如硬盘),以便于日后需要时能够恢复其状态。这一...
【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...
**Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...
**Hibernate学习笔记与大纲** Hibernate 是一款开源的Java语言下的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。本笔记将深入...
### Hibernate 学习笔记知识点概览 #### 一、Hibernate 概述 - **定义**:Hibernate 是一款开源的对象关系映射(ORM)框架,它实现了将 Java 应用程序中的对象模型映射到关系型数据库中的记录。通过 ORM 技术,...
Hibernate是一款强大的Java持久...通过阅读这份“Hibernate API帮助文档”和“Hibernate学习笔记”,你将能够深入理解Hibernate的工作原理,掌握其API的使用,并能在实际项目中有效地利用Hibernate进行数据持久化操作。
【Hibernate学习笔记(1-13)】是传智播客李勇的教程,涵盖了Hibernate框架的基础到进阶内容。Hibernate是一个流行的ORM(对象关系映射)框架,它旨在解决Java面向对象编程与关系型数据库之间的模型不匹配问题,即...
### 马士兵 Hibernate 学习笔记概览 #### 一、Hello World 示例 - **简介**:通过简单的示例程序来快速入门 Hibernate 框架。 - **步骤**: 1. 创建 Java 项目 `hibernate_0100_HelloWorld`。 2. 构建 User-...
《Hibernate学习笔记——马士兵教程解析》 在Java开发领域,ORM(Object-Relational Mapping)框架的使用已经非常普遍,其中Hibernate作为一款优秀的ORM框架,因其强大的功能和易用性深受开发者喜爱。本文将根据马...
**hibernate学习笔记第四天源码解析** 在hibernate学习的过程中,第四天通常会深入探讨实体类、映射文件、配置文件以及查询语言等方面的内容。这些是hibernate框架的基础,也是开发者掌握持久化操作的关键。让我们...
【hibernate-学习笔记】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中管理关系数据库数据的便捷方式。本学习笔记将深入探讨Hibernate的核心概念、配置、实体映射、查询...
在深入探讨Hibernate学习笔记第二天的源码之前,我们先来理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象模型,大大简化了数据访问层的开发...
例如,通过HQL(Hibernate Query Language)可以实现复杂的查询;利用注解(Annotations)和Criteria查询可以进行更加面向对象的数据库操作;在MyBatis入门章节中,则介绍了如何使用MyBatis框架替代JDBC,尽管...
《马士兵Hibernate学习笔记》是一份深入浅出的教程,旨在帮助初学者掌握Hibernate这一流行的Java持久化框架。Hibernate是一个对象关系映射(ORM)工具,它允许开发者用面向对象的方式来操作数据库,从而减少了传统...
【hibernate学习笔记_北大青鸟课堂笔记全文】 Hibernate是一个强大的对象关系映射(ORM)框架,它为Java开发者提供了便捷的数据持久化方案。在Java应用中,尤其是在企业级开发中,它扮演着至关重要的角色,使得我们...
【hibernate4框架学习笔记】 Hibernate是一款强大的ORM(Object-Relational Mapping)框架,它在Java开发中扮演着至关重要的角色,通过提供对象与数据库之间的映射,解决了对象模型和关系模型之间的“阻抗不匹配”...