亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java?Hibernate中的查詢方式有哪些

發布時間:2023-04-28 11:18:07 來源:億速云 閱讀:112 作者:iii 欄目:開發技術

這篇“Java Hibernate中的查詢方式有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java Hibernate中的查詢方式有哪些”文章吧。

    Hibernate 是一個開源的 ORM(對象關系映射)框架,它可以將 Java 對象映射到數據庫表中,實現對象與關系數據庫的映射。Hibernate 提供了多種查詢方式,包括 OID 檢索、對象導航檢索、HQL 檢索、QBC 檢索和 SQL 檢索。除此之外,Hibernate 還提供了多種抓取策略,包括立即抓取、延遲抓取和批量抓取。

    查詢方式

    OID 檢索

    OID(Object IDentifier)是 Hibernate 中每個持久化對象的唯一標識符。OID 檢索是通過調用 get() 或 load() 方法來獲得一個持久化對象的方式。這兩個方法的區別在于當對象不存在時,get() 方法返回 null,而 load() 方法會拋出 ObjectNotFoundException 異常。

    示例代碼:

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    User user = (User) session.get(User.class, 1L);
    tx.commit();
    session.close();

    對象導航檢索

    對象導航檢索是通過調用一個持久化對象的 getter 方法獲得其他持久化對象的方式。例如,如果一個 User 對象有一個關聯的 Order 對象,可以通過調用 user.getOrders() 方法來獲得該 User 的所有訂單。

    示例代碼:

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    User user = (User) session.get(User.class, 1L);
    Set<Order> orders = user.getOrders();
    tx.commit();
    session.close();

    HQL 檢索

    HQL(Hibernate Query Language)是一種面向對象的查詢語言,類似于 SQL,但是它查詢的是對象,而不是表。HQL 使用類名和屬性名來表示表和字段,可以使用類似于 SQL 的語法進行查詢。

    示例代碼:

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    List<User> users = session.createQuery("from User").list();
    tx.commit();
    session.close();

    QBC 檢索

    QBC(Query By Criteria)檢索是一種基于 Criteria API 的查詢方式,可以使用一組條件來查詢對象。Criteria API 提供了一種類型安全的查詢方式,可以通過代碼來構建查詢條件,從而避免了字符串拼接的風險。

    示例代碼:

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    Criteria criteria = session.createCriteria(User.class);
    List<User> users = criteria.add(Restrictions.eq("name", "John")).list();
    tx.commit();
    session.close();

    SQL 檢索

    SQL 檢索是一種基于 SQL 語句的查詢方式,可以使用原生的 SQL 語句來查詢對象。使用 SQL 檢索的一個常見場景是查詢復雜的報表數據。

    示例代碼:

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    SQLQuery query = session.createSQLQuery("select * from user");
    List<User> users = query.list();
    tx.commit();
    session.close();

    抓取策略

    立即抓取

    立即抓取是指在加載一個持久化對象時,同時加載該對象關聯的其他持久化對象。這種方式可以避免在后續訪問關聯對象時產生額外的 SQL 查詢,提高了系統的性能。

    示例代碼:

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    List<User> users = session.createQuery("from User u left join fetch u.orders").list();
    tx.commit();
    session.close();

    延遲抓取

    延遲抓取是指當訪問一個持久化對象的關聯對象時,才去加載該關聯對象。這種方式可以減少不必要的 SQL 查詢,提高系統的性能。

    示例代碼:

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    User user = (User) session.get(User.class, 1L);
    Hibernate.initialize(user.getOrders());
    tx.commit();
    session.close();

    抓取策略

    Hibernate 提供了多種抓取策略,包括 join、select、subselect 和 batch 策略。這些策略可以在查詢時指定,從而控制 Hibernate 的抓取行為。

    示例代碼:

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    Criteria criteria = session.createCriteria(User.class);
    criteria.setFetchMode("orders", FetchMode.JOIN);
    List<User> users = criteria.list();
    tx.commit();
    session.close();

    批量抓取

    批量抓取是指在加載一批持久化對象時,同時加載這些對象關聯的其他持久化對象。這種方式可以減少不必要的 SQL 查詢,提高系統的性能。

    示例代碼:

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();
    List<User> users = session.createQuery("from User u left join fetch u.orders").setFirstResult(0).setMaxResults(10).list();
    tx.commit();
    session.close();

    以上就是關于“Java Hibernate中的查詢方式有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    东台市| 广昌县| 丹巴县| 平潭县| 临澧县| 通榆县| 栾城县| 株洲县| 汾阳市| 乐安县| 永泰县| 渝北区| 大安市| 元谋县| 阳曲县| 山东省| 贵阳市| 香格里拉县| 福贡县| 收藏| 大田县| 南宁市| 南宫市| 抚州市| 大关县| 齐河县| 浠水县| 安化县| 阳东县| 池州市| 安国市| 新和县| 湘阴县| 大同县| 德保县| 江山市| 彝良县| 龙泉市| 体育| 南平市| 渭南市|