public class CCCCCCCCCTTT {
@Autowired
private SessionFactory sessionFactory;
public Object test(String param,String param2){
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Entity.class);
criteria.add(Restrictions.eqOrIsNull("filed", param));//相等或是为空
criteria.add(Restrictions.like("filed2", param2));//模糊查询
Object o = criteria.uniqueResult();//查询符合条件的唯一值,若查询出来多个,则抛出异常。
criteria.addOrder(Order.desc("filed"));//降序排序
criteria.setFirstResult(1);
criteria.setMaxResults(10);
//List<Entity> list = criteria.list();
return o;
}
}
uniqueResult()
方法用于返回 唯一 的结果对象。该方法一般用在确信只有一条满足条件的记录时使用,如果结果集的记录条数超出将会 抛出异常。
list()
方法可返回一个符合条件的集合,其再根据自己业务需求对数据进行处理。
setFirstResult(int maxResults)
方法 需要一个代表你的结果集的第一行的整数,以第 0 行为开始
setMaxResults(int maxResults)
方法 表示可以返回 maxResults 条符合条件的数据
比较运算符 | 写法 |
---|---|
= | Restrictions.eq() 等于 |
!= | Restrictions.not(Exprission.eq()) 不等于 |
> | Restrictions.gt() 大于 |
>= | Restrictions.ge() 大于等于 |
< | Restrictions.lt() 小于 |
<= | Restrictions.le() 小于等于 |
is null | Restrictions.isnull() 等于空值 |
is not null | Restrictions.isNotNull() 非空值 |
like | Restrictions.like() 字符串模式匹配 |
and | Restrictions.and() 逻辑与 |
and | Restrictions.conjunction() 逻辑与 |
or | Restrictions.or() 逻辑或 |
or | Restrictions.disjunction() 逻辑或 |
not | Restrictions.not() 逻辑非 |
in(列表) | Restrictions.in() 等于列表中的某一个值 |
ont in(列表) | Restrictions.not(Restrictions.in())不等于列表中任意一个值 |
between A and B | Restrictions.between() 闭区间AB中的任意值 |
not between A and B | Restrictions.not(Restrictions.between()) -> 小于值A或者大于值B |
SQL | Restrictions.sqlRestriction –> SQL限定的查询 |
排序 asc | Order.asc –> 根据传入的字段进行升序排序 |
排序 desc | Order.desc –> 根据传入的字段进行降序排序 |
like匹配 | MatchMode.EXACT –> 字符串精确匹配.相当于"like ‘value’" |
like匹配 | MatchMode.ANYWHERE –> 字符串在中间匹配.相当于"like ‘%value%’" |
like匹配 | MatchMode.START –> 字符串在最前面的位置.相当于"like ‘value%’" |
like匹配 | MatchMode.END –> 字符串在最后面的位置.相当于"like ‘%value’" |
criteria中组函数的使用
标准 API 提供了 org.hibernate.criterion.projections
类可得到各属性值的平均值,最大值或最小值。Projections 类与 Restrictions 类相似,提供了几个获取组函数的静态工厂方法
以下是几个例子:
Criteria criteria = session.createCriteria(Employee.class);
// 获得总条数
criteria.setProjection(Projections.rowCount());
// 获得传递参数的平均值
criteria.setProjection(Projections.avg("age"));
// 对字段去重后,获得总条数
criteria.setProjection(Projections.countDistinct("name"));
// 获得传递参数的最大值
criteria.setProjection(Projections.max("age"));
// 获得传递参数的最小值
criteria.setProjection(Projections.min("age"));
// 获得传递参数的和
criteria.setProjection(Projections.sum("age"));