Java持久層的三種查詢方式

來源:互聯網
上載者:User
Java持久層的三種查詢方式

作者:chszs,轉載需註明。部落客頁:http://blog.csdn.net/chszs
Java JPA有三種查詢方式:
1)JPQL
2)Criteria API
3)SQL

下面一一詳解。

一、本地SQL查詢

SQL是標準化的查詢語言,用於管理資料。下面的例子說明了怎樣實現本地SQL查詢:

// 獲得實體管理器EntityManager em = ...// 建立SQL查詢String getByFirstName = "SELECT * FROM contacts c WHERE c.first_name = ?1";// 建立查詢執行個體Query query = em.createNativeQuery(getByFirstName, Contact.class);// 設定查詢參數query.setParameter(1, "John");// 擷取結果List contacts = query.getResultList();

上面的例子告訴我們3件事:
1)用JPA建立查詢,無需學習新的查詢語言;
2)建立的查詢沒有型別安全,在使用前必須計算查詢結果;
3)在運行程式前必須驗證查詢的拼字或文法是否有錯誤。

而且SQL查詢會指定資料庫的模式,因此除非必要,我們都應該避免使用此方式。

二、JPQL查詢

JPQL是基於字串的查詢語言,文法類似於SQL。因此學習JPQL相當容易,只要有一定的SQL基礎。看下面的代碼:

// 獲得實體管理器EntityManager em = ...// 建立JPQL查詢String getByFirstName = "SELECT c FROM Contact c WHERE c.firstName = :firstName";// 建立查詢執行個體TypedQuery<Contact> query = em.createQuery(getByFirstName, Contact.class);// 設定查詢參數query.setParameter("firstName", "John");// 擷取結果List<Contact> contacts = query.getResultList();

上面的例子告訴我們3件事:
1)建立的查詢是型別安全的,我們不必計算查詢的結果;
2)JPQL查詢字串是易讀、易於理解的;
3)建立的查詢字串在編譯期間不會被驗證。

JPQL對於靜態查詢是一個好辦法。換句話說們,如果很多查詢參數總是相同的,那麼JPQL是我們的首選。但是,JPQL實現動態查詢就顯得很繁瑣了。

三、Criteria API

Criteria API用於解決對接第三方ORM架構時讓JPQL標準化。它用於構建查詢定義對象,此對象會被翻譯成可執行檔SQL查詢。下面的代碼說明了這個問題:

// 獲得實體管理器EntityManager em = ...// 獲得Criteria建立器CriteriaBuilder cb = em.getCriteriaBuilder();// 建立Criteria查詢CriteriaQuery<Contact> query = cb.greateQuery(Contact.class);// 建立查詢RootRoot<Contact> root = query.from(Contact.class);// 建立firstName的查詢條件,使用靜態元模型Predicate firstNameIs = cb.equal(root.get(Contact_.firstName, "John"));// 指定查詢的where條件query.where(firstNameIs);// 建立查詢並擷取結果TypedQuery<Contact> q = em.createQuery(query);List<Contact> contacts = q.getResultList();

上面的例子告訴我們3件事:
1)建立的查詢是型別安全的,不必計算查詢的結果;
2)代碼不如SQL或JPQL那麼易讀;
3)由於是使用Java API處理,Java編譯器會確保查詢的文法正確。

Criteria API對於建立動態查詢是一個極好的工具。它使得建立動態查詢更簡便,因為我們處理的是對象,而不是處理查詢的字串。缺點在於隨著查詢的複雜度的增加,,查詢定義對象的建立也會變得很繁瑣,代碼會更難讀。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.