在使用Spring JPA提供的方法只能進行簡單的CRUD,如果遇到復雜的情況就需要我們動態來構建查詢條件了。這里我們來看使用CriteriaBuilder如何來構造查詢。
核心代碼:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> query = criteriaBuilder.createQuery(Long.class);
Root<Order> root = query.from(Order.class);
query.select(criteriaBuilder.count(root.get("id")));
Predicate predicate = criteriaBuilder.equal(root.get("id"), 1);
query.where(predicate);
Long singleResult = entityManager.createQuery(query).getSingleResult();
調用entityManager.getCriteriaBuilder()來獲取CriteriaBuilder。CriteriaBuilder可以用於創建CriteriaQuery、CriteriaUpdate和CriteriaDelete。除此之外類似count、max等函數也是由CriteriaBuilder來創建的。其中Entitymanager可以使用@PersistenceContext注解來進行注入。
調用criteriaBuilder.createQuery來創建CriteriaQuery。其中createQuery的參數是Query返回值類型。
調用query.from(Order.class)。參數是對應於order表的實體類,query.from類似於sql中的from語句,該方法的執行等價於sql中的from order。
調用 query.select創建映射。 query.select(criteriaBuilder.count(root.get(“id”)))等價於select count(id)。如果執行query.select(root)則等價於select *。
使用CriteriaBuilder構造查詢條件Predicate,該predicate也就是在where后面的條件子句。
將Predicate放在 query.where中。
最后執行查詢獲取數據。
————————————————
版權聲明:本文為CSDN博主「一路斜陽」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zhaoruda/article/details/80157975
