2009年4月20日星期一

ADF实现树状查询

最近项目遇到要用start with connect by做树状查询,即:选择一个部门老大,要把老大下面的小老大和各个小弟全查出来,ADF貌似没有提供这类查询(至少我没发现,呵呵,如果有那就更好了,可以不给下面看了),这个办法不一定最好,但是,绝对可以实现,~~
1.数据库里面表的结构示例:
user(userid username PanrentId)
2.建VO的sql
2_1)如果你能知道你要查询的最顶层user的userid,那么你可以这样建VO,绑定一个参数p_userId,默认值就是最顶层的user的userid;VO上面的sql为:
select * from user start with userid=:p_userId connect by prior parent_id = user_id
2_2)如果你不知道你要查询的最顶层user的userid,那么你可以这样建VO,绑定一个参数p_userId,默认值就是最顶层的user的userid;VO上面的sql为:
select * from user start with userid in (select userid from (select userid, 1 flag from users union all select :p_userId, 2 flag from dual) where flag = decode(:p_userId, null, 1, 2) ) connect by prior parent_id = user_id

这样,如果用户没有输入查询参数,查出来的就是全部;如果用户输入了查询参数,把用户输入的userid在manageBena或者vo实现类里面赋值给VO上面的绑定参数

0 评论:

发表评论