滚雪球学MyBatis-Plus(07):分页与排序

前言

在上期内容中,我们深入探讨了如何创建服务类和控制器,并通过 RESTful API 提供对外服务。我们学会了如何处理客户端的各种请求并返回相应的结果,这为构建一个完整的 Web 应用程序打下了基础。

本期内容将进一步深入,重点介绍 MyBatis Plus 的分页与排序功能。这些功能在处理大量数据时非常实用,能够显著提高数据查询的效率和用户体验。通过配置分页插件和实现排序查询,你将学会如何在项目中高效地管理和展示数据。

一、配置分页插件

分页是处理大量数据时常用的功能。MyBatis Plus 提供了分页插件,简化了分页操作的实现。

  1. MyBatisPlusConfig 类中配置分页插件

    • 打开 src/main/java/com/example/mybatisplusdemo/config/MyBatisPlusConfig.java 文件,添加分页插件配置:
      package com.example.mybatisplusdemo.config;import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;@Configuration
      public class MyBatisPlusConfig {@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}
      }
      
  2. 配置说明

    • PaginationInterceptor:这是 MyBatis Plus 提供的分页拦截器,它会自动识别数据库类型并生成相应的分页 SQL。
二、实现分页查询

接下来,我们将实现分页查询,并在控制器中提供相应的接口。

  1. UserMapper 接口中定义分页查询方法

    • src/main/java/com/example/mybatisplusdemo/mapper/UserMapper.java 文件中定义分页查询方法:
      package com.example.mybatisplusdemo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
      import com.baomidou.mybatisplus.core.metadata.IPage;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import com.example.mybatisplusdemo.entity.User;
      import org.apache.ibatis.annotations.Mapper;
      import org.apache.ibatis.annotations.Select;@Mapper
      public interface UserMapper extends BaseMapper<User> {@Select("SELECT * FROM user")IPage<User> selectPage(Page<?> page);
      }
      
  2. UserService 接口中定义分页查询方法

    • src/main/java/com/example/mybatisplusdemo/service/UserService.java 文件中定义分页查询方法:
      package com.example.mybatisplusdemo.service;import com.baomidou.mybatisplus.core.metadata.IPage;
      import com.baomidou.mybatisplus.extension.service.IService;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import com.example.mybatisplusdemo.entity.User;public interface UserService extends IService<User> {IPage<User> findAll(Page<User> page);
      }
      
  3. UserServiceImpl 类中实现分页查询方法

    • src/main/java/com/example/mybatisplusdemo/service/impl/UserServiceImpl.java 文件中实现分页查询方法:
      package com.example.mybatisplusdemo.service.impl;import com.baomidou.mybatisplus.core.metadata.IPage;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
      import com.example.mybatisplusdemo.entity.User;
      import com.example.mybatisplusdemo.mapper.UserMapper;
      import com.example.mybatisplusdemo.service.UserService;
      import org.springframework.stereotype.Service;@Service
      public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic IPage<User> findAll(Page<User> page) {return baseMapper.selectPage(page);}
      }
      
  4. UserController 类中提供分页查询接口

    • src/main/java/com/example/mybatisplusdemo/controller/UserController.java 文件中提供分页查询接口:
      package com.example.mybatisplusdemo.controller;import com.baomidou.mybatisplus.core.metadata.IPage;
      import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
      import com.example.mybatisplusdemo.entity.User;
      import com.example.mybatisplusdemo.service.UserService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestParam;
      import org.springframework.web.bind.annotation.RestController;@RestController
      @RequestMapping("/user")
      public class UserController {@Autowiredprivate UserService userService;@GetMapping("/list")public IPage<User> list(@RequestParam int pageNo, @RequestParam int pageSize) {Page<User> page = new Page<>(pageNo, pageSize);return userService.findAll(page);}
      }
      
  5. 测试分页查询

    • 启动 Spring Boot 项目,使用浏览器或 Postman 访问 http://localhost:8080/user/list?pageNo=1&pageSize=5,查看分页查询结果。
三、实现排序查询

