MyBatis

您所在的位置:网站首页 mybatis-plus分页不生效 MyBatis

MyBatis

2023-02-18 17:30| 来源: 网络整理| 查看: 265

MyBatis_Plus联表分页查询

当我们需要关联表格分页查询时,MyBatis_plus封装的单表方法已经满足不了我们的需求了,那么我们需要进行联表分页查询

假设我们需要的 SQL 语句如下:

SELECT su.id, su.username, su.sex, su.user_identity, su.user_company, su.status, su.third_type, su.telephone, su.avatar, su.email, su.realname, su.post, su.del_flag, su.create_time, sr.role_name FROM sys_user AS su LEFT JOIN sys_user_role AS sur ON su.id = sur.user_id LEFT JOIN sys_role AS sr ON sur.role_id = sr.id order by su.create_time desc 复制代码

那么我们需要进行如下操作:

1、新建 UserInfoVO.java

UserInfoVo实际上是一个页面数据对象,由于页面上需要显示用户表的数据还需要根据用户去查询另一张表中的角色名称,所以UserInfoVO类似构造了一个MyBatis中的result,在MP中我们可以使用IPage来返回自定义多表联合查询列表数据并分页的展示需求。

import lombok.Data; @Data public class UserInfoVO extends UserInfo { /** * id */ @TableId(type = IdType.ASSIGN_ID) private String id; /** * 登录账号 */ @Excel(name = "登录账号", width = 15) private String username; /** * 真实姓名 */ @Excel(name = "真实姓名", width = 15) private String realname; /** * 密码 */ @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String password; /** * md5密码盐 */ @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String salt; /** * 头像 */ @Excel(name = "头像", width = 15, type = 2) private String avatar; /** * 性别(1:男 2:女) */ @Excel(name = "性别", width = 15, dicCode = "sex") @Dict(dicCode = "sex") /** * 电子邮件 */ @Excel(name = "电子邮件", width = 15) private String email; /** * 电话 */ @Excel(name = "电话", width = 15) private String phone; /** * 删除状态(0,正常,1已删除) */ @TableLogic @Excel(name = "删除状态", width = 15, dicCode = "del_flag") private Integer delFlag; //其他表的数据 @TableField(exist = false) private String roleName; } 123456789 复制代码 2、UserInfoMapper.java 中

Constants.WRAPPER:在MP官网的解释是:根据entity条件查询记录,所以

IPage getUserList(@Param("username") String username, @Param("realname") String realname, @Param("status") Integer status, @Param("page") Page page, @Param(Constants.WRAPPER) Wrapper wrapper); } 复制代码 3、UserInfoMapper.xml 中

${ew.customSqlSegment}:表示将自定义的SQL代码包裹,使用QueryWrapper(LambdaQueryWrapper)进行输出。

SELECT su.id, su.username, su.sex, su.user_company, su.status, su.telephone, su.avatar, su.email, su.realname,s su.del_flag, su.create_time, sr.role_name FROM sys_user AS su LEFT JOIN sys_user_role AS sur ON su.id = sur.user_id LEFT JOIN sys_role AS sr ON sur.role_id = sr.id su.open_id is null and del_flag = 0 and su.username like concat('%',#{username},'%') and su.realname like concat('%',#{realname},'%') and su.status like concat('%',#{status}'%') order by su.create_time desc ${ew.customSqlSegment} 复制代码 4、UserInfoServiceImpl.java 中 @Override public IPage getUserList(String username, String realname, Integer status, Page page, QueryWrapper queryWrapper) { return userMapper.getUserList(username, realname, status, page, queryWrapper); } 复制代码

由此可见,serviceImpl返回的是一个IPage对象,IPage是一个分页对象,在Controller中可以在IPage中传入Page分页数据。

5、UserController.java中 QueryWrapper queryWrapper = new QueryWrapper(); Page page = new Page(pageNo, pageSize); IPage userPageList = sysUserService.getUserList(sysUser.getUsername(), sysUser.getRealname(), sysUser.getStatus(), page, queryWrapper); return Result.OK(userPageList); 复制代码

以上就是分页查询(联表)时的操作,使用拼写SQL的方式实现多表联合分页查询,是效率最高的一种。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3