有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java调用hibernate createQuery()prep语句

我为我的通用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()方法,允许每个扩展抽象泛型DAO类的DAO使用具有不同参数的方法

例如,UserDAO将使用这个方法,参数为column=“userName”和input=userName。getText()<;这是一个文本字段

RecordDAO可以将其与column=recordName和input=“beatles”一起使用

我对这种方法有几个问题

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

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

  3. 有没有更有效的方法来创建这样一个通用的find()方法

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


共 (1) 个答案

  1. # 1 楼答案

    1.)是的,你可以

    2.)对没有

    3.)取决于你的具体用例是什么

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

    NoResultException - if there is no result