在很多场景下,分页查询通常需要与排序功能结合使用。MyBatis Plus 支持通过 Page 对象来实现排序功能。

  1. UserMapper 接口中修改分页查询方法

    • src/main/java/com/example/mybatisplusdemo/mapper/UserMapper.java 文件中使用默认的 selectPage 方法:
      package com.example.mybatisplusdemo.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
      import com.example.mybatisplusdemo.entity.User;
      import org.apache.ibatis.annotations.Mapper;@Mapper
      public interface UserMapper extends BaseMapper<User> {
      }
      
  2. UserService 接口和 UserServiceImpl 类中不需要额外修改

    • 使用现有的 findAll 方法即可实现排序查询。
  3. UserController 类中提供排序查询接口

    • src/main/java/com/example/mybatisplusdemo/controller/UserController.java 文件中提供排序查询接口:
      @GetMapping("/listSorted")
      public IPage<User> listSorted(@RequestParam int pageNo, @RequestParam int pageSize, @RequestParam String sortBy, @RequestParam boolean asc) {Page<User> page = new Page<>(pageNo, pageSize);page.setAsc(asc);page.setOrderByField(sortBy);return userService.findAll(page);
      }
      
  4. 测试排序查询

    • 启动 Spring Boot 项目,使用浏览器或 Postman 访问 http://localhost:8080/user/listSorted?pageNo=1&pageSize=5&sortBy=age&asc=true,查看排序查询结果。
四、总结

通过本篇文章,你已经学会了如何在 MyBatis Plus 中配置和实现分页与排序功能。我们通过分页插件简化了分页操作,并通过 Page 对象实现了灵活的排序查询。这些功能在处理大量数据时非常实用,能够显著提高数据查询的效率和用户体验。

下期预告

在下一期内容中,我们将深入探讨 MyBatis Plus 的条件构造器。条件构造器能够帮助我们构建复杂的查询条件,使查询操作更加灵活和强大。我们将详细介绍条件构造器的使用方法,并通过实例演示如何在项目中应用这些技巧。敬请期待!

通过本系列教程的学习,你将系统地掌握 MyBatis Plus 的各项功能,从基础到高级,从理论到实践,全面提升你的开发技能。希望你在学习过程中能够有所收获,并应用到实际项目中。让我们继续这段学习之旅吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【kafka】在Linux系统中部署配置Kafka的详细用法教程分享

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

文件IO函数练习

作业&#xff1a;使用write和read完成文件的拷贝。 代码 #include <myhead.h>int main(int argc, const char *argv[]) {int fd open("./1.txt",O_RDONLY);//已只读打开被拷贝文件if(-1 fd){perror("open");return -1;}int fd1 open("./2.…

uniapp微信小程序开发测试获取手机号码

先申请测试号 注意认证但是没有完全认证不要试测试号解密如下 总结我自己的两大坑 1.官网的WXBizDataCrypt需要导入crypto要提前下载但是试了很多次没有效果重新编写这个。将crypto库换成crypto-js库 2.我一直在尝试用下有下面这个界面的测试号不行获取不到用户的code还是啥忘记…

【Unity编辑器扩展】SpriteAltas资源一键转换为TMP_SpriteAsset或Sprite图集

【Unity编辑器扩展】艺术字/自定义图片字体/TextMeshPro艺术字生成工具_unity 艺术字-CSDN博客 博文工具源码见GF_X自动化游戏开发框架&#xff1a;GitHub - sunsvip/GF_X: Unity GameFramework HybridCLR&#xff0c;Includes several automated editor extension tools, an …

【时间盒子】-【3.新建项目】创建元服务工程,选择默认模板Empty Ability

一、新建项目 1、打开DevEco Studio >>文件>>新建>>新建项目&#xff0c;选择元服务 Atomic Service>>默认模板Empty Ability。 2、设置元服务的工程名称、Bundle name等&#xff0c;模型选Stage&#xff0c;语言是ArkTS&#xff0c;支持的设备类型只…

文本字面相似度算法回顾整理

概述&#xff1a; 通常大家说的文本相似度多指文本语义的相似度&#xff0c;但是对于部分场景却会非常关注文本字面上的相似度&#xff0c;比如对于内容投放平台需要去判重&#xff0c;这就涉及看文本是否字面大量重复&#xff0c;需要去比较文本的字面相似度。 梳理了下常用…

学习记录——day41 运算符重载

运算符默认不支持自定义的类&#xff0c;但是可以通过运算符重载扩展运算符的属于范围 运算符重载&#xff0c;也是实现泛型编程的一种&#xff0c;能够实现“一符多用”&#xff0c;可以使用运算符重载来完成对象与对象之间的符号运算 注&#xff1a;运算符重载仅针对类对象 不…

Python量化交易需要注意的股票交易佣金包含哪些

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…

Web安全:SQL注入实战测试.(扫描 + 测试)

Web安全&#xff1a;SQL注入实战测试. SQL注入就是 有些恶意用户在提交查询请求的过程中 将SQL语句插入到请求内容中&#xff0c;同时程序的本身对用户输入的内容过于相信&#xff0c;没有对用户插入的SQL语句进行任何的过滤&#xff0c;从而直接被SQL语句直接被服务端执行&am…

【Python】3.基础语法(3)函数

