表结构:
其中pid与id为自关联关系。
对应对象:
class Emp{
private int id;
private String name ;
private int pid;
private List<Emp> child;
}
需求:如表所示,需要将数据全部读取出来,封装成emp输出。(只需要最外层的对象)。
思路:利用java引用地址相同,一处变处处变的原理。循环两次得出最后结果。第一次循环将数据放进map,便于取出。二次循环组合数据。
代码:
public List<Emp> getList(){
//获取原始数据。
List<Emp> datas = empMapper.select();
//定于输出数据容器
List<Emp> reslut = new ArrayList();
//把数据封装进map
Map<Integer,Emp> map = new HashMap();
for (Emp e : datas){
map.put(e.getId,e)
}
for (Emp e : datas){
Emp e_p = map.get(e.getPid());
if(e_p != null){
List<Emp> child = e_p.getChild();
if(child == null){
child = new ArrayList<Emp>();
e_p.setChild(child);
}
child.add(e)
}else{
//将最外层的数据放进结果集中
reslut.add(e);
}
}
return reslut;
}