引用 DetachedCriteria


DetachedCriteria

使用Criteria可以很好地使用实现动态查询,但是Criteria与Session绑定,其生命周期跟随着Session

结束而结束,使用Criteria进行查询时,每次都要在执行时期动态建立对象,并回味入各种查询条件,跟着

Session的回收,Criteria也跟着回收.当然在WEB层也可以打开Session建立Criteia,但是这不符合分层

要求,层之间耦合太严重.DetachedCriteria可以解决这个问题,即在WEB,程序员要以使用DetachedCriteria

来构造查询条件,然后将这个DetachedCriteria作为方法调用参数传递给业务层对象.而业务层对象获得

DetachedCriteria之后,可以在Session范围内直接构造Criteria,然后进行查询.这样,查询语句的构造脱离

了Session范围,完全被移支到WEB层实现,而业务层则只负责完成持久化和查询封装即可,与查询条件的构造

完全解耦.

在StudentDAO.java中编写一个方法,在Session范围内以传入的DetachedCriteria作为查询条件进行查询,

并返回list集合,如以下程序

public List findStudent(DetachedCriteriadetachedCriteria)

{

List list = null;

/*open session and begintransaciton*/

Criteria criteria =detachedCriteria.getExecutableCriteria(session);

list = criteria.list();

/*commit transaction and closesession*/

return list;

}

然后在Session之外(JSP页面,或是示例程序的main()中)编写如下代码来构造查询条件:

public static main(String[] args)throwsHibernateException{

DetachedCriteria detachCriteria =DetachedCriteria.forClass(Student.class);

String name = "aaa";

int age = "18";

if(name != null){

detachedCriteria.add(Restrictions.like("name",name,MatchMode.ANYWHERE));

}

if(age != 0){

detachedCriteria.add(Restrictions.eq("age",newInteger(age)));

}

detachedCriteria.addOrder(Order.asc("name"));//排序

List list = StudentDAO.findStudent(detachedCriteria);

for(int i=0;i<list.size();i++)

{

Student stu =(Student)list.get(i);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值