Hibernate 使用 criteria 条件查找

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 nullRestrictions.isnull() 等于空值
is not nullRestrictions.isNotNull() 非空值
likeRestrictions.like() 字符串模式匹配
andRestrictions.and() 逻辑与
andRestrictions.conjunction() 逻辑与
orRestrictions.or() 逻辑或
orRestrictions.disjunction() 逻辑或
notRestrictions.not() 逻辑非
in(列表)Restrictions.in() 等于列表中的某一个值
ont in(列表)Restrictions.not(Restrictions.in())不等于列表中任意一个值
between A and BRestrictions.between() 闭区间AB中的任意值
not between A and BRestrictions.not(Restrictions.between()) -> 小于值A或者大于值B
SQLRestrictions.sqlRestriction –> SQL限定的查询
排序 ascOrder.asc –> 根据传入的字段进行升序排序
排序 descOrder.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"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值