Criteria查詢
Hibernate中的Criteria API提供了另一種查詢持久化的方法。它讓你能夠使用簡(jiǎn)單的API動(dòng)態(tài)的構(gòu)建查詢,它靈活的特性通常用于搜索條件的數(shù)量可變的情況。
Criteria查詢之所以靈活是因?yàn)樗梢越柚鶭ava語(yǔ)言,在Java的幫助下它擁有超越HQL的功能。Criteria查詢也是Hibernate竭力推薦的一種面向?qū)ο蟮牟樵兎绞健?br />
Criteria查詢的缺點(diǎn)在于只能檢索完整的對(duì)象,不支持統(tǒng)計(jì)函數(shù),它本身的API也抬高了一定的學(xué)習(xí)坡度。
Criteria查詢示例代碼
Session session=HibernateUtil.getSession();
Criteria criteria=session.createCriteria(User.class);
// 條件一:名稱以關(guān)開頭
criteria.add(Restrictions.like("name", "關(guān)%"));
// 條件二:email出現(xiàn)在數(shù)組中
String[] arr={"1@2.3","2@2.3","3@2.3"};
criteria.add(Restrictions.in("email", arr));
// 條件三:password等于一
criteria.add(Restrictions.eq("password", "1"));
// 排序條件:按登錄時(shí)間升序
criteria.addOrder(Order.asc("lastLoginTime"));
List<User> users=(List<User>)criteria.list();
System.out.println("返回的User實(shí)例數(shù)為"+users.size());
for(User user:users){
System.out.println(user);
}
HibernateUtil.closeSession(session);
Criteria查詢實(shí)際產(chǎn)生的SQL語(yǔ)句
select
this_.ID as ID0_0_,
this_.name as name0_0_,
this_.pswd as pswd0_0_,
this_.email as email0_0_,
this_.lastLoginTime as lastLogi5_0_0_,
this_.lastLoginIp as lastLogi6_0_0_
from
USERTABLE_OKB this_
where
this_.name like '關(guān)%'
and this_.email in (
'1@2.3', '2@2.3', '3@2.3'
)
and this_.pswd='1'
order by
this_.lastLoginTime asc
注:參數(shù)是手工加上的。