QBC简介
QBC(Query By Criteria) API提供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和Expresson类组成,它支持在运行时动态生成查询语句。
QBC检索步骤:
1.调用Session的createCriteria()方法创建一个Criteria对象。
2.设定查询条件。Restrictions类提供了一系列用于设定查询条件的静态方法,
这些静态方法都返回Criterion实例,每个Criterion实例代表一个查询条件。
Criteria的add()方法用于加入查询条件。
3.调用Criteria的list()方法执行查询语句。该方法返回List类型的查询结果,在
List集合中存放了符合查询条件的持久化对象。
1.查找平均年龄
@Test
public void test1(){
System.out.println("test....");
TUserEntity user = null;
SessionFactory sessionFactory = SessionFactoryUtil.getSessionFactory();
Session session = null;
session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(TUserEntity.class);
criteria.setProjection(Projections.avg("age"));
Number avgage = (Number)criteria.uniqueResult();
System.out.println("平均年龄"+avgage);
}
结果:
2.查询所有人的年龄
@Test
public void test2(){
System.out.println("test....");
TUserEntity user = null;
SessionFactory sessionFactory = SessionFactoryUtil.getSessionFactory();
Session session = null;
session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(TUserEntity.class);
criteria.setProjection(Projections.projectionList().add(Projections.property("age")));
criteria.addOrder(org.hibernate.criterion.Order.asc("age"));
List ages = criteria.list();
for (int i=0;i<ages.size();i++){
System.out.println("年龄"+ ages.get(i));
}
}
3.按性别分组查询年龄的平均值显示大于30的
@Test
public void test3(){
System.out.println("test....");
TUserEntity user = null;
SessionFactory sessionFactory = SessionFactoryUtil.getSessionFactory();
Session session = null;
session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(TUserEntity.class);
criteria.setProjection(Projections.projectionList().add(Projections.avg("age")).add(Projections.groupProperty("gender")));
List ages = criteria.list();
for (int i=0;i<2;i++){
Object[] obj = (Object[])ages.get(i);
if (Double.parseDouble(obj[0].toString()) > 30){
System.out.println(obj[0]+" " +obj[1]);
}
}
}
总结
简单的练习了一下QBC后,我就得对于使用QBC只要做到能多查接口的使用就可以很好的使用QBC。