概述
相信大家都会用分页插件或mybtais plus分页,相对来说多对多分页还是比较少见的,以下记录分享:
在一次角色管理的场景中,前端要求我把角色的列表和角色拥有的菜单id一并给他,这很明显是多对多的情况,但是在列表的情况下都是要分页的,于是写了一个联表查询,但前端告诉我添加的数据查不出来,经过排查发现mybais plus的分页是在联表查询的基础上进行的分页,于是有了下面这些操作;特此记录:
这里用的是mybtatis的插件,先配置下分页
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件
* @return
*/
@Bean
public MybatisPlusInterceptor paginationInnerInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor =new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return mybatisPlusInterceptor;
}
}
这里说明下场景:
- 角色表- role [记录角色信息]
- 角色菜单关系表- role_menu [记录角色和菜单的id]
- 菜单表- menu [记录菜单权限等信息]
我们主要查询角色和角色拥有的菜单,多对多
Mapper接口
/**
* 查询角色的信息
* @param page
* @return
*/
Page<RoleListVo> getRoleListInfo(Page<RoleListVo> page);
映射实体类:
/**
* @author: MR.rp
* @Date: 2021/12/23
* @Description:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RoleListVo extends Role {
@ApiModelProperty("菜单id")
private List<Integer> menuIds;
}
/**
* <p>
* 用户角色表
* </p>
*
* @author MR.RP
* @since 2021-12-14
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="Role对象", description="用户角色表")
@AllArgsConstructor
@NoArgsConstructor
public class Role implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty(value = "部门id")
private Integer departmentId;
@ApiModelProperty(value = "角色名")
private String name;
@ApiModelProperty(value = "是否删除")
@TableField(fill = FieldFill.INSERT)
@TableLogic
private Integer isDel;
@ApiModelProperty(value = "描述")
private String remarks;
@ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
@ApiModelProperty(value = "更新时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;
}
<!-- 通用查询映射结果 -->
<resultMap id="RoleListInfoResultMap" type="com.rubik.huaxianzi.entity.vo.RoleListVo">
<id column="id" property="id" />
<result column="department_id" property="departmentId" />
<result column="name" property="name" />
<result column="is_del" property="isDel" />
<result column="remarks" property="remarks" />
<result column="gmt_create" property="gmtCreate" />
<result column="gmt_modified" property="gmtModified" />
<collection property="menuIds" ofType="int" column="id" select="selectMenu">
<result column="menu_id"/>
</collection>
</resultMap>
<select id="getRoleListInfo" resultMap="RoleListInfoResultMap">
select role.* from role where is_del = 0
</select>
<select id="selectMenu" resultType="int">
select menu.id as menu_id from menu
inner join role_menu on menu.id = role_menu.menu_id
where role_menu.role_id = #{id}
</select>
我们试着用接口调用一下:
总结:
我们在查询时将查询sql拆分成两个,以传参的形式,以column字段传入,传入后写入关联的sql关系即可;
最后
以上就是可爱裙子为你收集整理的mybatis plus多对多场景分页的全部内容,希望文章能够帮你解决mybatis plus多对多场景分页所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复