我正在构建一个 Spring REST 服务器应用程序,并且正在执行一些本机查询以从数据库中检索数据。从学校的教学来看,他们建议所有查询都准备好语句,以阻止用户在输入框中输入有害的SQL。
我尝试做一些研究,但还没有找到具体的答案。Spring默认使用准备好的语句吗?这是我想要清理的查询之一的片段:
@Query(value = "DELETE FROM userMeds WHERE username = ?1 AND drug_id = ?2", nativeQuery = true)
void deleteByIdentity(String username, int drug_id);
Run Code Online (Sandbox Code Playgroud)
如果这不使用准备好的语句,我怎样才能避免发生任何不好的事情?
先感谢您
我正在构建一个 Spring 系统,其中涉及用户和他们正在服用的药物。我有一个包含表的数据库:用户,药物
我正在创建一个新的数据类型名称 UserMed,它由复合主键组成 - 药物的 ID 和用户的用户名(上表的主键)
以下是 UserMed 实体代码:
@Entity
@Table(name = "userMeds")
public class UserMed implements Serializable {
@Id
@EmbeddedId
private UserMedId userMedId;
public UserMed(int drugID, String username) {
this.userMedId.drug_id = drugID;
this.userMedId.username = username;
}
public UserMed() {
}
public String getUsername() {
return this.userMedId.username;
}
public void setUsername(String username) {
this.userMedId.username = username;
}
}
Run Code Online (Sandbox Code Playgroud)
这是 EmbeddedID UserMedId 数据类型:
@RequiredArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@EqualsAndHashCode
@Embeddable
public class UserMedId implements Serializable {
@NonNull
public …Run Code Online (Sandbox Code Playgroud) 所以我有两个表,我想在 Spring 内存中查询。我已经成功地对名为 Medicine 的条目中的“药物”表进行了建模,但是现在需要对“药物交互”表进行建模 - 它将具有药物 ID(药物表中称为 id 的 PK)和药物交互中的药物名称的组合表,作为组合主键。
python中使用的模式:
cursor.execute("CREATE TABLE drugs(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), description TEXT, toxicity TEXT)")
cursor.execute("CREATE TABLE drugInteractions (drug_id INT NOT NULL, name VARCHAR(90), description TEXT, PRIMARY KEY(drug_id, name), FOREIGN KEY (drug_id) REFERENCES drugs (id))")
Run Code Online (Sandbox Code Playgroud)
DrugInteractions 表的一些示例数据:
drug_id name description
1 "Abciximab" "The risk or severity of bleeding can be increased when Abciximab is combined with Lepirudin."
1 "Aceclofenac" "The risk or severity of bleeding and hemorrhage can be increased …Run Code Online (Sandbox Code Playgroud)