Hibernate Criteria 和 Hibernate Query 查询方式比较:
这个写的不是很很详细,仅供参考。
Hibernate Criteria:
1,获取session:
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return this.sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getSession() {
Session session = this.sessionFactory.getCurrentSession();
return session;
}
2,获取Criteria实例:
Criteria cta = this.getSession.createCriteria(UpgradeRecord.class);
cta.setFirstResult(1); //分页
cta.setMaxResults(20);
cta.createCriteria("plan").add(Expression.idEq(sid)); //第一种查询方式
cta.createCriteria("plan").add(Expression.eq("ResourceName",resourceName)); //第二种查询方式
Criterion in= Expression.in("status",status); //第三种查询方式
cta.add(in);
cta.addOrder(Order.desc("LastModifyedTime")); //排序方式
3,获取结果:
cta.list();
Hibernate HQL:
1,
StringBuffer hql=new StringBuffer("from UpgradeRecord r where 1=1");
2
hql.append(" and r.plan.id="+condition.getPlan_id());
3
hql.append(" and r.plan.ResourceName='"+condition.getPlan_str()+"'");
4
hql.append(" and (r.status in("+st.toString()+"))");
5
int total=(Integer)this.getSession().createQuery(hql.toString()).uniqueResult();//查询数量
6
this.getSession().createQuery(hql.toString()).setFirstResult(1).setMaxResults(20).list();//查询结果并分页
注释:Query接口的uniqueResult()方法:
1,如果有多个值抛错;
2,如果有值且只有一个,返回一个object;
3,如果没值,返回null