Spring JPA使用CriteriaBuilder动态构造查询
2023-03-14 09:46:24 时间
版权声明:本文为博主原创文章,遵循 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后面的条件子句。
- 执行查询获取数据。
相关文章
- 图像处理工具Python扩展库,你了解吗?
- 十个常用的损失函数解释以及Python代码实现
- 30 个数据科学工作中必备的 Python 包
- 如何在 Windows 上安装 Python
- 几行 Python 代码就可以提取数百个时间序列特征
- 使用Python快速搭建接口自动化测试脚本实战总结
- 哪种编程语言最适合开发网页抓取工具?
- 不要在 Python 中使用循环,这些方法其实更棒!
- 震惊!用Python探索《红楼梦》的人物关系!
- 如何最简单、通俗地理解Python模块?
- 酷炫,Python实现交通数据可视化!
- 为什么急于寻找Python的替代者?
- 30 个数据工程必备的Python 包
- 去字节面试被面这题能答上来吗?谈谈你对时间轮的理解?
- 火山引擎在行为分析场景下的 ClickHouse JOIN 优化
- 用Python爬取了某宝1166家月饼数据进行可视化分析,终于找到最好吃的月饼~
- 在 Linux 上试试这个基于 Python 的文件管理器
- Python列表解析式到底该怎么用?
- 如何快速把你的 Python 代码变为 API
- 十个Python初学者常犯的错误