动态 SELECT 和 WHERE 子句
Posted
技术标签:
【中文标题】动态 SELECT 和 WHERE 子句【英文标题】:Dynamic SELECT and WHERE clause 【发布时间】:2019-10-04 17:44:09 【问题描述】:我们在 Spring Boot 应用程序中有一个要求,它需要生成带有动态 SELECT 子句和 WHERE 子句的查询。用户将在运行时选择特定的列,并且只有那些需要被提取。如何做到这一点? 据我搜索过动态查询,我可以理解动态部分可以为 WHERE 子句完成。但是,不确定如何动态执行 SELECT 子句。
编辑添加示例:
表有columns id
、name
、role
、salary
。
查询:
select id, name from Table Where role = 'Admin';
这里,WHERE clause (role = Admin)
和要成为 selected(id, name)
的列仅在运行时才知道。
【问题讨论】:
你能负担得起输入/输出的例子吗? 编辑添加示例。 你所描述的听起来像一个查询构建器 - querybuilder.js.org 是你想要的吗? 【参考方案1】:使用类似的东西
final CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
final CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(getDomainClass());
final Root<T> root = criteriaQuery.from(getDomainClass());
criteriaQuery.select(root);
ParameterExpression<Integer> p = criteriaBuilder.parameter(Integer.class);
criteriaQuery.where(criteriaBuilder.gt(root.get("<whatever>"), p));
final TypedQuery<T> query = em.createQuery(criteriaQuery);
return query.getResultList();
如果这不符合您的想法,请查看此帖子 Really dynamic JPA CriteriaBuilder
【讨论】:
以上是关于动态 SELECT 和 WHERE 子句的主要内容,如果未能解决你的问题,请参考以下文章
Knex.js:加入 'select' 和 'where' 子句