<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # 簡介 Query接口讓你方便地對數據庫及持久對象進行查詢,它可以有兩種表達方式: * HQL語言 * 本地數據庫的SQL語句 Query經常被用來綁定查詢參數、限制查詢記錄數量,并最終執行查詢操作。 通過Query主要完成查詢操作. 我們通過Query可以執行hql語句. ~~~ Query query=Session.createQuery(hql); ~~~ 下面這個可以執行sql語句 ~~~ SQLQUery sqlQuery=Session.createSQLQuery(sql); ~~~ SQLQuery是Query的子集 Query代表面向對象的一個 Hibernate查詢操作。 在 Hibernate中,通常使用 session.createQuery()方法接受一個HQL語句,然后調用 Query的ist()或 uniqueResult()方法執行查詢。 所謂的HQL是Hibernate Query Language縮寫,其語法很像SQL語法,但它是完全面向對象的。 在 Hibernate中使用 Query對象的步驟,具體所示 1. 獲得 Hibernate的 Session對象。 2. 編寫HQL語句 3. 調用 session. createQuery創建查詢對象。 4. 如果HQL語句包含參數,則調用 Query的 setXxx設置參數。 5. 調用 Query對象的 list()或 uniqueResult()方法執行查詢。 了解了使用 Query對象的步驟后,接下來,通過具體示例來演示 Query對象的查詢操作。 Query中除了使用list()方法查詢全部數據外,還有其它一些常用方法,具體如下: * setter方法: Query接口中提供了一系列的 setter方法用于設置查詢語句中的參數,針對不 同的數據類型,需要用到不同的 setter方法。 * iterator方法:該方法用于查詢語句,返回的結果是一個 Iterator對象,在讀取時只能按照 順序方式讀取,它僅把使用到的數據轉換成Java實體對象。 * uniqueresult()方法:該方法用于返回唯一的結果,在確保只有一條記錄的查詢時可以使用 該方法。 * executeUpdate()方法:該方法是 Hibernate3的新特性,它支持HQL語句的更新和刪除操作。 * setFirstResulto方法:該方法可以設置獲取第一個記錄的位置,也就是它表示從第幾條記錄 開始查詢,默認從0開始計算。 * setMaxResult()方法:該方法用于設置結果集的最大記錄數,通常與 setFirstResult()方法結合 使用,用于限制結果集的范圍,以實現分頁功能。 # 本地SQL **sql不會直接封裝到實體對象,需要我們手動寫代碼才可以** 要想執行本地sql ~~~ SQLQuery sqlQuery=session.createSqlQuery(String sql); ~~~ 使用addEntity方法來將結果封裝到指定的對象中,如果不封裝,得到的是`List<Object[]>` 如果sql中有參數,我們使用setParameter方法完成參數傳遞。 如果結果就是一個可以使用uniqueResult()來得到一個單獨對象 ~~~ //執行本地sql-查詢全部 //執行select * from t_customer; SQLQuery sqlQuery = session.createSQLQuery("select * from t_customer"); //List<Object[]> list = sqlQuery.list(); //System.out.println(list); //想要將結果封裝到Customer對象中 sqlQuery.addEntity(Customer.class); List<Customer> list = sqlQuery.list(); System.out.println(list); ~~~ ~~~ //執行本地sql-條件查詢 //執行select * from t_customer wherw name=?; SQLQuery sqlQuery = session.createSQLQuery("select * from t_customer where name=?"); //對參數進行賦值 sqlQuery.setParameter(0, "姓名1"); //想要將結果封裝到Customer對象中,就要用addEntity方法 sqlQuery.addEntity(Customer.class); //List<Customer> list = sqlQuery.list(); //System.out.println(list); Customer c = (Customer) sqlQuery.uniqueResult(); System.out.println(c); ~~~ --- 本地sql也支持命名查詢 可以將sql語句定義在hbm文件中,也可以使用注解 ~~~ <sql-query name=""></sql-query> ~~~ 本地命名sql注解定義 ~~~ @NamedNativeQuery(name="findCustomer", query="select * from t_customer") public class Customer { ~~~ 執行這個命名sql會報異常 ~~~ Query query = session.getNamedQuery("findCustomer"); List list = query.list(); System.out.println(list); ~~~ ~~~ java,lang.ExceptionInInitializerError Caused by: org.hibernate.cfg.NotYetImplementedException: Pure native scalar queries are not yet supported ~~~ 出現問題是,hibernate不知道執行sql如何封裝 ~~~ @SqlResultSetMapping(name = "customerSetMapping", entities = {@EntityResult(entityClass = Customer.class, fields = { @FieldResult(name = "id", column = "id", @FieldResult(name = "name", column = "name")) })}) @NamedNativeQuery(name = "findCustomer", query = "select * from t_customer", resultSetMapping = "customerSetMapping") ~~~ # 條件查詢 可以使用where關鍵字 ~~~ //查詢name=姓名o的信息 //Query query = session.createQuery("from Customer where name = ?"); //無名參數 Query query = session.createQuery("from Customer where name=:myname"); //有名稱參數 //要對參數進行賦值 //query.setParameter(0, "姓名o"); //對有名稱參數進行賦值 query.setParameter("myname", "姓名o"); //List<Customer> list = query.list(); //System.out.println(list); //如果能保證結果就是唯一的,那么可以使用 Customer c = (Customer) query.uniqueResult(); System.out.println(c); ~~~ 無名稱參數`from Customer where name=?` 對其進行賦值`query.setParameter(0, "張三")` 有名稱參數`from Customer where name=:myname;` 對其進行賦值`query.setParameter("myname", "李四");` 如果查詢結果可以保證就是唯一 的,我們可以使用 `query. uniqueResult()`來得到一個單獨對象. # 多表操作 SQL多表操作 1. 交叉連接 `CROSS JOIN `會產生迪卡爾積 ~~~ SELECT * FROM t_customer CROSS JOIN t_order; ~~~ 2. 內連接 `INNER JOIN ON` ~~~ SELECT * FROM t_customer AS c INNER JOIN t_order AS o ON c.id=o.c_customer_id; ~~~ 使用內連接它只能將有關聯的數據得到。 隱式內連接 使用 "逗號"將表分開,使用where來消除迪卡爾積 ~~~ SELECT * FROM t_customer AS c ,t_order o WHERE c.id=o.c_customer_id; ~~~ 3. 外連接 左外`LEFT OUTER JOIN` 右外`RIGHT OUTER JOIN`, OUTER可以省略 ~~~ SELECT * FROM t_customer c LEFT OUTER JOIN t_order o ON c.id=o.c_customer_id; ~~~
                  <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>

                              哎呀哎呀视频在线观看