Mysql 如何在Spring中将变量用作@Query的值
我知道标题并不能真正解释这个问题,所以我会尝试给出更多细节 控制器中有一个字符串,类似这样(请记住,此字符串不是手动写入的,因为它是动态的,有7个筛选器,我希望根据所选筛选器返回信息,因此我不能将字符串放在@Query值中,因为某些筛选器将保持不变,并且您无法选择*WHERE value=*) 现在,查询是在存储库中进行的,但我真的不知道如何将该查询的值设置为以下字符串:Mysql 如何在Spring中将变量用作@Query的值,mysql,spring,spring-data-jpa,Mysql,Spring,Spring Data Jpa,我知道标题并不能真正解释这个问题,所以我会尝试给出更多细节 控制器中有一个字符串,类似这样(请记住,此字符串不是手动写入的,因为它是动态的,有7个筛选器,我希望根据所选筛选器返回信息,因此我不能将字符串放在@Query值中,因为某些筛选器将保持不变,并且您无法选择*WHERE value=*) 现在,查询是在存储库中进行的,但我真的不知道如何将该查询的值设置为以下字符串: @Query(value = query, nativeQuery = true) public List<Examp
@Query(value = query, nativeQuery = true)
public List<ExampleEntity> testFunction(String query);
return jdbcTemplate.query(query, new SingleColumnMapper(Example.class)
(现在我考虑一下,它是这样做的,因为编译器认为这就像我试图将某个对象的值设置为字符串一样,这是有意义的,但我希望有一种方法可以简单地将函数的输入设置为查询的值:/)
Sooo…还有其他方法可以使用该字符串作为查询值吗?注释在类上,它们在编译时设置。您不能在运行时更改它们。Spring也不能更改它们 您可以做的是查看如何使用规范构造查询,或者在自定义JPA存储库中使用现有的查询构造代码。对于简单的情况,使用接口定义存储库是一个不错的选择,但这不是一个简单的情况
顺便说一句,最好将查询构建代码从控制器层移到存储库中。即使假设当前工作流中的所有内容都是安全的,让存储库将本机查询作为参数也不是一个好主意,它很容易被滥用。我采用了不同的方法来解决这个问题,这是非常重要的比使用规范更简单 在搜索了如何在控制器中发送查询后,我发现jdbcTemplate在Spring中是标准的(无需添加依赖项或任何其他内容) 这些都是我采取的步骤,最终,一切都会正常进行 1在控制器中自动连接JdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
2将返回设置为查询
return jdbcTemplate.queryForList(query);
请记住,这是针对多个列的,如果您必须只返回一个列,我认为您必须使用以下内容:
@Query(value = query, nativeQuery = true)
public List<ExampleEntity> testFunction(String query);
return jdbcTemplate.query(query, new SingleColumnMapper(Example.class)
这可能不是解决这个问题的最安全或最推荐的方法,但它对我有效
return jdbcTemplate.query(query, new SingleColumnMapper(Example.class)