隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827240
          • 排名 - 49

          最新評論

          閱讀排行榜

          評論排行榜

          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(DetachedCriteria detachedCriteria)
          {
           List list = null;
           /*open session and begin transaciton*/
           Criteria criteria = detachedCriteria.getExecutableCriteria(session);
           list = criteria.list();
           /*commit transaction and close session*/
           return list;
          }
          然后在Session之外(JSP頁面,或是示例程序的main()中)編寫如下代碼來構造查詢條件:
          public static main(String[] args)throws HibernateException{
           
           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",new Integer(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);
           }
          }



          posted on 2007-08-23 21:56 Ke 閱讀(583) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 湛江市| 镇赉县| 长岛县| 阜新市| 股票| 柘城县| 宝坻区| 广德县| 晋宁县| 尼玛县| 河津市| 廊坊市| 西平县| 南宁市| 巴东县| 扶绥县| 紫金县| 隆回县| 泰顺县| 白山市| 文化| 潞西市| 清丰县| 静安区| 韩城市| 庆云县| 兖州市| 北安市| 玛曲县| 金溪县| 弥勒县| 明光市| 都江堰市| 休宁县| 武威市| 大悟县| 老河口市| 平武县| 攀枝花市| 丰原市| 龙泉市|