2017-04-10 46 views
1

我做了这个方法对我的通用DAO休眠的createQuery()准备发言

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可以用柱= recordName和输入=“甲壳虫”

我对这种方法的几个问题使用它。

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

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

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

  4. getSingleResult()在没有找到任何东西时正在返回什么?空值?

回答