hibernate 的查询方式
1 sql
2 hql
3 qbc
此处只介绍QBC
QBC一般的步骤是:
- 使用Session实例的createCriteria()方法创建Criteria对象;
- 使用工具类Restrictions的方法为Criteria对象设置查询条件,Order工具类的方法设置排序方式,Projections工具类的方法进行统计和分组;
- 使用Criteria对象的list()方法进行查询并返回结果。
主要用到三个描述条件的对象
Restrictions,Order,Projections
Restrictions 设置查询条件
返回值类型 | 方法名称 | 描述 |
SimpleExpression | Restrictions.eq | 等于(equal) |
Criterion | Restrictions.allEq | 使用Map,Key/Valu进行多个等于的比对 |
SimpleExpression | Restrictions.gt | 大于(great than) |
SimpleExpression | Restrictions.ge | 大于等于(great than or equal) |
SimpleExpression | Restrictions.lt | 小于(less than) |
SimpleExpression | Restrictions.le | 小于等于(less than or equal) |
Criterion | Restrictions.between | 对应SQL的between |
SimpleExpression | Restrictions.like | 对应SQL的like |
Criterion | Restrictions.in | 对应SQL的in |
LogicalExpression | Restrictions.and | and关系 |
LogicalExpression | Restrictions.or | or关系 |
Criterion | Restrictions.isNull | 为空 |
Criterion | Restrictions.sqlRestriction | SQL限定查询 |
Order 设置排序方式
返回值类型 | 方法名称 | 描述 |
Order | Order.asc | 升序 |
Order | Order.desc | 降序 |
Projections 统计和分组
返回值类型 | 方法名称 | 描述 |
AggregateProjection | Projections.avg | 求平均值 |
CountProjection | Projections.count | 统计某属性的数量 |
CountProjection | Projections.countDistinct | 统计某属性不同值的数量 |
PropertyProjection | Projections.groupProperty | 指定某个属性为分组属性 |
AggregateProjection | Projections.max | 求最大值 |
AggregateProjection | Projections.min | 求最小值 |
ProjectionList | Projections.projectionList | 创建一个ProjectionList对象 |
Projection | Projections.rowCount | 查询结果集中的记录条数 |
AggregateProjection | Projections.sum | 求某属性的合计 |
示例
1 单表查询
Criteria query =session.createCriteria(FileTrans.class);
query.add(Restrictions.eq("transNo", "1")); //等于
query.addOrder(Order.asc("id")); //排序
query.setFirstResult(0);
query.setMaxResults(2); //分页查询前两条
return query.list();
2 复合查询
Criteria clazz = session.createCriteria(FileTrans.class);
Criteria stu = clazz.createCriteria(Student.class);
stu.add(Restrictions.eq("name", "Bob"));
return stu.list();
DetachedCriteria
DetachedCriteria query =DetachedCriteria .forClass(FileTrans.class);
//设置属性时,需要注意数据类型
query.add(Restrictions.eq("transNo", "1"));
Criteria dc =query.getExecutableCriteria(session);
return dc.list();