QBC普遍使用于条件查询 是一种更加面向对象的查询方式
基本使用
public void test1(){
Session session = HibernateUtil.openSession();
Criteria criteria = session.createCriteria(User.class);
//添加排序
criteria.addOrder(Order.desc("user_id"));
//分页查询
criteria.setFirstResult(0);
criteria.setMaxResults(3);
List<User> list = criteria.list();
System.out.println(list);
}
条件查询
public void test2() {
Session session = HibernateUtil.openSession();
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.eq("user_code","1"));
criteria.add(Restrictions.like("user_name","张%"));
List<User> list = criteria.list();
for (User user : list) {
System.out.println(user);
}
}
统计查询
public void test3(){
//统计查询 只有一个结果
Session session = HibernateUtil.openSession();
Criteria criteria = session.createCriteria(User.class);
//统计查询
criteria.setProjection(Projections.rowCount());
//执行查询
Object o = criteria.uniqueResult();
System.out.println(o);
}
criteria.setProjection 可以设置一些聚合函数
离线条件查询
是指脱离session添加条件
可以在外部提前使用DetachedCriteria对象提前设置条件,然后再绑定到session中
public void test4(){
//获得离线条件
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(User.class);
//设置条件
detachedCriteria.add(Restrictions.like("user_name","张%"));
Session session = HibernateUtil.openSession();
Criteria executableCriteria = detachedCriteria.getExecutableCriteria(session);
List<User> list = executableCriteria.list();
System.out.println(list);
}