隨筆-61  評論-159  文章-0  trackbacks-0
          在hibernate中,HQL支持條件查詢。
          1、支持字符串方式參數傳遞查詢:
          例子:
          1List students = session.createQuery("select s.id,s.name from Student s where s.name like '%1' ").list();
          2            for (Iterator iter=students.iterator(); iter.hasNext();) {
          3                Object[] o = (Object[])iter.next();
          4                System.out.println(o[0]+","+o[1]);
          5            }
          PS:由于,涉及到多個屬性查詢,所以返回的是Object數組類型。

          2、支持類似于PrepareStatement方式的?傳遞參數查詢
          例子:
          1List students = session.createQuery("select s.id,s.name from Student s where s.name like ? ")
          2                                                .setParameter(0"%1%").list();
          3            for (Iterator iter=students.iterator(); iter.hasNext();) {
          4                Object[] o = (Object[])iter.next();
          5                System.out.println(o[0]+","+o[1]);
          6            }

          PS:要設置參數從0開始,見第2行。

          3、去變量方式參數傳遞
          例子:
          1List students = session.createQuery("select s.id,s.name from Student s where s.name like :goodname ")
          2                                                .setParameter("goodname""%1%").list();
          3            for (Iterator iter=students.iterator(); iter.hasNext();) {
          4                Object[] o = (Object[])iter.next();
          5                System.out.println(o[0]+","+o[1]);
          6            }
          PS:這個跟2中的相似,只是多了參數可以歸為一類。

          4、支持多參數傳遞
          例子:
          1List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)")
          2            .setParameterList("myids"new Object[]{12345,32,13,14})
          3                .list();
          4            for (Iterator iter=students.iterator(); iter.hasNext();) {
          5                Object[] o = (Object[])iter.next();
          6                System.out.println(o[0]+","+o[1]);
          7            }
          PS:注意調用方法是setParameterList。

          5、調用數據庫里面的函數
          例子:

          1List students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?")
          2            .setParameter(0"2008-10")
          3                .list();
          4            for (Iterator iter=students.iterator(); iter.hasNext();) {
          5                Object[] o = (Object[])iter.next();
          6                System.out.println(o[0]+","+o[1]);
          7            }
          PS:數據庫函數date_format。

          6、直接支持sql查詢
          例子:
          1List students = session.createSQLQuery("select *from t_student").list();
          2            for (Iterator iter=students.iterator(); iter.hasNext();) {
          3                Object[] o = (Object[])iter.next();
          4                System.out.println(o[0]+","+o[1]);
          5            }
          PS:只需要調用session里面的createSQLQuery方法即可。

          7、進行導航查詢
          例子:

          1List students = session.createQuery("select s.name from Student s where s.classes.name like '%1%'").list();
          2            for (Iterator iter=students.iterator(); iter.hasNext();) {
          3                String s = (String)iter.next();
          4                System.out.println(s);
          5            }
          PS:這種查詢很方便。

          8、分頁查詢
          例子:
          1List students = session.createQuery("from Student").setFirstResult(0).setMaxResults(3).list();
          2            for (Iterator iter=students.iterator(); iter.hasNext();) {
          3                Student student = (Student)iter.next();
          4                System.out.println(student.getName());
          5            }

          PS:這是很簡單的分頁查詢,分頁查詢實現比這個復雜多了,分頁查詢采用的相當于數據庫里面的 limit ,來限制一次查詢顯示的條數。

          注:還有一些其他就不一一列舉了,在hibernate的使用中HQL查詢語言如果用得好,會給工作帶來比較高的效率,比較重要,而且還有一個查詢效率的問題,這涉及到緩存等方面,以后會更新這方面的文章。



          -------------------------------------------------------------------------------------------------
          PS:本博客文章,如果沒有注明是有“轉”字樣,屬于本人原創。如果需要轉載,務必注明作者文章的詳細出處地址,否則不允許轉載,多謝合作!
          posted on 2008-10-31 20:46 apple0668 閱讀(1468) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 聂荣县| 固镇县| 昌都县| 庄浪县| 黔江区| 什邡市| 青浦区| 沙河市| 闵行区| 丰县| 洪洞县| 衢州市| 新闻| 楚雄市| 龙山县| 阿鲁科尔沁旗| 凭祥市| 厦门市| 临洮县| 万年县| 阜康市| 扶绥县| 化德县| 冷水江市| 安西县| 南宫市| 宣城市| 岳阳县| 武乡县| 涡阳县| 莲花县| 汝州市| 布尔津县| 泰来县| 封丘县| 海宁市| 汉源县| 新蔡县| 铜陵市| 沈阳市| 岗巴县|