如何在 Spring Boot 中从应用程序属性文件中读取 jpa 命名查询?

Posted

技术标签:

【中文标题】如何在 Spring Boot 中从应用程序属性文件中读取 jpa 命名查询?【英文标题】:How to read jpa named queries from application properties file in spring boot? 【发布时间】:2019-08-30 19:49:21 【问题描述】:

我在我的 JPA 存储库接口中有自定义长 sql 查询字符串。我觉得将此查询移动到一些属性文件,因为当我想对我的数据库执行查询时,我必须删除所有“+”加号和双引号。与其删除,不如将所有查询放入属性或 yaml 文件中。我可以轻松使用和修改。请建议我这种方式是正确的方法。

@Repository
public interface LoanRepository extends JpaRepository<Loan, Integer> 

     @(name= "long query")
     public List<Loan> findLoansByIdAndBalance();

【问题讨论】:

如果你把$放在开头会发生什么,那么它将是"$long.query" 抛出错误 java.sql.SQLSyntaxErrorException: 你的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 1 行的“$long.query”附近使用正确的语法 请任何人帮助我。还有其他方法可以实现吗? 可能你可以在一个类中添加constant variables 并调用它,例如 static final LOANS_BY_ID_AND_BALANCE = "SELECT x FROM x";并调用@Query(Queries.LOANS_BY_ID_AND_BALANCE) 【参考方案1】:

这是一个如何从 yml 文件中获取值的示例。

在您的 application.yml 中:

data:
   query:
      queryGetNames: here_your_query

在你的课堂上,你用这个来调用这个值:

@Setter(onMethod_ = @Value("$data.query.queryGetNames"))
private String query;

注意:@Setter 注解来自 lombok

【讨论】:

@femando 我想在存储库界面中使用。有可能吗? 我在那里创建了单独的接口,我放置了所有查询并从那里引用我的 JPA 存储库接口。因为@Query VALUE 属性只允许最终的字符串值。所以我们不能声明没有值的最终变量。所以我认为我们无法从应用程序属性中获取值。如果我错了,请纠正我... 我提到了这个链接,它也帮助了我很多***.com/questions/27902242/…

以上是关于如何在 Spring Boot 中从应用程序属性文件中读取 jpa 命名查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中从泛型参数(与任何类无关)中获取值

在 Spring Boot 中从 jwt 获取附加属性

无法在 spring-boot 应用程序中从 Consul 读取配置

如何在 Spring Boot 中从 Azure SAML 2.0 应用程序获取角色或组

如何在spring boot中从同一个应用程序调用另一个api

如何在 Spring Boot 应用程序中从数据库表中填充实体