国产精品毛片一区二区,欧美熟妇brazzers,丰满女邻居的嫩苞张开视频,天天爽夜夜爽夜夜爽

南京北大青鳥

全國咨詢電話:15195455103

三分鐘了解北大青鳥
當前位置:南京北大青鳥 > 課程設(shè)置 > ACCP課程JAVA技術(shù)

Java持久層的三種查詢方式

來源:未知? ? ? 作者:IT教育 ? ??

Java JPA有三種查詢方式: 1)JPQL 2)Criteria API 3)SQL 下面一一詳解。 一、本地SQL查詢 SQL是標準化的查詢語言,用于管理數(shù)據(jù)。下面的例子說明了怎樣實現(xiàn)本地SQL查詢: // 獲得實體管理器 E
   Java JPA有三種查詢方式:

  1)JPQL

  2)Criteria API

  3)SQL

  下面一一詳解。

  一、本地SQL查詢

  SQL是標準化的查詢語言,用于管理數(shù)據(jù)。下面的例子說明了怎樣實現(xiàn)本地SQL查詢:

  // 獲得實體管理器

  EntityManager em = ...

  // 建立SQL查詢

  String getByFirstName = "SELECT * FROM contacts c WHERE c.first_name = ?1";

  // 創(chuàng)建查詢實例

  Query query = em.createNativeQuery(getByFirstName, Contact.class);

  // 設(shè)置查詢參數(shù)

  query.setParameter(1, "John");

  // 獲取結(jié)果

  List contacts = query.getResultList();

  上面的例子告訴我們3件事:

  1)用JPA建立查詢,無需學習新的查詢語言;

  2)創(chuàng)建的查詢沒有類型安全,在使用前必須計算查詢結(jié)果;

  3)在運行程序前必須驗證查詢的拼寫或語法是否有錯誤。

  而且SQL查詢會指定數(shù)據(jù)庫的模式,因此除非必要,我們都應(yīng)該避免使用此方式。

  二、JPQL查詢

  JPQL是基于字符串的查詢語言,語法類似于SQL。因此學習JPQL相當容易,只要有一定的SQL基礎(chǔ)??聪旅娴拇a:

  // 獲得實體管理器

  EntityManager em = ...

  // 建立JPQL查詢

  String getByFirstName = "SELECT c FROM Contact c WHERE c.firstName = :firstName";

  // 創(chuàng)建查詢實例

  TypedQuery query = em.createQuery(getByFirstName, Contact.class);

  // 設(shè)置查詢參數(shù)

  query.setParameter("firstName", "John");

  // 獲取結(jié)果

  List contacts = query.getResultList();

  上面的例子告訴我們3件事:

  1)創(chuàng)建的查詢是類型安全的,我們不必計算查詢的結(jié)果;

  2)JPQL查詢字符串是易讀、易于理解的;

  3)創(chuàng)建的查詢字符串在編譯期間不會被驗證。

  JPQL對于靜態(tài)查詢是一個好辦法。換句話說們,如果很多查詢參數(shù)總是相同的,那么JPQL是我們的首選。但是,JPQL實現(xiàn)動態(tài)查詢就顯得很繁瑣了。

  三、Criteria API

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

  // 獲得實體管理器

  EntityManager em = ...

  // 獲得Criteria建立器

  CriteriaBuilder cb = em.getCriteriaBuilder();

  // 建立Criteria查詢

  CriteriaQuery query = cb.greateQuery(Contact.class);

  // 創(chuàng)建查詢Root

  Root root = query.from(Contact.class);

  // 創(chuàng)建firstName的查詢條件,使用靜態(tài)元模型

  Predicate firstNameIs = cb.equal(root.get(Contact_.firstName, "John"));

  // 指定查詢的where條件

  query.where(firstNameIs);

  // 創(chuàng)建查詢并獲取結(jié)果

  TypedQuery q = em.createQuery(query);

  List contacts = q.getResultList();

  上面的例子告訴我們3件事:

  1)創(chuàng)建的查詢是類型安全的,不必計算查詢的結(jié)果;

  2)代碼不如SQL或JPQL那么易讀;

  3)由于是使用Java API處理,Java編譯器會確保查詢的語法正確。

  Criteria API對于創(chuàng)建動態(tài)查詢是一個極好的工具。它使得創(chuàng)建動態(tài)查詢更簡便,因為我們處理的是對象,而不是處理查詢的字符串。缺點在于隨著查詢的復(fù)雜度的增加,,查詢定義對象的創(chuàng)建也會變得很繁瑣,代碼會更難讀。

分享到:
近期文章

搶試聽名額

名額僅剩66名

教育改變生活

WE CHANGE LIVES