除了Query, hibernate还提供了另外一种查询方式,Criteria, 先看一个例子,这个例子就是查询书名以"ww"开头的书。
通常情况下,criteria可以同时add很多条件,比如:
就是书名包含ww, 价格在10~20之间, 作者不为空的书。
如果你仔细看,你会发现,criteria.add()添加的是Criterion,那么Restrictions是什么呢?是Criterion工厂.Restrictions提供了很多方法足以满足条件查询, 而且含义一看就明白了.
除了可以添加查询条件,还可以添加排序,
以id逆序排列.
Criteria还可以用来做分页.这个和Query一样.
则返回11~15条记录.
为什么要使用Criteria,不是有Query么? 而且Query支持占位符, 命名参数,可以解决所有的条件问题. 经过思考,我觉得是这样的,HQL虽然可以带条件,占位符, 命名参数,但是归根结底这个SQL被写死了,就是说如果HQL中有3个参数,则这3个参数一个也不能少,都必须设置.但是Criteria就不一样了,比如Book, 只有用户选择了价格区间,才把.add(Restrictions.between("price", 10F, 20F))加进来,只有当用户选择了排序,才把.addOrder(Order.desc("id")),这样就实现了动态的拼sql.