当前位置: 首页 > 知识库问答 >
问题:

使用@query从SPRING BOOT中的文件获取查询

柳仲卿
2023-03-14

我有一个用于加载查询的项目:

@Query(value = SELECT_BY_USER_ID, nativeQuery = true)
Employee findByUserId(@Param("userId") String userId);

在“SELECT_BY_USER_ID”上是一个普通的字符串查询。

我在jar之外有一个YML配置,我用来加载不同的配置,我也想使用这个YML来加载查询。

示例YML:

file:
    query1: SELECT * FROM DUAL;

但是我不知道如何在@Query value中直接从我的文件加载,我尝试了一下:

@Query(value = ("${file.query1}"), nativeQuery = true)
List<Employee> findByCost();

我该怎么办?非常感谢。

共有3个答案

羊城
2023-03-14

不幸的是,Spring数据似乎不支持直接属性引用withing@Query anno(如@Value中)。尽管如此,假设您使用spring-data-jpa和Hibernate,它可以使用外部. xml文件将您的查询存储为命名查询并按方法名称或类似名称引用它们

@Query(nativeQuery = true, name="Repository1.query1")

这是一篇关于这个问题的很好的文章:XML文件中的JPA查询,它描述了如何将. xml文件放在预期orm.xml之外的其他地方

秦承允
2023-03-14

据我所知,无法从YML加载配置的查询。它们可以从另一个文件加载。在资源项目文件夹中创建一个名为“META-INF/jpa命名查询”的文件。属性,然后放置查询:

Employee.findById=select * from Employee e where e.id=?1

然后调用您的查询:

@Query(name = "Employee.findById")
Employee findByUserId(String id);
黄君博
2023-03-14

如果需要从resources文件夹加载SQL,可以尝试spring数据sqlfile库。它支持从资源中加载SQL查询。因此,您只需将SQL查询放在resources文件夹中,然后就可以在SqlFromResource注释中引用它们:

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
    @SqlFromResource(path = "select_user_by_id.sql")
    User findById(int userId);
}

输出将如下所示:

@Repository
public interface UserRepositoryGenerated extends JpaRepository<User, Integer> {    
  @Query(
      value = "SELECT *     FROM users     WHERE id = :userId",
      nativeQuery = true
  )
  User findById(int userId);
}
 类似资料:
  • 问题内容: 我有一个proyect用于加载查询: 在“ SELECT_BY_USER_ID”上是正常的字符串查询。 我在jar外部有一个YML配置,用于加载不同的配置,并且我也想使用此YML来加载查询。 示例YML: 但是我不知道如何直接从@Query值中的文件中加载,我试图这样做: 我能怎么做?谢谢。 问题答案: 如果您需要从资源文件夹中加载SQL,可以尝试使用spring-data- sqlf

  • 我一直在读关于资源过滤的文章,这是在这个问题中提到的。 该项目使用SpringBoot,当运行JUnit时,会抱怨:

  • 问题内容: 为了进行一些统计分析,我需要在Excel工作表的列中提取值。我一直在使用Apache POI包从Excel文件中读取数据,当需要迭代行时,它可以很好地工作。但是我找不到关于在API(链接文本)或通过Google搜索获取列的任何信息。 由于我需要获取不同列的最大值和最小值并使用这些值生成随机数,因此,无需选择单个列,唯一的选择是遍历行和列以获取值并一一比较。听起来不那么省时。 关于如何解

  • 我有问题,需要帮助。 问题是我正在尝试使用 jdbctemplate 和映射获取查询的结果,该结果导致我的 File 类。 我的类文件包含3O个属性:10个长、字符串和日期类型的属性。 我正在执行的查询: 当执行查询时,它不会给我一个错误,一切都是正确的,但是当显示结果时,列出来为空,错误是由于我使用的查询使用别名,别名与File类的属性名称不匹配。 这就是我的问题或查询,因为我不能更改类属性的名

  • 我创建了一个OpenNotepad.bat文件,其中包含文本说明并将其保存到我的桌面。我创建了一个Java类。我必须在cmd中键入什么才能从. bat文件中获取该文本? 我是否应该使用特定的命令来获取命令提示符以显示该文本? 这是我的Java代码: 我对此一无所知。我参考了本教程:使用运行时类从Java代码执行批处理文件