前言
继续来学习QBC的聚合函数的查法。
分析
5. 聚合函数查询(Projection的聚合函数的接口,而Projections是Hibernate提供的工具类,使用该工具类设置聚合函数查询)
* 使用QBC的聚合函数查询,需要使用criteria.setProjection()方法
* 具体的代码如下
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
Criteria criteria = session.createCriteria(Linkman.class);
criteria.setProjection(Projections.rowCount());
List<Number> list = criteria.list();
Long count = list.get(0).longValue();
System.out.println(count);
tr.commit();
代码如下:
在第一个方法中,存在一个问题,其中关键的一句是
criteria.setProjection(null);
因为之前适用的是聚合函数的查法,set进方法了,如果在用其他查询,需要set一个null,恢复其默认值。
/**
* 强调问题: select count(*) from 表,又想查select * from 表单,存在问题
*/
@Test
public void run9(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建QBC查询接口
Criteria criteria = session.createCriteria(Linkman.class);
// 设置聚合函数的方式 select count(lkm_id) from 表; 5
criteria.setProjection(Projections.count("lkm_id"));
List<Number> list = criteria.list();
Long count = list.get(0).longValue();
System.out.println(count);
criteria.setProjection(null);
// 继续查询所有的联系人 select * from 表
List<Linkman> mans = criteria.list();
for (Linkman linkman : mans) {
System.out.println(linkman);
}
tr.commit();
}
/**
* 聚合函数的查询
*/
@Test
public void run8(){
Session session = HibernateUtils.getCurrentSession();
Transaction tr = session.beginTransaction();
// 创建QBC查询接口
Criteria criteria = session.createCriteria(Linkman.class);
// 设置聚合函数的方式
List<Number> list = criteria.setProjection(Projections.count("lkm_id")).list();
Long count = list.get(0).longValue();
System.out.println(count);
tr.commit();
}