天天看点

QBC 查询

当使用 hibernate 的 QBC 进行查询的时候,无需写 sql 语句,使用的是 Criteria 对象中的方法进行的实现,创建 Criteria 对象的时候,需要传入一个实体类.class,会自动关联该实体类对应的数据库表。

一:查询所有

Criteria criteria = session.createCriteria(User.class)

List<User> list = criteria.list()

二:条件查询

使用 Criteria 对象进行查询的时候,无语句,使用的是 Criteria 对象封装的方法进行条件的拼接。

QBC 查询

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()

继续阅读