1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      HibernateHQL查詢分為哪幾個(gè)

      本篇內(nèi)容介紹了“Hibernate HQL查詢分為哪幾個(gè)”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

      創(chuàng)新互聯(lián)主營高昌網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app開發(fā),高昌h5微信小程序定制開發(fā)搭建,高昌網(wǎng)站營銷推廣歡迎高昌等地區(qū)企業(yè)咨詢

      在HQL中關(guān)鍵字不區(qū)分大小寫,但是屬性和類名區(qū)分大小寫,下面介紹各種類型的Hibernate的HQL查詢。
      1、Hibernate HQL查詢:簡單屬性查詢

      * 單一屬性查詢,返回結(jié)果集屬性列表,元素類型和實(shí)體類中相應(yīng)的屬性類型一致

      * 多個(gè)屬性查詢,返回的集合元素是對(duì)象數(shù)組,數(shù)組元素的類型和對(duì)應(yīng)的屬性在實(shí)體類中的類型一致
      數(shù)組的長度取決與select中屬性的個(gè)數(shù)

      * 如果認(rèn)為返回?cái)?shù)組不夠?qū)ο蠡梢圆捎肏QL動(dòng)態(tài)實(shí)例化Student對(duì)象

      2、Hibernate HQL查詢:實(shí)體對(duì)象查詢

      * N + 1問題,在默認(rèn)情況下,使用query.iterate查詢,有可以能出現(xiàn)N+1問題,所謂的N+1是在查詢的時(shí)候發(fā)出了N+1條sql語句,1: 首先發(fā)出一條查詢對(duì)象id列表的sql,N: 根據(jù)id列表到緩存中查詢,如果緩存中不存在與之匹配的數(shù)據(jù),那么會(huì)根據(jù)id發(fā)出相應(yīng)的sql語句

      * list和iterate的區(qū)別?

      * list每次都會(huì)發(fā)出sql語句,list會(huì)向緩存中放入數(shù)據(jù),而不利用緩存中的數(shù)據(jù)

      * iterate:在默認(rèn)情況下iterate利用緩存數(shù)據(jù),但如果緩存中不存在數(shù)據(jù)有可以能出現(xiàn)N+1問題

      3、Hibernate HQL查詢:條件查詢

      * 可以采用拼字符串的方式傳遞參數(shù)

      Java代碼:

      List students = session.createQuery("select s.id, s.name from Student s where s.name like '%1%'").list();

      * 可以采用 ?來傳遞參數(shù)(索引從0開始)

      Java代碼:

      List students = session.createQuery("select s.id, s.name from Student s where s.name like ?").setParameter(0, "%1%").list();      //可以使用?方式傳遞參數(shù)      //參數(shù)的索引從0開始      //傳遞的參數(shù)值,不用單引號(hào)引起來      //注意方法鏈編程

      * 可以采用 :參數(shù)名 來傳遞參數(shù)

      Java代碼:

      List students = session.createQuery  ("select s.id, s.name from Student s where s.name like :myname").setParameter("myname", "%1%").list();

      * 如果傳遞多個(gè)參數(shù),可以采用setParamterList方法

      Java代碼:

      List students = session.createQuery("select s.id, s.name from Student s where s.id in(:myids)").setParameterList("myids", new Object[]{1, 2, 3, 4, 5}).list();

      * 在HQL中可以使用數(shù)據(jù)庫的函數(shù),如:date_format

      Java代碼:

      List students = session.createQuery("select s.id, s.name from Student s where date_format(s.createTime, '%Y-%m')=?").setParameter(0, "2008-02").list();      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");                  //查詢2008-01-10到2008-02-15創(chuàng)建的學(xué)生          List students = session.createQuery("select s.id, s.name from Student s where s.createTime between ? and ?")                .setParameter(0, sdf.parse("2008-01-10 00:00:00"))                .setParameter(1, sdf.parse("2008-02-15 23:59:59"))                      .list();

      4、Hibernate HQL查詢:直接使用sql進(jìn)行查詢

      Java代碼:

      List students = session.createSQLQuery("select * from t_student").list();


      不會(huì)返回對(duì)象,而是所有屬性!  


      5、Hibernate HQL查詢:分頁查詢

      * setFirstResult(),從0開始

      * setMaxResults,每頁顯示多少條數(shù)據(jù)

      Java代碼:

      List students = session.createQuery("from Student")                .setFirstResult(1)                .setMaxResults(2)                .list();

      6、Hibernate HQL查詢:對(duì)象導(dǎo)航查詢,在HQL中采用 . 進(jìn)行導(dǎo)航

      7、Hibernate HQL查詢:連接查詢

      * 內(nèi)連

      Sql代碼:

      SELECT s.name, c.name FROM Student s (inner) join s.classes c

      * 外連接(左連接/右連接)

      Sql代碼:

      SELECT s.name, c.name FROM Student s left join s.classes c

      8、Hibernate HQL查詢:統(tǒng)計(jì)查詢

      Java代碼:

      List students =session.createQuery("select c.name, count(s) from Student s join s.classes c " +"group by c.name order by c.name").list();      for (Iterator iter=students.iterator(); iter.hasNext();) {           Object[] obj = (Object[])iter.next();           System.out.println(obj[0] + ", " + obj[1]);      }

      9、DML風(fēng)格的操作(盡量少用,因?yàn)楹途彺娌煌剑?/strong>

      Java代碼:

      session.createQuery  ("update Student s set s.name=? where s.id < ?")                           .setParameter(0, "李四")                           .setParameter(1, 5)                           .executeUpdate();

      應(yīng)當(dāng)盡量少用,因?yàn)楹途彺娌煌剑簿褪钦f,假如在執(zhí)行上面的語句之前,已經(jīng)把student封裝成一個(gè)list曾經(jīng)拿了出來,再執(zhí)行上面的語句對(duì) student中的表進(jìn)行數(shù)據(jù)更新,然后再list Student表,則此時(shí)的list是從緩存中取的數(shù)據(jù),而不是從表中找到的數(shù)據(jù),也就是說,list拿到的是update前的數(shù)據(jù),所以造成了這種不同步,所以這種風(fēng)格盡量少用。

      從這個(gè)方面也可以看得出Hibernate并不適用于聚集性,統(tǒng)計(jì),大量批量的更新,刪除等操作。

      “Hibernate HQL查詢分為哪幾個(gè)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


      標(biāo)題名稱:HibernateHQL查詢分為哪幾個(gè)
      文章鏈接:http://www.ef60e0e.cn/article/jhiedh.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
        1. <ul id="0c1fb"></ul>

          <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
          <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

          石景山区| 香格里拉县| 安吉县| 同仁县| 桓仁| 郑州市| 叙永县| 黄梅县| 昌都县| 库伦旗| 红河县| 汝阳县| 洪湖市| 本溪| 庄浪县| 尉犁县| 井冈山市| 富阳市| 新野县| 三门县| 时尚| 尼玛县| 阿荣旗| 上思县| 吴江市| 左权县| 高唐县| 平泉县| 闽清县| 咸丰县| 盐边县| 通辽市| 葫芦岛市| 汽车| 拉萨市| 剑阁县| 余江县| 思茅市| 涟源市| 长沙县| 雅安市|