版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://www.cnblogs.com/mzdljgz/p/11495723.html
在使用Spring JPA提供的方法只能進行簡單的CRUD,如果遇到復雜的情況就需要我們動態來構建查詢條件了。這里我們來看使用CriteriaBuilder如何來構造查詢。
核心代碼:
@PersistenceContext private EntityManager entityManager; /** * 查詢所有菜單 * * @return */ public List<MenuInfo> findAllMenu() { CriteriaBuilder builder = entityManager.unwrap(SessionImpl.class).getCriteriaBuilder(); CriteriaQuery<MenuInfo> criteriaQuery = builder.createQuery(MenuInfo.class); Root<MenuInfo> root = criteriaQuery.from(MenuInfo.class); criteriaQuery.select(root); criteriaQuery.where(builder.equal(root.get("systemFlag"), Constant.SystemFlag.MANAGE_B)); return entityManager.unwrap(SessionImpl.class).createQuery(criteriaQuery).getResultList(); }
- 調用entityManager.unwrap(SessionImpl.class).getCriteriaBuilder();來獲取CriteriaBuilder。CriteriaBuilder可以用於創建CriteriaQuery、CriteriaUpdate和CriteriaDelete。除此之外類似count、max等函數也是由CriteriaBuilder來創建的。其中Entitymanager可以使用@PersistenceContext注解來進行注入。
- 調用criteriaBuilder.createQuery來創建CriteriaQuery。其中createQuery的參數是Query返回值類型。
- 調用criteriaQuery.from(MenuInfo.class)。參數是對應於MenuInfo表的實體類,query.from類似於sql中的from語句,該方法的執行等價於sql中的from MenuInfo。
- 調用 criteriaQuery.select創建映射。 criteriaQuery.select(criteriaBuilder.count(root.get(“id”)))等價於select count(id)。如果執行criteriaQuery.select(root)則等價於select *。
- 使用CriteriaBuilder構造查詢條件Predicate,該predicate也就是在where后面的條件子句。
- 執行查詢獲取數據。