文章目录 1.函数2.语法格式3.函数参数4. 函数返回值5. 变量作用域6.函数执行过程7. 链式调用8.嵌套调用9. 函数递归10. 参数默认值11. 关键字参数 1.函数 编程中的函数, 是一段 可以被重复使用的代码片段。 代码示例: 求数列的和, 不使用函数 # 1. 求 1 - 100 的和 sum 0 f…

“立创EDA专业版”笔记

目录 二、立创EDA专业版 2.0 整体功能 2.0.1 快捷键 2.1 右侧功能栏 2.1.1 过滤 2.2 PCB设计 2.2.1 切换亮度 2.2.2 偏移 2.2.3 单位切换 2.2.4 检查DRC 2.2.5 重新铺铜 2.2.6 布线 2.2.7 锁定 2.2.8 “过滤”设置锁定 2.3 上方菜单栏 2.3.1 保存文件 2.4 元件…

安卓(Android)平台上的MVVM架构:关键知识点、优劣分析及实践示例

​ 一、安卓MVVM架构核心知识点 1.1、架构组成 1.1.1、Model层 承载业务逻辑与数据实体&#xff0c;独立于UI并与ViewModel进行交互&#xff0c;实现数据获取与处理功能。 1.1.2、View层 负责用户界面展示&#xff0c;借助Android XML布局文件及Activity/Fragment等组件&a…

Java学习第六天

Java进阶知识面向对象 static&#xff1a;是静态的意思&#xff0c;可以修饰成员变量&#xff0c;表示该成员变量在内存中只存储一份&#xff0c;可以被共享访问。 静态成员变量&#xff08;有static修饰&#xff0c;属于类&#xff0c;内存中加载一次&#xff09;&#xff1a…

网络安全-安全渗透简介和安全渗透环境准备

文章目录 前言1. 安全渗透简介1.1 什么是安全渗透&#xff1f;1.2 安全渗透所需的工具1.3 渗透测试流程 2. 使用 Kali Linux 进行安全渗透2.1 下载ISO镜像2.2 下载VMware Workstaion软件2.3 Kali Linux简介2.4 准备Kali Linux环境2.5 Kali Linux初始配置2.6 VIM鼠标右键无法粘贴…

从汇编层看64位程序运行——likely提示编译器的优化案例和底层实现分析

大纲 代码分析with_attributes::powno_attributes::pow分析 我们在《Modern C——使用分支预测优化代码性能》一文中介绍了likely提示编译器进行编译优化&#xff0c;但是我们又讲了最终优化不是对分支顺序的调换&#xff0c;那么它到底做了什么样的优化&#xff0c;让整体性能…

Temu、Shein半托管vs全托管?养号测评怎么整?

2024年&#xff0c;跨境电商的市场风向又变了&#xff01;1月4日&#xff0c;阿里旗下的速卖通推出半托管模式&#xff0c;通过免佣金和现金补贴吸引卖家&#xff1b;同月&#xff0c;拼多多的Temu也在美国上线了半托管服务&#xff0c;TikTok Shop和SHEIN紧随其后。这给才流行…

Vue学习笔记 二

4、Vue基础扩展 4.1 插槽 组件的最大特性就是复用性,而用好插槽能大大提高组件的可复用能力在Vue中插槽是很重要的存在,通过插槽,我们可以把父组件中指定的DOM作用到子组件的任意位置,后面我们坐项目用到的组件库比如element-ui,vant-ui都频繁用到的插槽,Vue的插槽主要有…

突发性网络攻击的安全挑战分析

“网络战争对 21 世纪的意义可能就如同闪电战对 20 世纪的意义一样”, 突发性网络攻击作为 网络战争的新兴形式&#xff0c;对于世界来说仍是国家安全领域的新问题&#xff0c;对网络安全治理带来了不可忽视 的严峻挑战。 第一&#xff0c;结合当下的战略背景&#xff0c;突…

MySQL:简述多版本并发控制MVCC

一、MVCC的概念 1、MVCC 数据库并发场景有三种&#xff0c;分别为&#xff1a; &#xff08;1&#xff09;读读&#xff1a;不存在任何问题&#xff0c;也不需要并发控制。 &#xff08;2&#xff09;读写&#xff1a;有线程安全问题&#xff0c;可能会造成事务隔离性问题&am…

最新!yolov10+deepsort的目标跟踪实现

目录 yolov10介绍——实时端到端物体检测 概述 主要功能 型号 性能 方法 一致的双重任务分配&#xff0c;实现无 NMS 培训 效率-精度驱动的整体模型设计 提高效率 精度提升 实验和结果 比较 deepsort介绍&#xff1a; yolov10结合deepsort实现目标跟踪 效果展示…