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

Spring JPA查询注释-输入sql文件

养淇
2023-03-14

我们可以将. sql文件传递或输入到Spring JPA中的查询注释吗?

类似这样的@Query(文件:/sql/employeeList.sql,nativeQuery=true)

/sql/employeeList。sql-我想把这个文件放在代码中的某个地方,其中包含select sql。

我不希望有原生sql字符串@查询(“选择abc….”,nativeQuery=true)--我不想这样使用。因为我的sql太大了。

共有2个答案

袁鸿雪
2023-03-14

您不能指定sql文件,但Spring数据JPA将在命名查询中查找。属性来查找命名查询,这允许您在sql文件中指定查询。

这在对类似问题的回答中有所描述。

胥智
2023-03-14

@Jens Schauder是对的,你不能在Spring Data Jpa中指定sql文件,但是作为替代解决方案,你可以使用这个库https://github.com/VEINHORN/spring-data-sqlfile或者你可以自己加载这个文件。
注意:我在这个例子中使用了lombok

@Component
@Slf4j
@AllArgsConstructor
public class ArticleBatchRepository {
  @PersistenceContext
  EntityManager em;

  public List<ArticleBatch> findAll(String articleId) {
  Query nativeQuery =  em.createNativeQuery(loadQuery("/db/queries/articles/BatchByWarehouse.sql"), ArticleBatch.class);
    nativeQuery.setParameter(1, articleId);
    return (List<ArticleBatch>) nativeQuery.getResultList();
  }

  private String loadQuery(String path) {
    try {
      InputStream is = this.getClass().getResourceAsStream(path);
      java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
      return s.hasNext() ? s.next() : "";
    } catch (Exception e) {
      log.error("Failed to load query {}: {}", path, e.getMessage(), e);
      return null;
    }
  }
}
 类似资料:
  • 我想提高对可能存在的SQL注入攻击的了解。我知道参数化完全避免了SQL注入风险,因此应该在任何地方应用。然而,当有人问我如何利用它时,我想得到一个答案。 我知道基本的SQL注入攻击是如何工作的。例如,一个网站有一个页面<代码>网站。com/users/{id}其中id是用户的主键。如果我们完全信任输入,只需将id参数传递给正在执行的查询,这可能会产生可怕的后果。如果是网站。com/users/1查

  • 问题内容: 考虑一下我有这行代码 恕我直言,这很容易受到SQL注入的攻击。 因此,我想通过Get / URL发送一个“ var”参数来证明它是可以尝试的,该参数将注入查询,并带有潜在的恶意代码。 我实际上尝试过: 我尝试在执行之前打印出SQL字符串查询,它实际上是2条SQL有效语句。 第一个问题,但实际上似乎mysqli-> query不会一次执行2条语句。是不是 第二个问题,我看到注入查询的一种

  • 问题内容: 我的SQL代码如下: 等效的linq表达式是什么? 问题答案: 我第一次尝试在 来源 LINQ to SQL中的NOT IN子句

  • 在我的Spring Boot应用程序中有POJO,下面是它的样子: 现在我想选择所有与给定值相关的方式是POJO的成员。 所以这是我的查询

  • 注意我使用Mybatis

  • 我试图在elasticsearch spring数据中使用@query annotation来进行复杂的查询,但当我尝试下面的简单查询时,我得到了一个错误 堆栈跟踪