最近在做一个项目,表头数量不确定,动态的增加或者减少。考虑到在数据库做行转列可能性能有点差,就转到Java中转换。
数据库中展示如下
后台代码实现
public <T>List convert(Class<T> clazz,List<T> list){
List<List> result;
Field[] fields = clazz.getDeclaredFields();
result = new ArrayList<>(fields.length);
for (int i = 0; i < fields.length; i++) {
result.add(new ArrayList());
}
for (T t : list) {
for (int i = 0; i < fields.length; i++) {
List l = result.get(i);
Field field = fields[i];
field.setAccessible(true);
try {
l.add(field.get(t));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return result;
}
这是测试的实体类
public class UserInfo {
private int userId;
private String password;
private String usernname;
private String truename;
private Date registdate;
//ignore getter and setter
}
请注意测试实体类的顺序,因为这个会影响最后输出时的顺序
/**
* 通过反射,将获取到的值,进行行转列
* @return
*/
@GetMapping("convert")
public List convert(){
List<UserInfo> userInfoList = userInfoMapper.selectAll();
return convert(UserInfo.class,userInfoList);
}
最后,在前段展示的数据
[
[1, 2, 3],
[null, null, null],
["张三", "李四", "Tom"],
["狗剩", "王八蛋", "Jue"],
["2019-01-18T06:00:00.000+0000", "2019-01-18T06:00:00.000+0000", "2019-01-17T06:00:00.000+0000"]
]
这个顺序是与实体类中的顺序是一致的。转换成功!
网友评论