所以我想根据一些条件创建一个String,并将整个查询作为方法参数传递。现在我发现了SPeL和一个语法:
@Query(value = "#{#query}", nativeQuery = true)
List<User> findByQuery(@Param("query") String query);
但那东西给了我一个错误
Java.sql.SQLException: Statement.executeQuery() cannot issue statements that do not produce result sets
我传递的查询:
SELECT * FROM registration WHERE APPROVED='pending' ORDER BY RSID DESC LIMIT 5
尽管整个查询可以根据特定条件而改变。
1条答案
按热度按时间kx7yvsdv1#
好吧,我终于得到了答案。要在Sping Boot 中使用EntityManager类运行查询,您可以按照以下步骤操作:
1.使用@PersistenceContext annotation将EntityManager示例注入到类中:
1.使用EntityManager示例的createQuery()方法创建查询对象。您可以将JPQL(Java持久性查询语言)查询字符串或原生SQL查询字符串作为参数传递:
1.如果你使用的是原生SQL查询,你可以使用createNativeQuery()方法:
1.在查询对象上调用getResultList()方法来执行查询并返回结果:
1.然后,您可以迭代结果列表并根据需要处理它们:
请注意,您应该始终使用参数化查询来防止SQL注入攻击。EntityManager类同时支持JPQL和原生SQL查询,但推荐使用JPQL,因为它独立于数据库并提供更好的类型安全性。