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