我们在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)
的列仅在运行时已知。
答案 0 :(得分:0)
使用类似这样的东西
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