Hallo Zusammen,

im vorherigen Post "Beispiel: Zugriff auf Entitäten" habe ich versucht zu zeigen wie wir auf Entitäten zugreifen, Datensätze speichern, Datensätze updaten und löschen können.

Jetzt versuchen wir mithilfe des EntityManager und der Java Persistence Query Language (kurz JPQL) einen einfachen Login zu bauen.
JPQL ähnelt SQL hierbei, die Schreibweise ist dabei vereinfacht.

Wir gehen für unser Beispiel von der Loginmaske aus die im ersten Tutorialvideo von XDEV erstellt wurde. Diese hatte ein textField für den Benutzernamen, ein passwordField für das Passwort und einen Button der unseren Code nach einem Klick ausführen soll.

Des weiteren werde ich bei diesem Post wieder von der Datenbank "Beispiel" und der darin angelegten Tabelle "Benutzer" ausgehen.

Zunächst versehen wir unseren Button mit einem buttonClick-Event in das wir unseren Code für den Login schreiben.

Dann benötigen wir um auf unsere Entität zugreifen zu können einen EntityManager.

// Erstellen einer EntityManagerFactory emf
EntityManagerFactory emf = Persistence.createEntityManagerFactory("BeispielAn wendung");

// Erstellen eines EntityManagers em
EntityManager em = emf.createEntityManager();

Außerdem brauchen wir die Eingaben die in unserer Login-GUI gemacht wurden.

// Speichern der Eingabe von textField
String nameEingabe = textField.getValue();

// Speichern der Eingabe von passwordField (Der Einfachheit zugunsten als String)
String passwortEingabe = passwordField.getValue();

Nun können wir einen Query in JPQL mit zwei Parametern formulieren und das Ergebnis mit unseren Eingaben vergleichen.
JPQL wird hauptsächlich für Abfragen(SELECT) genutzt, die INSERT-Anweisung gibt es beispielsweise überhaupt nicht, dafür sollen wir wie zuvor gelernt persist() und merge() des EntityManagers benutzt werden.

Man kann sich den Aufbau eines Query in JPQL der alle Datensätze zurückliefert wie folgt vorstellen:
SELECT Object(b) FROM Benutzer AS b

Auf Object und AS wird bei der schreibweise dann verzichtet:
SELECT b FROM Benutzer b

Um nur bestimmte Spalten zu erhalten, kann wie bei SQL mithilfe eines Punktes und dem Spaltennamen zugegriffen werden:
SELECT b.bName FROM Benutzer b

Parameter werden im Query mit :Parametername angegeben
und später mit der Methode .setParameter(Parametername, Inhalt); gesetzt:

SELECT b FROM Benutzer b WHERE b.bName = :eingabe
query.setParameter("eingabe", "Max");

Konkret für unser Beispiel würde der Query wie folgt aussehen:

// Erstellen eines Query mit zwei Parametern
Query q = em.createQuery("SELECT b FROM Benutzer b WHERE b.bName = :eingabe1 AND b.bPasswort = :eingabe2");
q.setParameter("eingabe1", nameEingabe);
q.setParameter("eingabe2", passwortEingabe);


// Überprüfen ob unser Query ein Result gefunden hat
try{
if (q.getSingleResult() != null) {

System.out.println("Login erfolgreich");

}
}catch(Exception e){

System.out.println("Login fehlgeschlagen");

}
}


Dies ist ein sehr vereinfachtes Beispiel um die Grundlagen des EntityManagers und der JPQL zu zeigen. Sicherheitsaspekte werden zunächst außer Acht gelassen.


Ich hoffe ich konnte damit helfen und wünsche viel Spass beim weiteren Einarbeiten in den Xdev GWT Builder.

Gruß

Adriano