版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ypp91zr/article/details/82856851
今天在做权限的时候用到了2级association,association里面还有一级association,废话不多说。贴代码
<resultMap type="com.pinyu.system.entity.PermissionEntity" id="baseResultMap">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="code" property="code"/>
<result column="url" property="url"/>
<result column="type" property="type"/>
<result column="menu_id" property="menuId"/>
<association property="menu" javaType="com.pinyu.system.entity.MenuEntity" column="{id=menu_id}" select="findMenu">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="icon" property="icon"/>
<result column="url" property="url"/>
<result column="level" property="level"/>
<result column="parent_id" property="parentId"/>
<result column="sort" property="sort"/>
<association property="parent" javaType="com.pinyu.system.entity.MenuEntity" column="{id=parent_id}" select="findMenu">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="icon" property="icon"/>
<result column="url" property="url"/>
<result column="level" property="level"/>
<result column="parent_id" property="parentId"/>
<result column="sort" property="sort"/>
</association>
</association>
</resultMap>
<select id="findPermissionByRoleId" parameterType="java.lang.Integer" resultMap="baseResultMap">
select p.* from sys_role_permission rp,sys_permission p where rp.role_id=#{roleId} and rp.permission_id=p.id;
</select>
<select id="findMenu" resultType="com.pinyu.system.entity.MenuEntity">
select * from sys_menu where id = #{id}
</select>
先说明下情况:PermissionEntity是按钮级别的权限,MenuEntity是菜单,PermissionEntity关联了MenuEntity的id,MenuEntity里面还有上一级父菜单,下一级子菜单先不说。
最开始是以上代码,可以查询到第一级association里面的menu的信息,以为menu里面还有一级父菜单,于是往里面再添加了一个association,但是最终结果menu里面的parent_id和parent始终是取不到的,不知道是写法不对还是什么,有知道的还望告知,十分感谢。
编译也不报错,启动也不报错,查询也不报错。后来找了半个小时实在没找到错误在哪里?就换方式了
换成了以下方式,先把PermissionEntity关联的菜单一并查出来再通过parent_id去查询父菜单。
代码:
<resultMap type="com.pinyu.system.entity.PermissionEntity" id="menuMap">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="code" property="code"/>
<result column="url" property="url"/>
<result column="type" property="type"/>
<result column="menu_id" property="menuId"/>
<association property="menu" javaType="com.pinyu.system.entity.MenuEntity">
<result column="mid" property="id"/>
<result column="mname" property="name"/>
<result column="micon" property="icon"/>
<result column="murl" property="url"/>
<result column="mlevel" property="level"/>
<result column="msort" property="sort"/>
<result column="mparentId" property="parentId"/>
<association property="parent" javaType="com.pinyu.system.entity.MenuEntity" column="{id=mparentId}" select="findMenu">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="icon" property="icon"/>
<result column="url" property="url"/>
<result column="level" property="level"/>
<result column="parent_id" property="parentId"/>
<result column="sort" property="sort"/>
</association>
</association>
</resultMap>
<select id="findMenu" resultType="com.pinyu.system.entity.MenuEntity">
select * from sys_menu where id = #{id}
</select>
<select id="findPermissionByRoleId" parameterType="java.lang.Integer" resultMap="menuMap">
select p.*,m.id mid,m.name mname,m.icon micon,m.level mlevel,m.parent_id mparentId,m.sort msort,m.url murl
from sys_role_permission rp,sys_permission p,sys_menu m
where rp.role_id=#{roleId} and rp.permission_id=p.id and p.menu_id=m.id;
</select>
做个记录,以免以后遇到浪费时间。
第一种如果有大神知道的,真心希望告知。十分感谢 !