- 浏览: 431617 次
- 性别:
- 来自: 宁波
文章分类
最新评论
-
coosummer:
推荐使用http://buttoncssgenerator.c ...
11大CSS按钮教程 -
a754782339:
楼主你好,我现在遇到的问题就是json与hibernate使 ...
Json-lib 与 hibernate 共同使用的问题 -
ying890:
非常感谢!
Extjs 处理 Date 对象 -
xa_zbl:
加了以后,报这个错误:TypeError: b[this.vt ...
ExtJs自定义Vtype示例 -
nbkangta:
dampce032 写道如果我想取到Person下Addres ...
Json-lib 与 hibernate 共同使用的问题
使用Criteria進行查詢時,不僅僅能組合出SQL中where子句的功能,還可以組合出如排序、統計、分組等的查詢功能。
排序
您可以使用Criteria進行查詢,並使用org.hibernate.criterion.Order對結果進行排序,例如使用Oder.asc(),指定根據”age”由小到大排序(反之則使用desc()):
注意在加入Order條件時,使用的是addOrder()方法,而不是add()方法,在產生SQL語句時,會使用order by與asc(desc)來進行排序指定:
限定查詢筆數
Criteria的setMaxResults()方法可以限定查詢回來的筆數,如果配合setFirstResult()設定傳回查詢結果第一筆資料的位置,就可以實現簡單的分頁,例如傳回第51筆之後的50筆資料(如果有的話):
Criteria criteria = session.createCriteria(User.class);
criteria.setFirstResult(51);
criteria.setMaxResults(50);
List users = criteria.list();
根據您所指定得資料庫,Hibernate將自動產生與資料庫相依的限定筆數查詢子句,例如在MySQL中,將使用limit產生以下的SQL語句:
統計動作
您可以對查詢結果進行統計動作,使用 org.hibernate.criterion.Projections的avg()、rowCount()、count()、max()、min ()、 countDistinct()等方法,再搭配Criteria的setProjection()方法加入條件設定,例如對查詢結果的"age"作平均:
Criteria criteria = session.createCriteria(User.class);
criteria.setProjection(Projections.avg("age"));
List users = criteria.list();
上面的程式將由Hibernate自動產生SQL的avg函數進行平均計算:
Hibernate: select avg(this_.age) as y0_ from T_USER this_
分組
還可以配合Projections的groupProperty()來對結果進行分組,例如以"age"進行分組,也就是如果資料中"age"如果有 20、20、25、30,則以下會顯示20、25、30:
上面的程式將由Hibernate自動產生SQL的group by子句進行分組計算:
如果想同時結合統計與分組功能,則可以使用org.hibernate.criterion.ProjectionList,例如下面的程式會計算每個年齡各有多少個人:
觀察所產生的SQL語句,將使用group by先進行分組,再針對每個分組進行count函數的計數,
根據已知物件進行查詢
設定查詢條件並非一定要使用Restrictions,如果屬性條件很多,使用Restrictions也不方便,如果有一個已知的物件,則可以根據這個物件作為查詢的依據,看看是否有屬性與之類似的物件,例如:
您可以透過 org.hibernate.criterion.Example的create()方法來建立Example實例,Example實作了 Criteria介面,因此可以使用add()方法加入至Criteria條件設定之中,Hibernate將自動過濾掉空屬性,根據已知物件上已設定的 屬性,判定是否產生於where子句之中:
設定SQL範本
如果您了解如何撰寫SQL語句,想要設定一些Hibernate產生SQL時的範本,您也可以使用Restrictions的sqlRestriction()方法,提供SQL語法範本作限定查詢,例如查詢name以cater開頭的資料:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.sqlRestriction(
"{alias}.name LIKE (?)", "cater%", Hibernate.STRING));
List users = criteria.list();
其中alias將被替換為與User類別相關的名稱,而? 將被替換為cater%,也就是第二個參數所提供的值,sqlRestriction()方法第一個參數所設定的是where子句的部份,所以在SQL撰 寫時,不必再寫where,觀察所產生的SQL語句,將使用您所設定的SQL範本作為基礎,來完成SQL的條件查詢:
如果有多個查詢條件,例如between子句的查詢,則可以如下:
觀察所產生的SQL語句如下:
排序
您可以使用Criteria進行查詢,並使用org.hibernate.criterion.Order對結果進行排序,例如使用Oder.asc(),指定根據”age”由小到大排序(反之則使用desc()):
Criteria criteria = session.createCriteria(User.class); criteria.addOrder(Order.asc("age")); List users = criteria.list();
注意在加入Order條件時,使用的是addOrder()方法,而不是add()方法,在產生SQL語句時,會使用order by與asc(desc)來進行排序指定:
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ order by this_.age asc
限定查詢筆數
Criteria的setMaxResults()方法可以限定查詢回來的筆數,如果配合setFirstResult()設定傳回查詢結果第一筆資料的位置,就可以實現簡單的分頁,例如傳回第51筆之後的50筆資料(如果有的話):
Criteria criteria = session.createCriteria(User.class);
criteria.setFirstResult(51);
criteria.setMaxResults(50);
List users = criteria.list();
根據您所指定得資料庫,Hibernate將自動產生與資料庫相依的限定筆數查詢子句,例如在MySQL中,將使用limit產生以下的SQL語句:
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ limit ?, ?
統計動作
您可以對查詢結果進行統計動作,使用 org.hibernate.criterion.Projections的avg()、rowCount()、count()、max()、min ()、 countDistinct()等方法,再搭配Criteria的setProjection()方法加入條件設定,例如對查詢結果的"age"作平均:
Criteria criteria = session.createCriteria(User.class);
criteria.setProjection(Projections.avg("age"));
List users = criteria.list();
上面的程式將由Hibernate自動產生SQL的avg函數進行平均計算:
Hibernate: select avg(this_.age) as y0_ from T_USER this_
分組
還可以配合Projections的groupProperty()來對結果進行分組,例如以"age"進行分組,也就是如果資料中"age"如果有 20、20、25、30,則以下會顯示20、25、30:
Criteria criteria = session.createCriteria(User.class); criteria.setProjection(Projections.groupProperty("age")); List users = criteria.list();
上面的程式將由Hibernate自動產生SQL的group by子句進行分組計算:
Hibernate: select this_.age as y0_ from T_USER this_ group by this_.age
如果想同時結合統計與分組功能,則可以使用org.hibernate.criterion.ProjectionList,例如下面的程式會計算每個年齡各有多少個人:
ProjectionList projectionList = Projections.projectionList(); projectionList.add(Projections.groupProperty("age")); projectionList.add(Projections.rowCount()); Criteria criteria = session.createCriteria(User.class); criteria.setProjection(projectionList); List users = criteria.list();
觀察所產生的SQL語句,將使用group by先進行分組,再針對每個分組進行count函數的計數,
Hibernate: select this_.age as y0_, count(*) as y1_ from T_USER this_ group by this_.age
根據已知物件進行查詢
設定查詢條件並非一定要使用Restrictions,如果屬性條件很多,使用Restrictions也不方便,如果有一個已知的物件,則可以根據這個物件作為查詢的依據,看看是否有屬性與之類似的物件,例如:
User user = new User(); user.setAge(new Integer(30)); Criteria criteria = session.createCriteria(User.class); criteria.add(Example.create(user)); List users = criteria.list();
您可以透過 org.hibernate.criterion.Example的create()方法來建立Example實例,Example實作了 Criteria介面,因此可以使用add()方法加入至Criteria條件設定之中,Hibernate將自動過濾掉空屬性,根據已知物件上已設定的 屬性,判定是否產生於where子句之中:
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where (this_.age=?)
設定SQL範本
如果您了解如何撰寫SQL語句,想要設定一些Hibernate產生SQL時的範本,您也可以使用Restrictions的sqlRestriction()方法,提供SQL語法範本作限定查詢,例如查詢name以cater開頭的資料:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.sqlRestriction(
"{alias}.name LIKE (?)", "cater%", Hibernate.STRING));
List users = criteria.list();
其中alias將被替換為與User類別相關的名稱,而? 將被替換為cater%,也就是第二個參數所提供的值,sqlRestriction()方法第一個參數所設定的是where子句的部份,所以在SQL撰 寫時,不必再寫where,觀察所產生的SQL語句,將使用您所設定的SQL範本作為基礎,來完成SQL的條件查詢:
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where this_.name LIKE (?)
如果有多個查詢條件,例如between子句的查詢,則可以如下:
Criteria criteria = session.createCriteria(User.class); Integer[] ages = {new Integer(20), new Integer(40)}; Type[] types = {Hibernate.INTEGER, Hibernate.INTEGER}; criteria.add(Restrictions.sqlRestriction( "{alias}.age BETWEEN (?) AND (?)", ages, types)); List users = criteria.list();
觀察所產生的SQL語句如下:
Hibernate: select this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ from T_USER this_ where this_.age BETWEEN (?) AND (?)
发表评论
-
还在用循环吗?Java复制文件内容NIO版本
2013-06-25 21:06 1418网上的文件操作目前都停留在老的IO API当中,这大概就是 ... -
Java 用泛型实现元组
2013-03-10 10:27 0Python, Ruby等动态语言的流行,我认为其中很大的一 ... -
试着解释神奇的7循环
2013-03-01 19:13 1126作为一名非计算机科班出身的程序员对计算机的底层架构知之甚少, ... -
Maven集成Jetty使用resteasy无法使用的问题
2013-02-12 14:44 2335最近在学习JAX-RS, 使用的是Jboss的 restea ... -
经常要忘记。。。Ubuntu install jdk 7
2013-01-14 20:33 945来自 http://blog.csdn.net/yang_h ... -
常见数字类型long, int, short和byte数组的转换
2012-11-05 17:13 1802show you the code~! /** * ... -
Java系统属性
2012-10-22 11:31 2294似乎从来没仔细看过java System.getPropert ... -
Java并发编程实践之Executor框架
2012-10-20 18:19 946java中任务的抽象不是Thread,而是Executor! ... -
《重构——改善既有代码的设计》读书笔记
2012-08-04 13:39 1259最近公司开展读书月活动,免费提供书籍要求读完上交读书笔记一篇 ... -
Java并发编程之CyclicBarrier实例
2012-06-24 15:18 1515最近在看《Java并发编程实战》,对于想学习Java多线程编程 ... -
使用 Eclipse Memory Analyzer 进行堆转储文件分析
2010-12-26 00:00 1686转自IBM DEVELOPER WORKS 对于大型 J ... -
java常见笔试题
2009-12-03 12:52 1350第一,谈谈final, finally, ... -
Myeclipse部署项目到服务器时,WEB-INF\classes中无文件解决方法
2009-07-08 10:49 6339今天重新从SVN将项目迁出了一下,在用Myeclipse部署项 ... -
JDBC获取数据库所有表
2009-06-21 15:49 9247当初在JDBC还没研究透的时候,就偷懒去用了hibernate ... -
[Jakarta Commons] 使用StringUtil类
2009-02-17 17:47 1373原文地址:http://www.blogjava.net/zJ ... -
Json-lib 如何转换日期格式的字段 json
2009-02-11 19:54 4945json : {password:"234234&q ... -
用 GlassFish v2 替换 Tomcat 5.x
2009-01-24 22:17 1810羡慕ROR的热部署啊,无论修改什么基本都可以热部署,tomca ... -
文件操作类
2009-01-04 16:47 1934把网上的文件操作类整合了一下,算是转帖 package ... -
Hibernate3的DetachedCriteria支持
2008-12-29 00:02 1183作者:robbin出处:Java视线责任编辑:方舟 居然隔了 ... -
String2 中的ActionContext引起的问题
2008-12-25 14:55 1347在Action中获取URL参数 String id = Ac ...
相关推荐
2.Algorithm Gossip: 费式数列. 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官(一) 6.Algorithm Gossip: 老鼠走迷官(二) 7.Algorithm Gossip: 骑士走棋盘 8.Algorithm Gossip: 八...
巴斯卡三角形 6 4.Algorithm Gossip: 三色棋 7 5.Algorithm Gossip: 老鼠走迷官(一) 9 6.Algorithm Gossip: 老鼠走迷官(二) 11 7.Algorithm Gossip: 骑士走棋盘 13 8.Algorithm Gossip: 八皇后 ...
Hibernate查询语言(HQL)类似于SQL,但面向对象,可以更方便地操作实体类。Criteria API则提供了一种类型安全的查询方式,允许在运行时动态构建查询,提高了代码的灵活性。 5. **缓存机制** Hibernate支持二级...
2.Algorithm Gossip: 费式数列 5 3. 巴斯卡三角形 6 4.Algorithm Gossip: 三色棋 7 5.Algorithm Gossip: 老鼠走迷官(一) 9 6.Algorithm Gossip: 老鼠走迷官(二) 11 7.Algorithm Gossip: 骑士走棋盘 ...
R-gossip算法通过在分布式系统的集群代理节点上设置移位寄存器,优化了传统gossip算法的收敛速度和负载均衡效率。这一改进为分布式系统提供了一种有效的负载均衡优化方案,对分布式系统设计和性能优化具有重要的指导...
2.Algorithm Gossip: 费式数列 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官 6.Algorithm Gossip: 老鼠走迷官(二) 7.Algorithm Gossip: 骑士走棋盘 8.Algorithm Gossip: 八皇 9....
草稿用法: from("gossip://<bound>:<port>/?peers=<listOfPeers>&routeIds=<listOfRouteIdsToControl>").to("controlbus:route");listOfRouteIdsToControl在此节点被提升/降级时启动/停止。 当您在需要故障转移...
Gossip协议的Go实现。 概述 该软件包提供了最终一致的内存中数据存储的实现。 数据存储值使用推挽式八卦协议进行交换。 // Create a gossiper g := NewGossiper("<ip>:<port>", "<unique>", "<peer>") // Add ...
针对在分布式一致性系统中常用的gossip算法负载均衡效率较低的问题,本文在概率gossip算法(probabilistic gossip algorithm)的基础上,设计了一种寄存器gossip算法(register gossip algorithm,下文简称R-gossip...
gossip - yet another lisp interpreter gossip是一个lisp解释器, 语法借鉴了scheme以及common lisp, 此项目的主要目的是学习。 安装 下载源码 打包: mvn package 运行方式: java -jar your_gossip_home/gossip-1.0-...
nodejs_八卦 nodejs八卦协议实现 nodejs 八卦.js 连接到 localhost:8080 在 chrome 中查看网络状态 控制台命令: 重启重置对等体颜色 css_color 建立网络的节点 断网示例 重建网络
分布式八卦算法,通常被称为Gossip协议,是一种在分布式系统中高效传播和同步信息的方法。它在许多场景下被广泛使用,比如在大规模的数据库复制、负载均衡、故障检测以及网络中的消息传递等。这种算法的设计灵感来源...
因此,我将软件命名为Gossip来构建一个工具,该工具使用户可以更有效,更方便地制作和传达故事。 使您的下一个演示文稿不是演示文稿。 入门 有一个可以帮助您使用Gossip创建和交付演示文稿所需的所有技术。 还有...
例如,./ ./gossip -p --verbose 实例化二进制后续时间以使用get参数接收资源。 例如,./ ./gossip get cats.jpg 运行测试 运行单元测试不需要任何设置。 go test ./... 包装说明 ID ID 包提供了生成唯一的随机 ...
标题中的“gossip”通常指的是一个分布式通信协议或库,用于节点间的高效、可靠的消息传递。在这种场景下,它可能是用JavaScript实现的一个轻量级、去中心化的通信框架,允许程序通过网络套接字(network sockets)...
标题“良葛格Gossip_struts_spring_hibernate”表明这是一个关于编程框架和技术教程的集合,其中涵盖了Spring、Struts和Hibernate等关键组件。描述提到是Spring技术手册的作者提供的教程,暗示内容可能深入且权威。 ...
Gossip 是一个套接字服务器,它使用 Phoenix 通道在 Inch CI 的工作进程和连接的客户端之间传递消息。 用法 要启动新的 Phoenix 应用程序: 使用mix deps.get安装依赖mix deps.get 使用mix phoenix.server启动 ...