日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java-jpa-criteriaBuilder使用入门

發(fā)布時(shí)間:2025/3/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java-jpa-criteriaBuilder使用入门 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

jpa

概念?
創(chuàng)建使用Java Persistence API的存儲(chǔ)庫(kù)是一個(gè)繁瑣的過(guò)程,需要大量時(shí)間并需要大量樣板代碼。一種推薦的方式是使用

元模型

概念?
在JPA中,標(biāo)準(zhǔn)查詢是以元模型的概念為基礎(chǔ)的,元模型是為具體持久化單元的受管實(shí)體定義的.這些實(shí)體可以是實(shí)體類,嵌入類或者映射的父類.提供受管實(shí)體元信息的類就是元模型類.?
簡(jiǎn)單的說(shuō)就是元模型是實(shí)體類對(duì)應(yīng)的一個(gè)“受管實(shí)體?
-?舉個(gè)例子:?
實(shí)體類?Employee(com.demo.entities包中定義)

@Entity @Table public class Employee{ private int id; private String name;private int age;@OneToManyprivate List<Address> addresses;// Other code… }

Employee類的標(biāo)準(zhǔn)元模型類的名字是 Employee_

import javax.annotation.Generated; import javax.persistence.metamodel.SingularAttribute; import javax.persistence.metamodel.ListAttribute; import javax.persistence.metamodel.StaticMetamodel; @StaticMetamodel(Employee.class) public class Employee_ { public static volatile SingularAttribute<Employee, Integer> id; public static volatile SingularAttribute<Employee, Integer> age; public static volatile SingularAttribute<Employee, String> name; public static volatile ListAttribute<Employee, Address> addresses; }

Employee的每一個(gè)屬性都會(huì)使用在JPA2規(guī)范中描述的以下規(guī)則在相應(yīng)的元模型類中映射:

  • 元模型類的屬性全部是static和public的。
  • 元模型類的屬性全部是static和public的。Employee的每一個(gè)屬性都會(huì)使用在JPA2規(guī)范中描述的以下規(guī)則在相應(yīng)的元模型類中映射:

  • 對(duì)于Addess這樣的集合類型,會(huì)定義靜態(tài)屬性ListAttribute< A, B> b,這里L(fēng)ist對(duì)象b是定義在類A中類型B的對(duì)象。其它集合類型可以是SetAttribute, MapAttribute 或 CollectionAttribute 類型。

看到這應(yīng)該會(huì)有個(gè)疑問(wèn),這麻煩,為什么要使用這個(gè)元模型?有啥好處??
好處肯定是有的,畢竟是標(biāo)準(zhǔn)jpa定義的東西。我這網(wǎng)上查了下,好處很多:

  • 查詢更加類型安全

好吧,我暫時(shí)就查到這個(gè)。

criteria 查詢

為了更好的理解criteria 查詢,考慮擁有Employee實(shí)例集合的Dept實(shí)體,Employee和Dept的元模型類的代碼如下:

//All Necessary Imports @StaticMetamodel(Dept.class) public class Dept_ { public static volatile SingularAttribute<Dept, Integer> id; public static volatile ListAttribute<Dept, Employee> employeeCollection; public static volatile SingularAttribute<Dept, String> name; } //All Necessary Imports @StaticMetamodel(Employee.class) public class Employee_ { public static volatile SingularAttribute<Employee, Integer> id; public static volatile SingularAttribute<Employee, Integer> age; public static volatile SingularAttribute<Employee, String> name; public static volatile SingularAttribute<Employee, Dept> deptId; }

下面的代碼片段展示了一個(gè)criteria 查詢,它用于獲取所有年齡大于24歲的員工:

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); CriteriaQuery<Employee> criteriaQuery = criteriaBuilder.createQuery(Employee.class); Root<Employee> employee = criteriaQuery.from(Employee.class); Predicate condition = criteriaBuilder.gt(employee.get(Employee_.age), 24); criteriaQuery.where(condition); TypedQuery<Employee> typedQuery = em.createQuery(criteriaQuery); List<Employee> result = typedQuery.getResultList();

對(duì)應(yīng)的SQL: SELECT * FROM employee WHERE age > 24

CriteriaBuilder 安全查詢創(chuàng)建工廠

CriteriaBuilder 安全查詢創(chuàng)建工廠,,創(chuàng)建CriteriaQuery,創(chuàng)建查詢具體具體條件Predicate?等。?
CriteriaBuilder是一個(gè)工廠對(duì)象,安全查詢的開(kāi)始.用于構(gòu)建JPA安全查詢.可以從EntityManager 或 EntityManagerFactory類中獲得CriteriaBuilder。?
比如:?

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();

CriteriaQuery 安全查詢主語(yǔ)句

  • 它通過(guò)調(diào)用 CriteriaBuilder, createQuery 或CriteriaBuilder.createTupleQuery 獲得。
  • CriteriaBuilder就像CriteriaQuery 的工廠一樣。
  • CriteriaQuery對(duì)象必須在實(shí)體類型或嵌入式類型上的Criteria 查詢上起作用。
  • Employee實(shí)體的 CriteriaQuery 對(duì)象以下面的方式創(chuàng)建:
  • ?

    CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); CriteriaQuery<Employee> criteriaQuery = criteriaBuilder.createQuery(Employee.class);

    過(guò)Employee_元模型類age屬性,稱之為路徑表達(dá)式。若age屬性與String文本比較,編譯器會(huì)拋出錯(cuò)誤,這在JPQL中是不可能的。這就是元模型的作用嗎??

    Predicate[] 多個(gè)過(guò)濾條件

    引用原文:http://blog.csdn.net/id_kong/article/details/70225032 List<Predicate> predicatesList = new ArrayList<Predicate>();predicatesList.add(.....Pridicate....)criteriaQuery.where(predicatesList.toArray(new Predicate[predicatesList.size()]));

    轉(zhuǎn)載于:https://www.cnblogs.com/mzdljgz/p/11387168.html

    與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的java-jpa-criteriaBuilder使用入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。