MyBatisPlus多表关联查询,返回list

需求:getAllMenusWithRole  获取所有菜单访问所需要的角色。

菜单和角色是多对多关系,有一个关联表,菜单去重,角色返回集合

public class MenuVO extends SysMenu {
    private List<SysRole> roles;
}

实现一

    @Select("select rm.menu_id,m.`name`,m.url from sys_role_menu as rm LEFT JOIN sys_menu as m on rm.menu_id = m.menu_id  GROUP BY rm.menu_id")
    @Results({
            @Result(column="menu_id",property="menuId"),
            @Result(column="menu_id",property="roles",
                    many=@Many(
                            select="com.XXX.mapper.SysRoleMapper.selectSysRoleByMenuId"
                    )
            )
    })
    List<MenuVO> getAllMenusWithRole();
    @Select("select * from sys_role as r where r.role_id in (select rm.role_id from sys_role_menu as rm where rm.menu_id = #{menuid})")
    List<SysRole> selectSysRoleByMenuId(@Param("menuid") Integer menuid);

标注方式,查询关联,缺点多次查库,@Results标注内,试过没有相关集合标注。其实也可用实现二中的sql,查询出来,自己在service层处理,搞成List

 

实现二

    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.XXX.entity.SysMenu">
        <id column="menu_id" property="menuId"/>
        <result column="name" property="name"/>
        <result column="url" property="url"/>
    </resultMap>

    <resultMap id="MenuWithRole" type="com.XXX.entity.MenuVO" extends="BaseResultMap">
        <collection property="roles" ofType="com.XXX.entity.SysRole">
            <id column="role_id" property="roleId"/>
            <result column="role_name" property="roleName"/>
            <result column="role_name_zh" property="roleNameZh"/>
        </collection>
    </resultMap>

    <select id="getAllMenusWithRole" resultMap="MenuWithRole">
        select
            m.*,r.role_id,r.role_name,r.role_name_zh
        from
            sys_menu m,sys_role_menu mr,sys_role r
        where
            m.menu_id=mr.menu_id and mr.role_id=r.role_id
        order by
            m.menu_id desc
    </select>

xml方式,用mybatis-plus能不用就不用xml文件,所以,是在标注没法实现,优点:查询一次

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我明白了。有关于mybatisplus多表关联查询的问题,我可以给你一些简单的解释和示例。 在mybatisplus中,可以通过注解或者XML来进行多表关联查询。其中,注解方式可以使用@JoinQuery注解。示例代码如下: ```java @Data public class User { private Long id; private String name; private Integer age; private String email; } @Data public class Order { private Long id; private Long userId; private String productName; private BigDecimal price; @TableField(exist = false) private User user; } @TableName("user") @Data public class UserVo extends User { @TableField(exist = false) private List<Order> orders; } public interface UserMapper extends BaseMapper<User> { @Select("SELECT * FROM user WHERE id=#{id}") @JoinQuery(value="test_order",entity=Order.class,on="user.id=order.user_id",type=JoinType.LEFT_JOIN,resultMap="userVo") UserVo getByIdWithOrder(@Param("id") Long id); } ``` 在这个例子中,我们定义了两个实体类:User和Order。然后,我们使用@JoinQuery注解对UserVo实体类进行关联查询关联查询的条件是user.id=order.user_id,使用了左连接(JoinType.LEFT_JOIN)。返回的结果使用了UserVo这个实体类封装。 这个例子中,我们查询了UserVo和Order两个表,返回了id为指定id的用户以及其所拥有的所有订单。 希望这个示例能够帮助你理解mybatisplus多表关联查询的实现方式。如果你有更多的问题,可以继续问我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值