Zuordnen eines JDBC ResultSet zu einem Objekt

9

Ich habe eine Benutzerklasse, die 16 Attribute hat, Dinge wie Vorname, Nachname, Dob, Benutzername, Passwort etc ... Diese sind alle in einer MySQL-Datenbank gespeichert und wenn ich Benutzer abrufen möchte, verwende ich ein ResultSet. Ich möchte jede der Spalten den Benutzerattributen zuordnen, aber die Art und Weise, wie ich es tue, scheint furchtbar ineffizient zu sein. Zum Beispiel mache ich:

%Vor%

d. h. ich lade alle Spalten ab und erstelle dann Benutzerobjekte, indem ich alle Spaltenwerte in den Benutzerkonstruktor einfüge.

Kennt jemand eine schnellere, sauberere Art, dies zu tun?

    
Quanqai 22.02.2014, 15:04
quelle

6 Antworten

6

Es ist nicht notwendig, resultSet-Werte in String zu speichern und erneut in die POJO-Klasse zu setzen. Stattdessen auf die Zeit eingestellt, die Sie abrufen.

Oder wechseln Sie am besten zu ORM-Tools wie Hibernate statt JDBC, die Ihr POJO-Objekt direkt auf die Datenbank abbilden.

Aber ab sofort verwenden Sie das:

%Vor%     
Shoaib Chikate 22.02.2014, 15:07
quelle
22

Wenn Sie keinen JPA-Provider wie openJPA oder Hibernate verwenden möchten, können Sie Apache dbutils einfach ausprobieren.

Ссылка

dann wird Ihr Code wie folgt aussehen

%Vor%     
Leo 22.02.2014 15:20
quelle
2

Nehmen wir an, Sie möchten Core-Java ohne strategische Frameworks verwenden. Wenn Sie garantieren können, dass der Feldname einer Entität der Spalte in der Datenbank entspricht, können Sie die Reflection-API verwenden (andernfalls erstellen Sie eine Annotation und definieren dort den Mapping-Namen)

Nach Feldname

%Vor%

Nach Anmerkung

%Vor%

DTO:

%Vor%

Gleich, aber

%Vor%

Gedanken

Tatsächlich scheint die Iteration über alle Felder unwirksam zu sein, so dass ich Mapping irgendwo speichern würde, anstatt jedes Mal zu iterieren. Wenn unser T jedoch ein DTO ist, der nur Daten übertragen soll und keine unnötigen Felder enthält, ist das in Ordnung. Am Ende ist es viel besser als die Verwendung von Standardmethoden.

Hoffe das hilft jemandem.

    
TEH EMPRAH 22.09.2017 07:57
quelle
1

Komplette Lösung mit @ TEH-EMPRAH Ideen und Generic Casting von Cast Object to Generischer Typ für die Rückgabe

%Vor%

und dann in Bezug darauf, wie es mit der Datenbank verknüpft ist, habe ich folgendes:

%Vor%     
Christian 31.12.2017 16:48
quelle
0

Benutze Anweisung Fetch Size, wenn mehr Datensätze abgerufen werden sollen. so.

%Vor%

Abgesehen davon sehe ich kein Problem mit der Art und Weise, wie Sie hinsichtlich der Leistung vorgehen

In Bezug auf ordentlich. Verwenden Sie immer einen separaten Methoden-Delegaten, um das Resultset dem POJO-Objekt zuzuordnen. die später in derselben Klasse wiederverwendet werden können

wie

%Vor%

Wenn Sie sowohl für columnName als auch für den fieldName des Objekts den gleichen Namen haben, können Sie auch reflection utility schreiben, um die Datensätze zurück in POJO zu laden. und benutze MetaData, um die columnNames zu lesen. Aber für kleine Projekte ist Reflektion kein Problem. Aber wie ich schon sagte, es ist nichts falsch mit der Art, wie Sie es tun.

    
Mani 22.02.2014 15:14
quelle
0

ist es möglich? Versuchen Sie, resultMap in MyBatis 'XML zu definieren, und konvertieren Sie dann das native JDBC-ResultSet in eine Liste mit einer MyBatis-Funktion

    
Jacky Zhang 24.08.2016 18:37
quelle

Tags und Links