使用hql的where关键字来完成,然而createCriteria查询是更具有面向对象特点的查询方式。主要使用三个类来完成:
Criteria、Criterion、Restrictions
执行方法:
(1)、获得session对象
(2)、使用session对象创建Criteria对象,该对象代表一次查询。
(3)、使用Restrictions静态方法创建Criterion的查询条件。
(4)、向Criteria中添加查询条件。
(5)、调用list()方法返回查询结果。
Restrictions静态方法:
Restrictions.eq --> equal,等于.
Restrictions.allEq --> 参数为Map对象,使用key/value进行多个等于的比对,相当于多个Restrictions.eq的效果
Restrictions.gt --> great-than > 大于
Restrictions.ge --> great-equal >= 大于等于
Restrictions.lt --> less-than, < 小于
Restrictions.le --> less-equal <= 小于等于
Restrictions.between --> 对应SQL的between子句
Restrictions.like --> 对应SQL的LIKE子句
Restrictions.in --> 对应SQL的in子句
Restrictions.and --> and 关系
Restrictions.or --> or 关系
Restrictions.isNull --> 判断属性是否为空,为空则返回true
Restrictions.isNotNull --> 与isNull相反
Restrictions.sqlRestriction --> SQL限定的查询
本文代码中的表的model和表见hql关联和连接查询实例
1、以下代码是根据订单表的主键查询订单,条件是orderId=pk
public Orders Query(int pk) {
// TODO Auto-generated method stub
SessionFactory sessionfactory = HibernateUtil.getSessionFactory();
Session session=sessionfactory.openSession();
Orders order = new Orders();
Transaction trans = null;
List<?> list = null;
try{
trans = session.beginTransaction();
list = session.createCriteria(Orders.class).add(Restrictions.eq("orderId", pk)).list();
trans.commit();
}catch(Exception ex){
trans.rollback();
ex.printStackTrace();
return null;
}finally{
if(list!= null){
for(int i=0;i<list.size();i++){
order=(Orders) list.get(i);
}
}
}
return order;
}
2、以下代码是使用hql根据订单表的主键查询订单,条件是orderId=pk
public Orders Query(int pk) {
// TODO Auto-generated method stub
//查询方式一
SessionFactory sessionfactory = HibernateUtil.getSessionFactory();
Session session=sessionfactory.openSession();
Transaction trans = null;
List<?>list=null;
Orders order = new Orders();
String hql="select orders from Orders orders,Goods goods where orders.orderId=:orderId";
try{
trans=session.beginTransaction();
Query query = session.createQuery(hql);
query.setInteger("orderId", pk);
list=query.list();
trans.commit();
}catch(Exception ex){
trans.rollback();
System.out.println("Query(int pk)根据订单Id查询订单失败");
ex.printStackTrace();
return null;
}finally{
if(list!= null){
for(int i=0;i<list.size();i++){
order=(Orders) list.get(i);
}
}
}
return order;
}