休眠 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"
一起使用
我对这个方法有几个问题。
它会像现在这样工作吗?我的 creatQuery 中可以有 2 个 setParameter() 方法和参数吗?
在此代码中使用 setParameter 是否有助于代码变得更安全?当有人在程序的文本字段框中输入 SQL 代码而不是用户名时,是否仍然能够进行 SQL 注入攻击?
有没有更有效的方法来制作像这样的多功能 find() 方法?
没有找到时 getSingleResult() 返回什么?空?
1.) 是的,你可以。
2.) 是的。编号
3.) 取决于您的确切用例。
4.) 您可以查看javadoc of Query#getSingleResult。提示:
NoResultException - if there is no result
我已经为我的 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"
一起使用我对这个方法有几个问题。
它会像现在这样工作吗?我的 creatQuery 中可以有 2 个 setParameter() 方法和参数吗?
在此代码中使用 setParameter 是否有助于代码变得更安全?当有人在程序的文本字段框中输入 SQL 代码而不是用户名时,是否仍然能够进行 SQL 注入攻击?
有没有更有效的方法来制作像这样的多功能 find() 方法?
没有找到时 getSingleResult() 返回什么?空?
1.) 是的,你可以。
2.) 是的。编号
3.) 取决于您的确切用例。
4.) 您可以查看javadoc of Query#getSingleResult。提示:
NoResultException - if there is no result