问题描述
我正在为我的应用程序使用 Spring Boot。使用 jdbctemplate 运行 MysqL 查询。
query = "Select * from users";
List<Map<String,Object>> response = jdbcTemplate.queryForList(query);
当前输出:
[
{
"id": 1,"firstname": "Sam","address": "US"
},{
"id": 2,"firstname": "Alex","address": "US"
}
]
我想使用 jdbctemplate 返回如下输出。 jdbctemplate 中是否有任何方法可以返回如下输出?
预期输出:
[
[
"id"
"firstname"
"address"
],[
1,"Sam","US"
],[
2,"Alex","US"
]
]
解决方法
您可以利用 ResultSetExtractor
将 ResultSet
映射到所需的响应结构中。可以从 ResultSet
的元数据中检索列:rs.getMetadata()
。
ResultSetExtractor<List<List<Object>>> resultSetExtractor = new ResultSetExtractor<>() {
@Override
public List<List<Object>> extractData(ResultSet rs) throws SQLException,DataAccessException {
List<List<Object>> result = new ArrayList<>();
List<Object> columnNames = new ArrayList<>();
result.add(columnNames);
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
for (int col = 1; col <= columnCount; col++) {
String columnName = rsmd.getColumnName(col);
columnNames.add(columnName);
}
while (rs.next()) {
List<Object> row = new ArrayList<>();
result.add(row);
for (int col = 1; col <= columnCount; col++) {
Object value = rs.getObject(col);
row.add(value);
}
}
return result;
}
};
return jdbcTemplate.query("Select * from user",resultSetExtractor);