1. <bdo id="8zfej"></bdo>
    <li id="8zfej"><meter id="8zfej"><th id="8zfej"></th></meter></li>

    南京中博教育

    全國咨詢電話:17368476151

    三分鐘了解中博教育
    當(dāng)前位置:南京中博教育 > 課程設(shè)置 > ACCP課程JAVA技術(shù)

    Java持久層的三種查詢方式

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

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

      1)JPQL

      2)Criteria API

      3)SQL

      下面一一詳解。

      一、本地SQL查詢

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

      // 獲得實(shí)體管理器

      EntityManager em = ...

      // 建立SQL查詢

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

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

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

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

      query.setParameter(1, "John");

      // 獲取結(jié)果

      List contacts = query.getResultList();

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

      1)用JPA建立查詢,無需學(xué)習(xí)新的查詢語言;

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

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

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

      二、JPQL查詢

      JPQL是基于字符串的查詢語言,語法類似于SQL。因此學(xué)習(xí)JPQL相當(dāng)容易,只要有一定的SQL基礎(chǔ)。看下面的代碼:

      // 獲得實(shí)體管理器

      EntityManager em = ...

      // 建立JPQL查詢

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

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

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

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

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

      // 獲取結(jié)果

      List contacts = query.getResultList();

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

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

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

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

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

      三、Criteria API

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

      // 獲得實(shí)體管理器

      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)建的查詢是類型安全的,不必計(jì)算查詢的結(jié)果;

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

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

      Criteria API對于創(chuàng)建動態(tài)查詢是一個極好的工具。它使得創(chuàng)建動態(tài)查詢更簡便,因?yàn)槲覀兲幚淼氖菍ο螅皇翘幚聿樵兊淖址H秉c(diǎn)在于隨著查詢的復(fù)雜度的增加,,查詢定義對象的創(chuàng)建也會變得很繁瑣,代碼會更難讀。

    分享到:
    近期文章

    搶試聽名額

    名額僅剩66名

    教育改變生活

    WE CHANGE LIVES

    主站蜘蛛池模板: 国产成人综合亚洲亚洲国产第一页| 狠狠色丁香久久婷婷综合五月| 国产精品激情综合久久| 国产成人99久久亚洲综合精品| 色综合色国产热无码一| 色欲人妻综合AAAAAAAA网| 久久综合给合综合久久| 久久综合久久美利坚合众国| 91精品国产色综合久久不卡蜜 | 亚洲国产综合无码一区| 国产成人综合久久综合| 国产成人综合久久久久久| 97久久天天综合色天天综合色| 国产色综合一二三四| 久久综合九色综合久99| 国产精品天干天干综合网| 一本久道久久综合| 天天色天天操综合网| 亚洲综合久久成人69| 亚洲国产综合无码一区| 熟女少妇色综合图区| 亚洲伊人久久成综合人影院| 国产精品综合一区二区三区| 婷婷丁香五月激情综合| 图图资源网亚洲综合网站| 伊人色综合久久大香| 亚洲啪啪综合AV一区| 久久综合九色综合97免费下载| 自拍三级综合影视| 九九久久99综合一区二区| 婷婷四房综合激情五月在线 | 国产成人亚洲综合在线| 亚洲日韩在线中文字幕综合| 成人综合在线视频| 亚洲国产天堂久久综合| 精品亚洲综合在线第一区| 色爱无码AV综合区| 亚洲狠狠成人综合网| 国产精品成人免费综合| 国产综合久久久久| 国产成人综合久久综合|