mybatis怎么做到二级级联查询?

vincent201201 2014-03-04 02:29:04
做权限管理时候,菜单会有三级或者四级的情况。

pojo类代码片段如下:
public class Privilege implements Serializable{
private Long id;
private String name;
...
private List<Privilege> subPrivilege;

public List<Privilege> getSubPrivilege() {
return subPrivilege;
}
public void setSubPrivilege(List<Privilege> subPrivilege) {
this.subPrivilege = subPrivilege;
}
...


映射map片段如下:
<resultMap type="com.pojo.Privilege" id="privilege">
<id column="PRIVILEGE_ID" property="id" />
<result column="PRIVILEGE_NAME" property="name" />
<result column="PRIVILEGE_PARENT" property="parentId" />
<result column="PRIVILEGE_URL" property="url" />
<result column="PRIVILEGE_LEVEL" property="level" />
</resultMap>

<resultMap type="com.pojo.Privilege" id="subMap" extends="privilege">
<collection property="subPrivilege" ofType="com.pojo.Privilege" column="PRIVILEGE_ID" select="getSubPriv"/>
</resultMap>

<select id="getSubPriv" parameterType="long" resultMap="privilege">
select p.* from PRIVILEGE p where p.PRIVILEGE_PARENT=#{id} order by p.PRIVILEGE_ID asc
</select>


service实现类中的代码片段如下:
public List<Privilege> getAllPrivilegeList() {
List<Privilege> firstLevelPrivilege = privilegeDao.getFirstPrivilegeList();
List<Privilege> allPrivList = new ArrayList<Privilege>();
if(firstLevelPrivilege != null && firstLevelPriv.size() != 0){
this.mergeSubPrivilege(allPrivList,firstLevelPriv);
}
return allPrivList;
}
private void mergeSubPrivilege(List<Privilege> allPrivList, List<Privilege> currPrivList) {
for (Privilege sub_priv : currPrivList) {
allPrivList.add(sub_priv);
if (sub_priv.getSubPrivilege() != null && sub_priv.getSubPrivilege().size() != 0) {
mergeSubPrivilege(allPrivList, sub_priv.getSubPrivilege());
}
}
}


问题就在这个service方法上。用递归调用组装allPrivList集合。debug发现只有PRIVILEGE_LEVEL为一级时候。他的subPrivilege集合属性能够查出来。再往下级递归的时候subPrivilege就都为null了。所以在页面上只能显示到二级目录,而三级,四级的出不来。以前项目都是用的hibernate,级联很方便。初次使用mybatis,摸索中前行。请高人指点!
...全文
318 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
mybatis是轻量级的框架,自己写sql语言完成各种功能,但个人觉得二级查询或三四级查询,mybatis不太方便,当然也能做,也是自动封装到list中,觉得挺麻烦,去网上找一下吧,很多的例子。另外做权限管理时,你也可以在程序中进行递归,不过性能不一定多好,但想想权限这东西也就这么十几条几十条的数据,这么做完全可以,性能影响并不明显。。。
vincent201201 2014-03-05
  • 打赏
  • 举报
回复
额。。木有人帮忙吗
  • 打赏
  • 举报
回复
引用 3 楼 vincent201201 的回复:
[quote=引用 2 楼 hjw506848887 的回复:] mybatis是轻量级的框架,自己写sql语言完成各种功能,但个人觉得二级查询或三四级查询,mybatis不太方便,当然也能做,也是自动封装到list中,觉得挺麻烦,去网上找一下吧,很多的例子。另外做权限管理时,你也可以在程序中进行递归,不过性能不一定多好,但想想权限这东西也就这么十几条几十条的数据,这么做完全可以,性能影响并不明显。。。
恩,暂时没找到通过配置xml多级递归的方法,自己手写的递归方法和sql。先实现着。用空再深研究[/quote]mybatis肯定级联查询,有一个元素association,你查一下文档吧。。。不过这么做有时候不太灵活,所以我很少用。。。
vincent201201 2014-03-05
  • 打赏
  • 举报
回复
引用 2 楼 hjw506848887 的回复:
mybatis是轻量级的框架,自己写sql语言完成各种功能,但个人觉得二级查询或三四级查询,mybatis不太方便,当然也能做,也是自动封装到list中,觉得挺麻烦,去网上找一下吧,很多的例子。另外做权限管理时,你也可以在程序中进行递归,不过性能不一定多好,但想想权限这东西也就这么十几条几十条的数据,这么做完全可以,性能影响并不明显。。。
恩,暂时没找到通过配置xml多级递归的方法,自己手写的递归方法和sql。先实现着。用空再深研究

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