<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # HQL HQL是我們在hibernate中是常用的一種檢索方式。 HQL(Hibernate Query Language)提供更加豐富靈活、更為強大的查詢能力 因此Hibernate將HQL查詢方式立為官方推薦的標準查詢方式,HQL查詢在涵蓋Criteria查詢的所有功能的前提下,提供了類似標準SQL語 句的查詢方式,同時也提供了更加面向對象的封裝。 完整的HQL語句形式如下: ~~~ Select/update/delete…… from …… where …… group by …… having …… order by …… asc/desc ~~~ 其中的update/delete為Hibernate3中所新添加的功能,可見HQL查詢非常類似于標準SQL查詢。 基本步驟: 1. 得到Session 2. 編寫HQL語句 3. 通過session.createQuery(hql)創建一個Query對象 4. 為Query對象設置條件參數 5. 執行list查詢所有,它反胃的是List集合 uniqueResut()返回一個查詢結果 ## 數據準備 ~~~ //準備數據(2個 Customer,每一個 Customer有10個 Order) //操作 Customer c= new Customer(); c. setName("張三豐"); for (int i=8; i<10; i++){ Order order = new Order(); order.setReceiverInto("上海"); order.setMoney(2000d +i*10); order.setC(c); session.save(order); } ~~~ ## 基本檢索 `form 類名` ~~~ //基本檢索 //1.編寫HQL String hq1="from Customer";//from是關鍵字,后面是類名,關鍵字是不區分大小寫,但是類名是區分 //2.通過session.createQuery(hql); //Query query = session.createQuery(hql); //3.通過1ist方法得到數據 //List<Customer> list= query.list(); List<customer> list = session.createQuery(hq1).list(); System.out.println (list. get(o)); ~~~ ## 排序檢索 ~~~ //排序檢索--//查詢訂單,根據訂單的價格進行排序 //1. 定義hql String hql="from Order order by money desc";//desc降序,默認是asc升序 //2.執行加q查詢訂單,根據價格進行排序 List<order> list = session.createQuery(hql).list(); System.out.println(list); ~~~ ## 條件檢索 ~~~ //1.根據位置來綁定參數 //1.1創建hql // String hql = "from Order where money>?"; //1.2.執行hq1 / List<Order> list= session.createQuery(hql).setParameter(0 //200d).1ist(); //可以使用例如setstring() setDouble這樣的方法去添加參數,參數的序號是從開始 //2.根據名稱來綁定 //1.1創健建hql String hql= "from Order where money >: mymoney "; //1.2.執行hql List<order> list = session.createQuery(hql).setParameter("mymoney ", 2000d).list(); //可以使用例如setString() setDouble這樣的方法去添加參數 System.out.println(list) ~~~ ## 分頁檢索 ~~~ Query query = session.createQuery("from Order"); //每頁顯示6條件,我們要得到第二頁數據 query.setFirstResult((2-1)*6);//設定開始位置 query.setMaxResults(6);//設置條數 List<order> list = query.list(); System.out.println(list); ~~~ ## 分組統計檢索 分組 group by 統計 count max min avg sum ~~~ //統計操作----統計一共有多少訂單 count // String hql = "select count(*) from Order"; // Object count = session.createQuery(hql).uniqueResult(); // System.out.println(count); //分組統計---每一個人的訂單總價 String hql = "select sum(money) from Order group by c"; List list= session.createQuery(hql).list(); System.out.println(list); ~~~ ## 投影檢索 使用投影將部分屬性封裝到對象中 ~~~ //1.查詢出所有的 Customer的name // String hal="select name from Customer"; // List list= session.createQuery(hql).list(); // System.out. println(list);//[張龍,張三豐] //如果只查詢一個列,得到的結果List<Object> //2.查詢所有的 Customer的id,name // String hql="select id, name from Customer"; // List<object[]> list = session.createQuery(hql).list(); // for(Object[] objs: list) { // for(object obj: objs) { // System.out.print(obj+" "); //} // System. out. println() //} //如果是查詢多列,得到的結果是List< Object[]> //3.使用投影將查詢的結果封裝到 Customer對象 String hql="select new Customer(id,name) from Customer";//必須在PO類中提供對應的構造方法 List<customer> cs = session.createQuery(hql).list(); System. out. println(cs); ~~~ 注意: 我們要在po類中提供對應屬性的構造方法,也要有無參數構造 ## 命名檢索 我們可以將hql語句先定義出來,在使用時通過`session.getNamedQuery(hqlName);`得到一個Query,在執行. 問題: hql定義在什么位置? 1. 如果你有hbm配置文件,那么當前的hql操作是對哪一個實體進行操作,就在哪一個 實體的配置文件中聲明。 ~~~ <query name="myHql"> from Customer </query> ~~~ 2. 如果是使用注解來描述PO的配置,我們直接在PO類中使用 ~~~ @NamedQuery(name="myHql", query="from Customer") public class Customer { ~~~ # HQL多表操作 Hql多表操作分類: 1. 交叉連接 2. 內連接 * a) 顯示內連接 * b) 隱式內連接 * c) 迫切內連接 * 3. 外連接 左外連接 迫切左外連接 右外連接 注意:在hibernate中有迫切連接的概念,而sql中沒有。 ## 內連接 顯示內連接 顯示內連接使用的是`inner join with` ~~~ //sql連接 select * from t_customer inner join t_order on 條件 String hql = "from Customer c inner join c.orders with c.id = 1"; Query query = session.createQuery(hql); List<Object[]> list = query.list(); //結果是List<Object[]>.而Object[]中裝入的是Customer與Order對象 for (Object[] objs : list) { for (Object obj : objs) { System.out.print(obj + "\t"); } System.out.println(); } ~~~ ## 隱式內連接 隱式內連接也我們在sql中操作不一樣,它是通過”.”運算符來關聯 ~~~ //sql連接 select * from t_customer, t_order where 條件 String hql = "from Order o where o.c.id=1"; Query query = session.createQuery(hql); List list = query.list(); System.out.println(list); ~~~ ## 迫切內連接 迫切內連接得到的結果是直接封裝到PO類中,而內連接得到的是Object\[\]數組,數組中封裝的是PO類對象。 ~~~ //迫切內連接inner join fetch 注意: 使用迫切內連接結果可能出現重復,所以要使用distinct來去重復 String hql = "select distinct c from Customer c inner join fetch c.orders"; //底層也是執行的inner join 只不過結果封裝到對象中 Query query = session.createQuery(hql); List<Customer> list = query.list(); //結果是List<>,集合中裝入的是From后面的對象 for(Customer o:list) { System.out.println(o); } ~~~ ## 外連接 **外連接** ~~~ //左外連接 List<Object[]> list = session.createQuery("from Customer c left outer join c.orders").list(); for(Object[] objs:list) { for(Object obj:objs) { System.out.print(obj + "\t"); } System.out.println(); } ~~~ **迫切外連接** ~~~ //注意:fetch不可以與單獨條件的with一起使用 List<Customer> list = session.createQuery("select distinct c from Customer c left join fetch c.orders where c.id=1").list(); for (Customer c : list) { System.out.println(c); } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看