千家信息网

MyBatisPlus如何实现分页时排序

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关MyBatisPlus如何实现分页时排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。简介说明本文用示例介绍MyBtisPlus分页时排
千家信息网最后更新 2026年11月03日MyBatisPlus如何实现分页时排序

这篇文章将为大家详细讲解有关MyBatisPlus如何实现分页时排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

    简介

    说明

    本文用示例介绍MyBtisPlus分页时排序的方法。

    分页时排序的方法

    • 后端OrderItems排序

    • 后端Wrapper排序

    • 前端指定排序

    排序涉及到的类

    排序涉及到Page类的List orders;成员,OrderItem定义如下:

    public class OrderItem implements Serializable {    private static final long serialVersionUID = 1L;     //需要进行排序的字段    private String column;     // 是否正序排列,默认 true    private boolean asc = true;    ...}

    建库建表

    DROP DATABASE IF EXISTS mp;CREATE DATABASE mp DEFAULT CHARACTER SET utf8;USE mp; DROP TABLE IF EXISTS `t_user`;SET NAMES utf8mb4; CREATE TABLE `t_user`(    `id`           BIGINT(0) NOT NULL AUTO_INCREMENT,    `user_name`    VARCHAR(64) NOT NULL COMMENT '用户名(不能重复)',    `nick_name`    VARCHAR(64) NULL COMMENT '昵称(可以重复)',    `email`        VARCHAR(64) COMMENT '邮箱',    `create_time`  DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',    `update_time`  DATETIME(0) NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',    `deleted_flag` BIGINT(0) NOT NULL DEFAULT 0 COMMENT '0:未删除 其他:已删除',    PRIMARY KEY (`id`) USING BTREE,    UNIQUE KEY `index_user_name_deleted_flag` (`user_name`, `deleted_flag`),    KEY `index_create_time`(`create_time`)) ENGINE = InnoDB COMMENT = '用户'; INSERT INTO `t_user` VALUES (1, 'knife', '刀刃', 'abc@qq.com', '2021-01-23 09:33:36', '2021-01-23 09:33:36', 0);INSERT INTO `t_user` VALUES (2, 'sky', '天蓝', '123@qq.com', '2021-01-24 18:12:21', '2021-01-24 18:12:21', 0);

    执行后的结果:

    依赖

    pom.xml

        4.0.0            org.springframework.boot        spring-boot-starter-parent        2.3.12.RELEASE                 com.example    MyBatis-Plus_Simple    0.0.1-SNAPSHOT    MyBatis-Plus_Simple    Demo project for Spring Boot             1.8                             org.springframework.boot            spring-boot-starter-web                             com.baomidou            mybatis-plus-boot-starter            3.5.1                             org.springframework.boot            spring-boot-starter-test            test                             mysql            mysql-connector-java                             org.projectlombok            lombok                             com.github.xiaoymin            knife4j-spring-boot-starter            3.0.3                                                      org.springframework.boot                spring-boot-maven-plugin                         

    配置

    application.yml

    spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/mp?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai    username: root    password: 222333 #mybatis-plus配置控制台打印完整带参数SQL语句mybatis-plus:  configuration:    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

    分页插件的配置(必须)

    package com.example.demo.config; import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; @Configurationpublic class MyBatisPlusConfig {     /**     * 分页插件     */    @Bean    public MybatisPlusInterceptor mybatisPlusInterceptor() {        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));        return interceptor;    }}

    代码

    Entity

    package com.example.demo.user.entity; import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableLogic;import com.baomidou.mybatisplus.annotation.TableName;import com.baomidou.mybatisplus.extension.activerecord.Model;import lombok.Data; import java.time.LocalDateTime; @Data@TableName(value = "t_user")public class User {    @TableId(value = "id", type = IdType.AUTO)    private Long id;     /**     * 用户名(不能重复)     */    private String userName;     /**     * 昵称(可以重复)     */    private String nickName;     /**     * 邮箱     */    private String email;     /**     * 创建时间     */    private LocalDateTime createTime;     /**     * 修改时间     */    private LocalDateTime updateTime;     /**     * 0:未删除 其他:已删除     */    @TableLogic(delval = "id")    private Long deletedFlag;}

    Service

    接口

    package com.example.demo.user.service; import com.baomidou.mybatisplus.extension.service.IService;import com.example.demo.user.entity.User; public interface UserService extends IService {}

    实现

    package com.example.demo.user.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.example.demo.user.entity.User;import com.example.demo.user.mapper.UserMapper;import com.example.demo.user.service.UserService;import org.springframework.stereotype.Service; @Servicepublic class UserServiceImpl extends ServiceImpl implements UserService {}

    Controller

    package com.example.demo.user.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.core.metadata.OrderItem;import com.baomidou.mybatisplus.core.toolkit.Wrappers;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.example.demo.user.entity.User;import com.example.demo.user.service.UserService;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;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.RestController; import java.util.List; @Api(tags = "排序")@RestController@RequestMapping("sort")public class SortController {     @Autowired    private UserService userService;     @ApiOperation("默认顺序")    @GetMapping("defaultOrder")    public IPage defaultOrder(Page page) {        return userService.page(page);    }     @ApiOperation("通过orderItems")    @GetMapping("orderItems")    public IPage orderItems(Page page) {        page.addOrder(OrderItem.desc("create_time"));        // 可以指定多列。比如下边这个:按create_time排序,若create_time相同,则按id排序        // page.addOrder(OrderItem.desc("create_time"), OrderItem.asc("id"));        return userService.page(page);    }     @ApiOperation("通过wrapper")    @GetMapping("wrapper")    public IPage wrapper(Page page) {        LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery();        // 按create_time排序,若create_time相同,则按id排序        queryWrapper.orderByDesc(User::getCreateTime);        queryWrapper.orderByAsc(User::getId);        return userService.page(page, queryWrapper);    }     @ApiOperation("前端指定顺序")    @GetMapping("byFrontEnd")    public IPage byFrontEnd(Page page) {        return userService.page(page);    }}

    测试

    访问Knife4j页面:http://localhost:8080/doc.html

    1.不指定顺序

    本处前端不传任何参数进行的测试。

    2.后端OrderItem排序(create_time倒序)

    本处前端不传任何参数进行的测试。

    3.后端Wrapper排序(create_time倒序,id升序)

    本处前端不传任何参数进行的测试。

    4.前端指定排序(create_time倒序)

    前端指定orders[0].asc和orders[0].column

    结果:

    关于"MyBatisPlus如何实现分页时排序"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

    排序 前端 参数 时间 测试 倒序 用户 篇文章 顺序 配置 相同 插件 方法 昵称 更多 用户名 结果 邮箱 不错 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 智能科技公司是互联网公司吗 互联网科技未来 互联网的科技创新 科技创新互联网企业 郑州华宇互联网科技 互联网科技大会 一五八零互联网科技 联恩商钥互联网科技有限公司 互联网科技生活的内容 上海电发互联网科技有限公司 港股科技和互联网 昊天互联网科技有限公司 苏州五指互联网络科技有限 千方科技属于互联网企业吗 晋城互联网科技 朱啸虎曾投资哪些互联网科技企业 众安科技工业互联网合作 下一代互联网重大应用科技园 盐城市攀科互联网科技有限公司 亿人帮互联网科技有限公司 互联网和高科技公司 深圳市运趣互联网科技有限公司 隆华科技工业互联网 阿里互联网科技公司 互联网校园科技培训 玉溪互联网科技怎么选 广州百诚互联网科技有限公司官网 四川互联网展示科技馆设计 玉溪新华互联网科技怎么选
    0