一个hibernate createQuery()prep语句

时间:2017-04-10 18:56:46

标签: java sql hibernate dao

我为我的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类的每个DAO使用不同参数的方法。

因此,例如,UserDAO将使用参数column =“userName”和input = userName.getText()<这是一个文本域。

RecordDAO可以将它与column = recordName和input =“beatles”

一起使用

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

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

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

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

  4. 当找不到任何内容时,getSingleResult()返回的内容是什么? NULL?

1 个答案:

答案 0 :(得分:3)

1。)是的,你可以。

2。)是的。否。

3.)取决于您的具体用例。

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

  

NoResultException - 如果没有结果