JPA CriteriaBuilder的簡單使用


通過使用JPA可以簡化我們很多的工作,只需要聲明一個接口實現JpaRepository,並實現對應的實體對象進行映射。通過JPA自定義的語法格式或是通過@Query注解實現自己的查詢語句就可以實現大部分的查詢方法。

但是,對於動態參數的分頁查詢使用常規方法,實現起來較為繁瑣,但是JPA提供了CriteriaBuilder極大地方便了開發者。隆重地介紹下這個接口:

public interface Specification<T> {

	/**
	 * Creates a WHERE clause for a query of the referenced entity in form of a {@link Predicate} for the given
	 * {@link Root} and {@link CriteriaQuery}.
	 * 
	 * @param root
	 * @param query
	 * @return a {@link Predicate}, may be {@literal null}.
	 */
	Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb);
}

root是要查詢對象的實體,可以理解為需要查詢的表,query是查詢表達式的載體, cb是query的工廠方法。

及其一些用法:

// select u from user u where u.name = :username
query.where(cb.equal(root.get(User_.name), username));

// select u from user u where u.name in (`X`, `Y`, `Z`);
Path<String> name = root.get(User_.name);
query.where(cb.in(name).value("x").value("Y").value("Z"));

//還有一些謂語可以表述關系,請看cb的文檔。


//假設用戶和訂單(Order)之前有一對多的關系,可以進行關聯查詢
SetJoin<User, Order> o = root.join(User_.orders);
Predicate p = cb.equal(o.get(Order_.status), Status.DELIVERED);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM