Mybatis collection 镶套collection 实现菜单功能

collection 里面镶套 collection,
这里通过 在collection里面添加resultMap,
在新的resultMap 里面添加新的collection,
看代码:

表的关系

roleinfo(角色信息) 1对多 menuinfo(菜单信息) 	
menuinfo 菜单有子菜单 要自查询

roleinfo 的pojo

get() set() 方法省略了

public class RoleInfo {
    int roleid;
    String rolename;
    String shortname;
    List<MenuInfo> menuInfoList;
    }

menuinfo 的pojo

public class MenuInfo {
    int mid;
    String menuName;
    int parentid;
    List<MenuInfo> childMenus;
}

xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.RoleInfoMapper">
<!--     获取角色信息-->
    <resultMap id="getRoleInfo" type="com.qf.pojo.RoleInfo">
        <id column="roleid" property="roleid"></id>
        <result column="rolename" property="rolename"></result>
        <result column="shortname" property="shortname"></result>
<!--        collection镶套-->
        <collection property="menuInfoList" javaType="java.util.ArrayList" ofType="com.qf.pojo.RoleInfo"
        resultMap="menuParent" columnPrefix="m1_">
    </resultMap>

    <resultMap id="menuParent" type="com.qf.pojo.MenuInfo">
        <id column="mid" property="mid"></id>
        <result column="menuname" property="menuName"></result>
        <collection property="childMenus" javaType="java.util.ArrayList" ofType="com.qf.pojo.MenuInfo"
                    resultMap="menuChild" columnPrefix="m2_"></collection>
    </resultMap>
<!--     菜单下的子菜单-->
    <resultMap id="menuChild" type="com.qf.pojo.MenuInfo">
        <result column="mid" property="mid"></result>
        <result column="menuname" property="menuName"></result>
    </resultMap>
    <select id="getAllInfo" resultMap="getRoleInfo">
        select r.roleid,r.rolename,r.shortname,m1.mid m1_mid,m1.menuname m1_menuname,
        m2.menuname m1_m2_menuname from roleinfo r
        inner join role_menu rm on rm.roleid=r.roleid
        inner join menuinfo m1 on m1.mid = rm.mid
        inner join menuinfo m2 on m2.parentid = m1.mid
    </select>

</mapper>

这里菜单自查询时,通过m1_给主菜单起别名
m2_ 给子菜单起别名
子菜单的别名 需要加上父菜单的m1_

sql 语句

select r.roleid,r.rolename,r.shortname,m1.mid m1_mid,m1.menuname m1_menuname,m2.menuname m1_m2_menuname from roleinfo r
        inner join role_menu rm on rm.roleid=r.roleid
        inner join menuinfo m1 on m1.mid = rm.mid
        inner join menuinfo m2 on m2.parentid = m1.mid
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值