实现思路
每一个记录都有其父类id,还有是否为叶子节点
首先查找出两个根节点
然后打印,接着调用print方法
try {
List<Tree> list = sqlMap.queryForList("getNode");
for(Tree tt :list) {
System.out.println(tt.getBname());
print(tt,1);
}
} catch (SQLException e) {
e.printStackTrace();
}
Print方法中,首先是根据level等级来判断打印多少个横线
根据传入的父记录,根据它的id,去查找它的孩子记录--这里用到了自连接,详见映射文件
找到的孩子记录扔循环遍历
用每一个记录,再递归的使用打印方法
如果这个记录已经是叶子节点了,就没必要再打印了
public void print(Tree t,int level){
String preStr="";
for(int i=0;i<level;i++){
preStr+="----";
}
try {
List<Tree> list = sqlMap.queryForList("getBook",t.getId());
for(Tree tt : list) {
System.out.println(preStr+tt.getBname());
if(tt.getIsleaf() != "F") {
print(tt,level+1);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
SQLMAP映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"./sql-map-2.dtd">
<sqlMap>
<select id="getNode" resultClass="model.Tree">
select * from book_menu where pid=0
</select>
<select id="getBook" resultClass="model.Tree" parameterClass="int">
select a.id ,a.bname,a.pid,a.isleaf from book_menu a inner join book_menu b on a.pid = b.id where b.id=#id#
</select>
</sqlMap>