您的位置:首页 > 其它

Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

2014-10-23 22:02 495 查看
转自:http://blog.csdn.net/iijse/article/details/6161143

HQL查询方式

这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多。条件查询、分 页查询、连接查询、嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了类或者对象。其它的,包括一些查询函数 (count(),sum()等)、查询条件的设定等,全都跟SQL语法一样。

示例:
[code]












[/code]

QBC(Query By Criteria) 查询方式

这种方式比较面向对象方式,重点是有三个描述条件的对象:Restrictions,Order,Projections。使用QBC查询,一般需要以下三个步骤:

使用Session实例 的createCriteria()方法创建Criteria对象

使用工具类Restrictions的方法为Criteria对象设置查询条件,Order工具类的方法设置排序方式,Projections工具类的方法进行统计和分组。

使用Criteria对象的list()方法进行查询并返回结果

Restrictions类的常用方法:

方法名称

描述

Restrictions.eq等于
Restrictions.allEq使用Map,Key/Valu进行多个等于的比对
Restrictions.gt大于
Restrictions.ge大于等于
Restrictions.lt小于
Restrictions.le小于等于
Restrictions.between对应SQL的between
Restrictions.like对应SQL的like
Restrictions.in对应SQL的in
Restrictions.andand关系
Restrictions.oror关系
Restrictions.sqlRestrictionSQL限定查询
Order类的常用方法:

方法名称

描述

Order.asc升序
Order.desc降序
Projections类的常用方法

方法名称

描述

Projections.avg求平均值
Projections.count统计某属性的数量
Projections.countDistinct统计某属性不同值的数量
Projections.groupProperty指定某个属性为分组属性
Projections.max求最大值
Projections.min求最小值
Projections.projectionList创建一个ProjectionList对象
Projections.rowCount查询结果集中的记录条数
Projections.sum求某属性的合计
示例:

[code]













[/code]

QBE(Query By Example)查询方式

将一个对象的非空属性作为查询条件进行查询。

示例:
[code]














[/code]

离线查询

离线查询就是建立一个DetachedCriteria对象,将查询的条件等指定好,然后在session.beginTransaction()后将这个对象传入。通常这个对象可以在表示层建立,然后传入业务层进行查询。

示例:
[code]















[/code]

复合查询

复合查询就是在原有查询的基础上再进行查询,可以调用Criteria对象的createCriteria()方法在这个Criteria对象的基础上再进行查询。

示例:
[code]























[/code]

分页查询

分页查询主要是要指定两个参数:从第几条数据开始,取多少条数据。可以通过调用Query或者Criteria对象的setFirstResult()和setMaxResults()方法分别进行设定。

示例:

[code]












.class,
"executeTime",
searchCriteria.getStartDate(),
searchCriteria.getEndDate());

// tradeNo
if (StringUtils.isNotEmpty(searchCriteria.getTradeNo())) {
detachedCriteria.add(Restrictions.eq("tradeNo", searchCriteria.getTradeNo()));
}
// code
if (!GwStringUtil.isNullOrEmpty(searchCriteria.getCode())) {
detachedCriteria.add(Restrictions.eq("code", searchCriteria.getCode()));
}

// platform
searchCriteria.setSortByFields("agentNo", "executeTime");
searchCriteria.setSortOrders(GwConstants.ASC, GwConstants.DESC);
/*********** --------------------查询条件 end---------------- **************/
searchService.find(searchCriteria, detachedCriteria, super.getLocale(), true);

}
} catch (Exception e) {
logger.error("", e);
throw e;
}
return SUCCESS;
}

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: