2017-04-10 1 views
1

ich diese Methode für meine Allgemein DAO gemacht habenein Hibernate Create() prep Anweisung

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(); 
} 

Es soll ein allgemeiner find() Methode sein, die jede DAO ermöglicht, die die abstrakte genericDAO Klasse erweitert zu verwenden diese Methode mit verschiedenen Parametern.

So zum Beispiel würde der UserDAO diese Methode mit den Argumenten column = "userName" und input = userName.getText() verwenden < Dies ist ein Textfeld.

A RecordDAO könnte es mit Spalte verwenden = record und input = "beatles"

Ich habe ein paar Fragen zu diesem Verfahren.

  1. wird es funktionieren, wie es jetzt ist? Kann ich in meiner creatQuery 2 setParameter() -Methoden und -Parameter haben?

  2. Wird setParameter in diesem Code verwendet, um den Code sicherer zu machen? Kann jemand noch einen SQL-Injection-Angriff durchführen, wenn er im Feld Textfeld des Programms SQL-Code anstelle eines Benutzernamens eingibt?

  3. Gibt es eine effizientere Möglichkeit, eine vielseitige find() -Methode wie diese zu erstellen?

  4. Was wird von getSingleResult() zurückgegeben, wenn nichts gefunden wird? NULL?

Antwort

3

1.) Ja, Sie können.

2.) Ja. Nr.

3.) Hängt davon ab, was genau Ihr Anwendungsfall ist.

4.) Sie können die javadoc of Query#getSingleResult überprüfen. Hinweis:

NoResultException - wenn es kein Ergebnis

Verwandte Themen