基于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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值