Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在Spring中将变量用作@Query的值_Mysql_Spring_Spring Data Jpa - Fatal编程技术网

Mysql 如何在Spring中将变量用作@Query的值

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

我知道标题并不能真正解释这个问题,所以我会尝试给出更多细节

控制器中有一个字符串,类似这样(请记住,此字符串不是手动写入的,因为它是动态的,有7个筛选器,我希望根据所选筛选器返回信息,因此我不能将字符串放在@Query值中,因为某些筛选器将保持不变,并且您无法选择*WHERE value=*)

现在,查询是在存储库中进行的,但我真的不知道如何将该查询的值设置为以下字符串:

@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)