休眠 createQuery() 准备语句

a hibernate createQuery() prep statement

我已经为我的 Generic DAO 创建了这个方法

public T find(String column, String input) {
    Query query = em.createQuery("select e from " + type.getSimpleName()+ " e where e."+
    ":column = :input").setParameter("input", input).setParameter("column", column);
    return (T)query.getSingleResult();
}

它应该是一个通用的 find() 方法,它允许扩展抽象 genericDAO class 的每个 DAO 使用具有不同参数的此方法。

因此,例如,UserDAO 会将此方法与参数 column = "userName" 和 input = userName.getText() < this is a textfield.

RecordDAO 可以将其与 column = recordName 和 input = "beatles"

一起使用

我对这个方法有几个问题。

  1. 它会像现在这样工作吗?我的 creatQuery 中可以有 2 个 setParameter() 方法和参数吗?

  2. 在此代码中使用 setParameter 是否有助于代码变得更安全?当有人在程序的文本字段框中输入 SQL 代码而不是用户名时,是否仍然能够进行 SQL 注入攻击?

  3. 有没有更有效的方法来制作像这样的多功能 find() 方法?

  4. 没有找到时 getSingleResult() 返回什么?空?

1.) 是的,你可以。

2.) 是的。编号

3.) 取决于您的确切用例。

4.) 您可以查看javadoc of Query#getSingleResult。提示:

NoResultException - if there is no result