基于iBatis树状打印

实现思路

每一个记录都有其父类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>


你可能感兴趣的:(基于iBatis树状打印)