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后面的条件子句。
    • 执行查询获取数据。
  • 相关阅读:
    Eclipse项目上传和下载到码云上
    java.lang.IllegalArgumentException,java.util.zip.ZipException 解决办法
    #{}和${}的区别
    Lambda 表达式
    存储器的按字寻址和按字节寻址
    二叉树的三种遍历方式
    线性表和链表
    java泛型理解
    java字符输入输出流
    applet的生命周期
  • 原文地址:https://www.cnblogs.com/mzdljgz/p/11495723.html
Copyright © 2011-2022 走看看