• 引用 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);

     }

    }

  • 相关阅读:
    [posix]Posix多线程编程
    [Makefile]多文件的通用Makefile
    表格花式效果
    JavaScript实现按键精灵
    JavaScript中几个相似方法对比
    谨慎能捕千秋蝉(三)——界面操作劫持与HTML5安全
    谨慎能捕千秋蝉(二)——CSRF
    日月如梭,玩转JavaScript日期
    Wireshark网络抓包(四)——工具
    Wireshark网络抓包(三)——网络协议
  • 原文地址:https://www.cnblogs.com/liaoshiyong/p/3150962.html
Copyright © 2020-2023  润新知