当使用 hibernate 的 QBC 进行查询的时候,无需写 sql 语句,使用的是 Criteria 对象中的方法进行的实现,创建 Criteria 对象的时候,需要传入一个实体类.class,会自动关联该实体类对应的数据库表。
一:查询所有
Criteria criteria = session.createCriteria(User.class)
List<User> list = criteria.list()
二:条件查询
使用 Criteria 对象进行查询的时候,无语句,使用的是 Criteria 对象封装的方法进行条件的拼接。
criteria.add 表示添加条件,
Restrictions .eq表示添加的是等值
Restrictions .gt表示添加的是大于
Restrictions .ge表示添加的是大于等于
Restrictions .lt表示添加的是小于
Restrictions .le表示添加的是大于等于
Restrictions .eq表示添加的是等值
Restrictions .like表示添加的是模糊查询
criteria.add(Restrictions .eq("实体类属性名",值))
等值查询:
Criteria criteria = session.createCriteria(User.class)
criteria.add(Restrictions.eq("userAge",20))
criteria.add(Restrictions.eq("userSex","男"))
List<User> list = criteria.list()
模糊查询:
Criteria criteria = session.createCriteria(User.class)
criteria.add(Restrictions.like("username","%mitu%"))
List<User> list = criteria.list()
三:排序查询
排序使用的是 criteria 对象中的方法 add0rder() 进行排序,需要传入一个 Order 对象,传入的 Order对象,可以使用 Order 类中的静态方法指定排序的字段和排序的方式
criteria.add0rder(Order.desc( "实体类属性名"));
升序:
Criteria criteria = session.createCriteria(User.class)
criteria.addOrder(Order.asc("cid"))
List<User> list = criteria.list()
降序:
Criteria criteria = session.createCriteria(User.class)
criteria.addOrder(Order.desc("cid"))
List<User> list = criteria.list()
四:分页查询
QBC 的分页查询,与 hql 语句分页查询使用的方法一样。setFirstResult() 设置起始位置,setMaxResult() 设置一页显示的条数。
Criteria criteria = session.createCriteria(User.class)
criteria.setFirstResult(0)
criteria.setMaxResult(5)
List<User> list = criteria.list()
五:统计查询
统计条数
Criteria criteria = session.createCriteria(User.class)
criteria.setProjection(Projedtions.rowCount());
使用 uniqueResult() 获取执行的结果
Object count = criteria.uniqueResult()
六:离线查询
QBC 可以进行离线查询,不通过 session 获取 Criteria 对象,
获取 DetachedCriteria 对象
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(User.class);
当需要执行查询的时候,传入 session 获取 Criteria 对象
Criteria criteria = detachedCriteria.getExecutableCriteria(session);
List<User> list = criteria.list()