Spring JPA - 准备好的语句查询?

Posted

技术标签:

【中文标题】Spring JPA - 准备好的语句查询?【英文标题】:Spring JPA - Prepared Statement Queries? 【发布时间】:2020-05-20 10:29:57 【问题描述】:

我正在构建一个 Spring REST 服务器应用程序,并且正在执行一些本机查询以从我的数据库中检索数据。从学校的教学中,他们建议将所有查询都做prepared statements,以阻止用户在输入框中输入有害的SQL。

我试图做一些研究,但没有找到具体的答案。 Spring是否默认使用准备好的语句?这是我要清理的查询之一的 sn-p:


   @Query(value = "DELETE FROM userMeds WHERE username = ?1 AND drug_id = ?2", nativeQuery = true)
    void deleteByIdentity(String username, int drug_id);

如果这不使用准备好的语句,我该如何避免发生任何不好的事情?

提前谢谢你

【问题讨论】:

【参考方案1】:

Prepared 语句有助于避免 sql 注入。

就 spring data jpa 而言,它默认接受 xml、@NamedQuery 或 @Query 参数化,因此无需担心。

【讨论】:

所以它已经参数化了?如果用户输入恶意SQL不会影响数据库,例如? 是的,我们通常会在检查输入之前进行一些验证,尤其是字符串。

以上是关于Spring JPA - 准备好的语句查询?的主要内容,如果未能解决你的问题,请参考以下文章

使用准备好的语句时出现 Camel -Spring SQLException

《Spring Data JPA从入门到精通》内容简介前言

Spring Data Jpa 使用@Query标注自定义查询语句

Spring Data Jpa 使用@Query标注自定义查询语句

如何在 JPQL(Spring JPA 查询)中使用 JOIN 执行 UPDATE 语句?

解决spring boot jpa查询,语句正确,返回为空问题