当前位置: 首页 > news >正文

基于 Guns v5.1 框架的分页教程

基于 Guns v5.1 框架的分页教程

第一步:Controller 层处理前端请求

在 Controller 中,需要接收 Bootstrap Table 传来的分页参数(limit, offset, sort, order)。Guns 提供了封装好的 PageFactory 类来简化 Page 对象的创建。

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;/*** 获取用户列表(分页)*/@RequestMapping("/list")public Object list() {// 使用 PageFactory 构建分页对象Page<User> page = new PageFactory<User>().defaultPage();// 调用 service 查询分页数据return userService.selectUserPage(page);}
}

Mapper 接口定义 MyBatis 查询方法

如果是单表查询,可以直接使用 MyBatis-Plus 提供的 selectPage() 方法。
如果是多表关联查询(复杂 SQL),可以在自定义 Mapper 中添加一个接受 Page<T> 参数的方法。

public interface UserMapper extends BaseMapper<User> {/*** 复杂条件分页查询(例如关联其他表)* 注意:Page 参数必须放在第一位,MyBatis-Plus 插件才能识别并自动填充结果*/List<User> selectUserWithRole(Page<User> page, @Param("condition") String condition);
}

Service 接口定义业务逻辑

服务接口中声明分页查询方法:

public interface UserService extends IService<User> {/*** 分页查询用户信息*/Page<User> selectUserPage(Page<User> page);
}

ServiceImpl 实现具体业务逻辑

在实现类中调用对应的 Mapper 方法进行查询:

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic Page<User> selectUserPage(Page<User> page) {// 可以根据需求添加查询条件,也可以直接传递空对象或 nullString condition = ""; // 示例条件(可从 request 中获取等)// 调用 mapper 的分页方法List<User> userList = baseMapper.selectUserWithRole(page, condition);// 将分页结果封装回 page 对象page.setRecords(userList);return page;}
}

Wrapper 构造查询条件(可选)

如果你希望使用 QueryWrapperLambdaQueryWrapper 来动态构建查询条件,可以在 Service 中构建:

@Override
public Page<User> selectUserPage(Page<User> page) {QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.like(StringUtils.isNotBlank(condition), "name", condition); // 添加查询条件return baseMapper.selectPage(page, wrapper);
}

JS 端发送分页请求(Bootstrap Table 示例)

前端使用的是 Bootstrap Table 控件,默认会自动携带分页参数(limit, offset, sort, order)发送请求。

$('#table').bootstrapTable({url: '/user/list',method: 'get',pagination: true,sidePagination: 'server', // 后端分页pageSize: 10,pageList: [10, 20, 50],columns: [{field: 'id',title: 'ID'}, {field: 'name',title: '姓名'}]
});

总结 & 流程图

层级功能
JS / Bootstrap Table发送分页请求,携带 limit, offset, sort, order
Controller接收请求,使用 PageFactory 创建 Page 分页对象
Service定义接口并调用 Mapper 执行分页查询
Mapper自定义 SQL 查询接口,第一参数为 Page<T> 用于复杂查询
Model / Wrapper(可选)构建查询条件(如 QueryWrapper、LambdaQueryWrapper)

补充说明

1. 分页插件生效前提

确保已在启动类或配置类中启用 MyBatis Plus 分页插件:

@Configuration
@MapperScan("com.example.mapper")
public class MyBatisPlusConfig {@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}
}

2. PageFactory 工具类源码回顾

该工具类帮助统一处理分页参数,避免手动获取 request 数据,提升开发效率。

public class PageFactory<T> {public Page<T> defaultPage() {HttpServletRequest request = HttpKit.getRequest();int limit = Integer.valueOf(request.getParameter("limit"));int offset = Integer.valueOf(request.getParameter("offset"));String sort = request.getParameter("sort");String order = request.getParameter("order");if (ToolUtil.isEmpty(sort)) {return new Page<>((offset / limit + 1), limit);} else {Page<T> page = new Page<>((offset / limit + 1), limit, sort);page.setAsc(Order.ASC.getDes().equals(order));return page;}}
}

— by AGI 老教程翻新

http://www.xdnf.cn/news/575893.html

相关文章:

  • SseEmitter是什么
  • 卷积神经网络基础(十)
  • chrono类 根据duration 类的周期类型得到对应的周期名称
  • 预警功能深度测评:如何用系统降低设备突发故障率?
  • JavaScript常用事件
  • 第P10周:Pytorch实现车牌识别
  • 如何解决测试覆盖率与迭代速度的冲突问题?
  • 手搓四人麻将程序
  • 正大模型视角下的高频交易因子构建策略研究
  • 视频监控管理平台EasyCVR工业与公共安全监控:监控中心与防爆系统如何集成?
  • 【免杀】C2免杀技术(八)APC注入
  • 数字化转型到底是什么?如何更好的理解数字化转型
  • NOSQL之Redis群集部署
  • 基于Browser Use + Playwright 实现AI Agent操作Web UI自动化
  • 运行时runtime是什么?(程序在运行过程中所依赖的环境、资源管理机制以及动态行为的总和)(包括内存分配、异常处理、线程调度、类型检查、资源访问等)
  • ip地址冲突说明什么问题?ip地址冲突影响网速吗
  • torch.matmul() VS torch.einsum()
  • 2025上半年软考准考证打印入口已开放!
  • ubuntu24.04+RTX5090D 显卡驱动安装
  • 支持向量存储:PostgresSQL及pgvector扩展详细安装步骤!老工程接入RAG功能必备!
  • 认知计算:迈向人类级智能的 AI 新范式
  • 关于对DDOS攻击的防御方法都有哪些?
  • EasyPan 使用及功能优化
  • 操作系统内存管理深度剖析:从虚拟内存机制到前沿技术探索
  • Spyglass:CDC官方Hands-on Training(一)
  • 什么是质量管理的核心要素?人、机、料、法、环、测解析
  • C++(26): 标准库 <queue>
  • 【原创】instagram 批量下载工具
  • 【优秀三方库研读】在 quill 开源库 Backend.h 知识点
  • docker面试题(3)