我想将多行映射到一个对象中。这是我的结果集
Id Name Marks
1 A 34
2 b 35
我的类(class)是这样的:
public class student {
int id;
String name;
List <Integer> marks;
}
我尝试使用 RowMapper,但那是针对行和对象之间的 1:1 关系。请建议我实现这一目标的正确方法?
提前致谢。
最佳答案
Nico Van Belle's approach使用ResultSetExtractor
是一条路要走,除非你会返回 Collection<Student>
而不是单个Student
目的。
实现 ResultSetExtractor<T>
时,Spring 为您提供完整的 ResultSet(所有从数据库返回的行)。您有责任(和自由)实现如何提取您希望作为(完整)结果返回的数据/对象的逻辑。结果是单个对象,例如(学生对象的)集合或列表。
这是一个粗略的示例:
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();
}
});
关于java - 如何在单个对象中映射多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42140770/