creteria的创建是依赖session的,使用session.createCriteria来创建。
查询条件一般是由web页面传递过来的,查询条件由web层传给service层,再传递给dao层,组装查询条件到Criteria执行查询,这样执行的话,前端的每一种查询都需要有对应的dao查询。
离线的Criteria创建的时候是脱离session创建的,这样可以在web层去组装查询条件,可以在web层创建criteria,然后将Criteria传递给Service层和dao层。这样设计的好处是dao方法不用有多个。
在web层组装DetachedCriteria,拼装条件与普通Criteria一致
DetachedCriteria dc=DetachedCriteria.forClass(Customer.class); dc.add(Restrictions.idEq(6l));
传递到dao层之后
1 Session session = HibernateUtils.openSession(); 2 Transaction tx = session.beginTransaction(); 3 //---------------------------------------------------- 4 Criteria c = dc.getExecutableCriteria(session); 5 6 List list = c.list(); 7 8 System.out.println(list); 9 //---------------------------------------------------- 10 tx.commit(); 11 session.close();