hibernate 的QBC查询
一,三个工具类
1,Projection类,作用:对查询结果进行统计(count)、分组(group)、求平均值(avg)、求最大值(max)、求最小值(min)、求合计(sum)。
ep:
public void bookProjection(){
//获得session
Session session=SessionFactory.getSession();
//创建Criteria,Book为图书类
Criteria criteria=session.createCriteria(Book.class);
//构建ProjectionList 对象
ProjectionList pList=Projections.projectionList();
//创建分组依据
//安出版社分组
pList.add(Projections.groupProperty("publishers"));
}
//统计各分组的的总记录数
pList.add(Projections.rowCount());
//各组的图书总价格
pList.add(Projecttions.sum("prices"));
//提交Projection给Criteria
criteria.setProjection(pList);
//执行查询获得结果
List list=criteria.list();
//迭代结果
Iterator iterator=list.iterator();
//遍历查询结果
while(iterator.hasNext()){
Object[] object=(Object[])iterator.nest();
Publishers publishers=(Publishers)object[0];
System.out.println("出版社名称:"+publishers.getName()+" 图书总数:" +object[1]+" 价格总和:" +object[2])
}
2,Restrictions类,作用:对查询条件进行封装,如Restrictions.eq(等于)、Restrictions.allEq(使用Map,使用key / value 进行多个等于比较)、
Restrictions.gt(大于>)、Restrictions.ge(大于等于>=)、Restrictions.lt(小于<)、Restrictions.le(小于等于<=)、Restrictions.between(相当于sql中的between·)、
Restriction.like(相当于sql中的like)、Restrictions.in(相当于sql中的in)、Restrictions.and(and关系)、Restrictions.or(or关系)、Restrictions.sqlRestriction(SQL限定查 询)。
ep:public void likeBook(Book book){
//获得session
Session session=SessionFactory.getSession();
//创建查询所有图书的Criteria
Criteria criteria=session.createCriteria(Book.class);
//使用Restrictions对象编写查询条件,并将查询条件加入Criteria对象
if( book!=null){
if(book.getTitle()!=null&&!book.getTitle().equals("")){
// 按书名进行筛选
criteria.add(Restrictions.like("title",book.getTitle(),Match.ANYWHERE));
}
List list=criteria.list();
//遍历查询结果
Iterator iterator=list.iterator();
while(iterator.hasNext()){
Book book=list.next();
System.out.println( book.getTitle()+book.getAuthor());
}
}
}
3,Order类,对结果设置排序方法 Order.asc(升序),Order.desc(降序)
ep; public void bookOrder(){
//获得session
Session session=SessionFactory.getSession();
//创建查询所有图书的Criteria
Criteria criteria=session.createCriteria(Book.class);
//对结果按id升序排序
criteria.addOrder(Order.asc("id"));
}