MyBatis_Plus联表分页查询
发布日期:2021-05-10 23:10:52 浏览次数:25 分类:精选文章

本文共 2654 字,大约阅读时间需要 8 分钟。

MyBatis_Plus 中的联表分页查询是一个常见需求,特别是在需要同时关联多个表并进行分页查询时。以下是实现联表分页查询的实用步骤说明。

一、创建自定义数据对象

首先,我们需要创建一个自定义的数据对象 UserInfoVO,它将封装必要的实体数据和页面需要展示的字段。这个类将根据实际需求扩展,但通常包括以下字段:

import lombok.Data;
import org.jeecg.framework 달리;
@Data
public class UserInfoVO extends UserInfo {
// 除了原userInfo的字段外,再添加一些关联字段,例如角色名称
private String roleName;
}

二、定义数据库查询映射

UserInfoMapper.xml 中定义数据库查询映射文件。由于MyBatis_Plus提供了强大的拆解功能,我们可以直接使用自定义的 sql 标签来执行复杂的 SQL 语句。

SELECT su(id, username, sex, user_identity, user_company, status, telephone, avatar, email, realname, post, del_flag, 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
WHERE su.del_flag = 0
AND su.username LIKE '%#{username}%'
AND su.realname LIKE '%#{realname}%'
AND su.status LIKE '%#{status}%'
ORDER BY su.create_time DESC

三、实现分页查询逻辑

UserInfoServiceImpl.java 中,实现分页查询的业务逻辑。我们可以使用 MyBatis_Plus 提供的 PageHelper 或其他分页工具来完成。

import org.jeecg.module(sys.user.entity.SysUser);
import org.jeecg.module.sys.user.mapper.UserInfoMapper;
import org.jeecg.framework Pagination;
import org.springframework.beans.factory.annotation.Autowired;
public class UserInfoServiceImpl {
@Autowired
private UserInfoMapper userInfoMapper;
public Page queryUserList(Page page, QueryWrapper wrappingQuery) {
return userInfoMapper.getUserList(null, null, null, page, wrappingQuery);
}
}

四、使用控制器调用分页查询

UserController.java 中,调用 serviceImpl 的分页方法,并返回结果。通常,控制器代码如下:

import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.AutowiredResource;
@Controller
public class UserController {
@Autowired
private UserService userInfoService;
public Response onViewList(@ModelAttribute SysUser sysUser,
Page page,
QueryWrapper queryWrapper) {
Page‚Ì Page
userPage = userInfoService.getUserList(sysUser.getUsername(),
sysUser.getRealname(), sysUser.getStatus(),
page, queryWrapper);
return Result.ok(userPage);
}
}

五、分页总页数计算

为了提高查询效率,可以在 MyBatis 中添加一个计算总页数的方法:

public int countTotalUser() {
return userInfoMapper.countTotalUser();
}

六、处理自定义查询参数

如果需要根据具体需求添加自定义查询参数,可以在 QueryWrapper 中添加这些参数。例如:

QueryWrapper.create()
.like("username", "%{username}%")
.like("realname", "%{realname}%")
.eq(SysUser::delFlag, 0);

通过这样的步骤,我们可以实现一个高效且灵活的多表分页查询框架。这种方法不仅能够满足日常的分页需求,还适用于复杂的联表场景。

上一篇:基于SpringBoot的策略模式demo
下一篇:接收参数为null的问题

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年05月08日 22时01分05秒