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

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(lèi)(467)

          文章檔案(423)

          相冊(cè)

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827218
          • 排名 - 49

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          DetachedCriteria

          使用Criteria可以很好地使用實(shí)現(xiàn)動(dòng)態(tài)查詢(xún),但是Criteria與Session綁定,其生命周期跟隨著Session的
          結(jié)束而結(jié)束,使用Criteria進(jìn)行查詢(xún)時(shí),每次都要在執(zhí)行時(shí)期動(dòng)態(tài)建立對(duì)象,并回味入各種查詢(xún)條件,跟著
          Session的回收,Criteria也跟著回收.當(dāng)然在WEB層也可以打開(kāi)Session建立Criteia,但是這不符合分層
          要求,層之間耦合太嚴(yán)重.DetachedCriteria可以解決這個(gè)問(wèn)題,即在WEB層,程序員要以使用DetachedCriteria
          來(lái)構(gòu)造查詢(xún)條件,然后將這個(gè)DetachedCriteria作為方法調(diào)用參數(shù)傳遞給業(yè)務(wù)層對(duì)象.而業(yè)務(wù)層對(duì)象獲得
          DetachedCriteria之后,可以在Session范圍內(nèi)直接構(gòu)造Criteria,然后進(jìn)行查詢(xún).這樣,查詢(xún)語(yǔ)句的構(gòu)造脫離
          了Session范圍,完全被移支到WEB層實(shí)現(xiàn),而業(yè)務(wù)層則只負(fù)責(zé)完成持久化和查詢(xún)封裝即可,與查詢(xún)條件的構(gòu)造
          完全解耦.
          在StudentDAO.java中編寫(xiě)一個(gè)方法,在Session范圍內(nèi)以傳入的DetachedCriteria作為查詢(xún)條件進(jìn)行查詢(xún),
          并返回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頁(yè)面,或是示例程序的main()中)編寫(xiě)如下代碼來(lái)構(gòu)造查詢(xún)條件:
          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) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): hibernate
          主站蜘蛛池模板: 饶阳县| 靖西县| 隆林| 饶河县| 清流县| 南皮县| 耒阳市| 龙江县| 井研县| 日照市| 保亭| 佛教| 永州市| 庄浪县| 玛沁县| 翁牛特旗| 乐安县| 株洲市| 周口市| 溧水县| 霍州市| 大姚县| 揭西县| 信宜市| 永吉县| 五原县| 同心县| 乌兰县| 汝城县| 临颍县| 玛多县| 遂川县| 中西区| 广南县| 兴国县| 宜章县| 化州市| 绥江县| 靖州| 南昌县| 涪陵区|