2017-04-10 37 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()在沒有找到任何東西時正在返回什麼?空值?

回答