Spring JPA使用CriteriaBuilder動態構造查詢


版權聲明:本文為博主原創文章,遵循 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后面的條件子句。
  • 執行查詢獲取數據。


免責聲明!

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



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