Nico Van Belle's approachResultSetExtractor
verwendet, ist ein Weg zu gehen, es sei denn Sie Collection<Student>
anstelle eines einzelnen Student
Objekt zurückkehren würde.
Bei der Implementierung von ResultSetExtractor<T>
gibt Spring das vollständige ResultSet (alle zurückgegebenen Zeilen aus der DB) zurück. Es liegt in Ihrer Verantwortung (und Freiheit), die Logik zu implementieren, wie die Daten/Objekte extrahiert werden, die Sie als (vollständiges) Ergebnis zurückgeben möchten. Und das Ergebnis ist ein einzelnes Objekt, z.B. Set oder List (von Student-Objekten).
ist hier ein grobes Beispiel:
new ResultSetExtractor<Collection<Student>>() {
@Override
public Collection<Student> extractData(ResultSet rs) throws SQLException, DataAccessException {
Map<Integer, Student> studentMap = new HashMap<>();
while(rs.next()){
Integer id = rs.getInt(0);
Student student = studentMap.get(id);
if (student == null) {
String name = rs.getString(1);
student = new Student(id, name); // additional constructor for Student class
studentMap.put(id, student);
}
student.addMark(rs.getInt(3));
}
return studentMap.values();
}
});
Im Beispiel jede Zeile einen anderen 'Id' hat und' Name', noch Ihre 'student' Klasse (die ** S ** tudent sein soll), hat ein einzelnes 'id' und 'name' Attribut. Wie können mehrere Zeilen in einen einzelnen "Student" passen? –
das war nur ein Beispiel tatsächlich kann es die gleichen Ids und Namen geben. @AndrewS –