我们可以将. sql文件传递或输入到Spring JPA中的查询注释吗?
类似这样的@Query(文件:/sql/employeeList.sql,nativeQuery=true)
/sql/employeeList。sql-我想把这个文件放在代码中的某个地方,其中包含select sql。
我不希望有原生sql字符串@查询(“选择abc….”,nativeQuery=true)--我不想这样使用。因为我的sql太大了。
您不能指定sql文件,但Spring数据JPA将在命名查询中查找。属性来查找命名查询,这允许您在sql文件中指定查询。
这在对类似问题的回答中有所描述。
@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来进行复杂的查询,但当我尝试下面的简单查询时,我得到了一个错误 堆栈跟踪