Query By Criteria 条件查询,一种更加面向对象化的查询方式,常用于多条件组合查询,
1.简单查询 查类所映射表中的所有纪律
Criteria criteria = session.createCriteria(类名.class);
List<类名> list = criteria.list();
for(类名 a : list){
syso(a);
}
2.排序查询
Criteria criteria = session.createCriteria(类名.class);
criteria.addOrder(Order.asc(“属性名”));//按照属性值升序or Order.desc("")
Criteria criteria = session.createCriteria(类名.class);
for(){}
3.分页查询
Criteria criteria = session.createCriteria(类名.class);
criteria.setFirstResult(0);//初始位置,可动态
criteria.setMaxResults(10);//一次显示几个
List<类名> list = criteria.list();
for(){}
4.条件查询
// 设置条件:
/**Restrictions管制,约束
* = eq
* > gt Greater than
* >= ge Greater equal
* < lt less than
* <= le less equal
* <> ne not equal
* like
* in
* and
* or
*/
Criteria criteria = session.createCriteria(类名.class);
criteria.add(Restrictions.eq(“属性名”,“属性值”));查询指定属性名中取值为指定属性值的记录
List<类名> list = criteria.list();
for(){}
其他and:criteria.add(Restrictions.like("属性名","属性值%"));可以与eq等并列 where a and b
其他or:criteria.add(Restrictions.or(Restrictions.like("属性名","属性值%"));where a or b
5.统计查询
/**
* add :普通的条件。where后面条件
* addOrder :排序
* setProjection :聚合函数 和 group by having
*/
Criteria criteria = session.createCriteria(类名.class);
criteria.setProjection(Projection.rowCount());
Long num = ( Long ) criteria.uniqueResult();
//发送的是select count(*)语句
6.离线条件查询(SSH)Detached 分离的 Criteria规范
//在web层设置离线查询,可以避免dao层拼接过多的sql语句,也可以避免传递过多参数,例如按价格区间查询
//使用DetachedCriteria --离线(脱离session使用)
DetachedCriteria dc = DetachedCriteria.forClass(类名,class);
//设置条件
dc.add(Restrictions.eq());
service.query(dc)
//在service层 dao.query(dc)
//在dao层 fun(dc){
//绑定session后获得criteria对象(传入的参数dc获得能执行的criteria对象,并且需要与当前线程绑定)
Criteria criteria = dc.getExcuteableCriteria(session);
criteria.list();
}
fun(dc){同上}