mybatis association再嵌套association使用问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 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>

做个记录,以免以后遇到浪费时间。

第一种如果有大神知道的,真心希望告知。十分感谢 !

猜你喜欢

转载自blog.csdn.net/ypp91zr/article/details/82856851