Die Zuordnung eines JDBC-ResultSet auf ein Objekt
Ich habe eine user-Klasse, hat 16 Attribute, Dinge wie Vorname, Nachname, Geburtsdatum, username, Passwort etc... Diese sind alle in einer MySQL Datenbank abgelegt und wenn ich Sie abrufen möchten, und die Benutzer verwende ich ein ResultSet. Ich möchte eine Karte der Spalten wieder auf die Benutzer-Attribute, aber die Art, wie ich Tue, es scheint furchtbar ineffizient.
Zum Beispiel bin ich dabei:
//ResultSet rs;
while(rs.next()) {
String uid = rs.getString("UserId");
String fname = rs.getString("FirstName");
...
...
...
User u = new User(uid,fname,...);
//ArrayList<User> users
users.add(u);
}
ich.e I abrufen der Spalten und erstellen Sie Benutzer-Objekte nach dem einfügen alle Werte in der Spalte in der Benutzer-Konstruktor.
Kennt jemand eine schneller, ordentlicher, Art, dies zu tun?
das, was du meinst. in effizient ? ist es zu viel Zeit
Check-out Spring JDBC-template und seiner bean-Mapper
Es gibt eine Menge tools, die diese Art von Aufgabe viel einfacher. Ich denke, die besten sind sql2o, JDBI und jOOQ
Link
Check-out Spring JDBC-template und seiner bean-Mapper
Es gibt eine Menge tools, die diese Art von Aufgabe viel einfacher. Ich denke, die besten sind sql2o, JDBI und jOOQ
Link
InformationsquelleAutor Quanqai | 2014-02-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Keine Notwendigkeit der Speicherung der Ergebnismenge, die Werte in einen String und wieder Einstellung in den POJO-Klasse. Stattdessen setzen sich an die Zeit, die Sie abrufen.
Oder beste Weg Schalter, ORM-tools wie hibernate anstatt JDBC, welche Karten Ihr POJO-Objekt direkt auf der Datenbank.
Aber jetzt diese:
InformationsquelleAutor Shoaib Chikate
Wenn Sie nicht möchten, zu verwenden JPA-provider wie openJPA oder hibernate, Sie können nur apache dbutils versuchen.
http://commons.apache.org/proper/commons-dbutils/examples.html
dann Ihr code wird wie folgt Aussehen
InformationsquelleAutor Leo
Nehmen wir an, Sie verwenden möchten, core Java, w/o jeder strategischen Rahmenbedingungen. Wenn Sie garantieren können, dass Feld Namen einer Entität entspricht der Spalte in der Datenbank, können Sie mithilfe der Reflection-API (sonst annotation erstellen und definieren von mapping-name dort)
Durch FieldName
Durch annotation
DTO:
Gleiche, aber
Gedanken
In der Tat, der Iteration über alle Felder könnte scheinen unwirksam, so würde ich ladenplanung irgendwo, anstatt zu iterieren, jedes mal. Allerdings, wenn unsere
T
ist ein DTO mit nur dem Zweck der übertragung von Daten und nicht enthalten Lasten von unnötigen Feldern, das ist ok. Am Ende ist es viel besser als die Verwendung von vorformulierten Methoden alle Weg.Hoffe, das jemand hilft.
InformationsquelleAutor TEH EMPRAH
Komplette Lösung mit @TEH-EMPRAH Ideen und Generische Umwandlung von Cast Object to Generischer Typ für die Rückgabe
und dann in Bezug auf, wie man es knüpft an die Datenbank habe ich folgende:
InformationsquelleAutor Christian
Use-Anweisung Fetch-Größe , wenn Sie mehr abrufen Anzahl der Datensätze. wie diese.
Abgesehen davon, dass ich nicht sehen ein Problem mit der Art und Weise, die Sie tun, in Bezug auf Leistung
In Bezug auf die Neat. Verwenden Sie immer separate Methode delegieren, um anzeigen der Ergebnismenge zu POJO-Objekt. die später wiederverwendet werden können in der gleichen Klasse
wie
Wenn Sie den gleichen Namen für beide columnName und Objekt fieldName , man könnte auch schreiben, Reflexion Dienstprogramm zum laden der Datensätze zurück zum POJO. und verwenden Sie Metadaten zu Lesen, die columnNames . aber für kleine Projekte mit der spiegelung ist kein problem. aber wie ich schon sagte es ist nichts falsch mit der Art, wie Sie tun.
InformationsquelleAutor Mani
ist es möglich?
versuchen Sie, resultMap definiert in Mybatis xml, und klicken Sie dann konvertieren die JDBC-native ResultSet Liste von einigen MyBatis-Funktion
InformationsquelleAutor Jacky Zhang