zoukankan      html  css  js  c++  java
  • 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后面的条件子句。
    • 执行查询获取数据。
  • 相关阅读:
    做事的底线和逻辑
    我在华为的十年----徐家俊
    华为的冬天
    如何当好一个师长--林彪
    Base64 的那些事儿
    流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
    软件目的需求开发与管理
    车载行业认证资质
    tcpdump抓包分析 https://www.01hai.com/note/av263669
    packages.conifg
  • 原文地址:https://www.cnblogs.com/mzdljgz/p/11495723.html
Copyright © 2011-2022 走看看