分页配置

MyBatis Plus要想使用分页,需要添加如下配置:

@Configuration

@ConditionalOnClass(value = {PaginationInterceptor.class})

public class MybatisPlusConfig {

/**

* 分页插件

* @return

*/

@Bean

public PaginationInterceptor paginationInterceptor() {

PaginationInterceptor paginationInterceptor = new PaginationInterceptor();

return paginationInterceptor; //返回分布拦截器

}

}

指定排序规则:

方法一

public PageBean listPage(int pageNum, int pageSize) {

IPage page = new Page<>(pageNum,pageSize);

QueryWrapper queryWrapper = new QueryWrapper<>();

queryWrapper.eq("state",1)

.orderByDesc("level");

IPage categoryIPage = categoryMapper.selectPage(page, queryWrapper);

return PageBean.init(categoryIPage);

}

方法二(不建议)

public PageBean listPage(int pageNum, int pageSize) {

IPage page = new Page<>(pageNum,pageSize);

QueryWrapper queryWrapper = new QueryWrapper<>();

queryWrapper.eq("state",1)

.orderBy("level")

.last("desc"); // 手动把sql拼接到最后(有sql注入的风险,请谨慎使用)

IPage categoryIPage = categoryMapper.selectPage(page, queryWrapper);

return PageBean.init(categoryIPage);

}

补充知识:解决mybatis-plus排序异常:failed to concat orderBy from IPage, exception=null

解决方案

String sql = "xxx"; // 放入不能正常进行排序的SQL语句

CCJSqlParserUtil.parse(sql); // 调用该方法,查看报错信息

根据parse方法执行时所抛出的异常信息中的line和column,定位出SQL语句中有问题的那一块代码,然后进行修正

将修正过后的SQL语句放入mapper中

注意,不要只看line和column给出位置的代码,要把其位置左右两边的代码也进行排查。

问题复现

pom.xml

org.springframework.boot

spring-boot-starter-parent

2.0.8.RELEASE

1.8

...

mysql

mysql-connector-java

runtime

5.1.48

com.baomidou

mybatis-plus-boot-starter

3.2.0

...

service层

Page page = new Page<>(pageNum, pageSize); // 构建分页对象

page.setOrders(List); // 设入排序项

userMapper.selectList(page); // 调用mybatis进行查询

dao层

IPage selectList(page);

mapper

SELECT CONCAT(u.id, '/', u.group) AS groups FROM `user` u

执行selectList方法后,控制台出现:

failed to concat orderBy from IPage, exception=null

返回结果数据也没有按预期进行排序

排查过程

为了定位failed to concat orderBy from IPage错误信息的输出位置:

将mybatis-plus的日志配置修改为

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl

将spring-boot日志输出格式配置为

logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n

根据控制台输出failed to concat orderBy from IPage日志信息中的类名,定位到mybatis-plus-extension-3.2.0.jar中

com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor类的concatOrderBy方法

调试过程

对concatOrderBy方法的执行过程进行debug,得知在调用CCJSqlParserUtil的parse方法对sql语句进行解析时抛出了JSQLParserException异常

concatOrderBy方法对上述异常进行捕获,并打印日志信息:

failed to concat orderBy from IPage, exception

解决过程

对SQL进行修改,手动调用CCJSqlParserUtil的parse方法对修改后的语句进行调试

调试没问题后,将修正过的SQL语句放入mapper文件中

修正过后的SQL语句

SELECT CONCAT(u.id, '/', u.`group`) AS groups FROM `user` u

以上这篇MyBatisPlus分页的同时指定排序规则说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

mybatisplus page排序_MyBatisPlus分页的同时指定排序规则说明相关推荐

  1. MongoDB 添加、查询(条件查询、排序、分页、返回指定字段)、修改、删除数据、聚合aggregate

    MongoDB内部支持JavaScript语法,使用SpiderMonkey作为内部的JavaScript解释器引擎. 1.常用命令 show databases:显示数据库列表 use:切换数据库 ...

  2. linux sort 排序 1 99,Linux操作系统中排序命令Sort的使用方法

    语法格式 sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -m] [ -n ] [ -r ] [ -u ] [ -o OutFile ] [ -t C ...

  3. mybatisplus page排序_PostgreSQL使用WITH xxx AS()查询,使用Page中的OrderItem排序,会把WITH xxx AS()这段SQL忽略导致报错...

    当前使用版本(必填,否则不予处理) 3.2.0 该问题是如何引起的?(确定最新版也有问题再提!!!) 目前更新到3.3.2版本问题一样存在 PostgreSQL使用WITH xxx AS()查询,使用 ...

  4. 如何在 Django REST Framework 中对分页结果过滤和排序?

    作者 | 大江狗  责编 | 张文 来源 | Python Web 与 Django 开发 (ID:Python_Web_Django) 在本篇文章中我们将向你演示如何在 Django REST Fr ...

  5. APIView(认证,权限,限流,过滤,分页,序列化,排序)

    概述: 一.身份认证: 1: 配置身份认证后端:注意:只作用于DRF视图,对django视图不起作用. 主要有两个认证后端,一个是基本认证后端,一个是seesion认证后端.BasicAuthenti ...

  6. SQL语句排序、分页、多表查询

    一.排序 1.1 排序规则 使用 ORDER BY 子句排序 ASC(ascend): 升序 DESC(descend):降序 ORDER BY 子句在SELECT语句的结尾. 1.2 单列排序 SE ...

  7. MybatisPlus Page类的解析与使用

    Mybatis-Plus Page类的详解与使用 Page类 源码分析 如何使用 Page类 mp3.3.0后提供了分页这个扩展功能,传送门Page类源码看这里 源码分析 records 用来存放查询 ...

  8. [原创]ExtAspNet秘密花园(十六) — 表格之排序与分页

    排序和分页是表格必备的两个重要功能,本章会详细阐述如何在ExtAspNet中实现这两个功能. 排序 首先来看一个排序的例子,ASPX标签如下: 1: <ext:Grid ID="Gri ...

  9. jooq 事务_将jOOQ与Spring结合使用:排序和分页

    jooq 事务 JOOQ是一个库,可以帮助我们控制SQL. 它可以从我们的数据库生成代码,并允许我们使用其流畅的API来构建类型安全的数据库查询. 本教程前面的部分向我们介绍了如何配置应用程序的应用程 ...

最新文章

  1. 运维企业专题(9)RHCS集群工具介绍
  2. python mysql ssh隧道_在python中使用ssh隧道连接mysql
  3. 无风扇网站服务器,这款服务器采用无风扇设计
  4. [leetcode] 53.最大子序和
  5. CSS 命名规范参考及书写注意事项
  6. Mybatis高级应用 整合Ehcache
  7. [探讨java深入的不变模式] java中String类的用法
  8. document.all用法
  9. 软件设计是怎样炼成的(6)——打造系统的底蕴(数据库设计)(下篇)
  10. nginx根据域名做http,https分发
  11. ExtJS下页面显示中文乱码问题
  12. C#语言中的修饰符汇总
  13. 计算机基础-初步认识软件和硬件
  14. 字符图形7-星号菱形
  15. 请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用“6.2f“格式输出。
  16. CocosCreator之绳索摆动效果
  17. 计算机键盘符号称呼,电脑键盘上特殊符号和标点符号名称的输入方法汇总
  18. 第十二届蓝桥杯 ——国际象棋
  19. 交换机和BBU的接口编号以及华为ATN950 BBU接口写法
  20. ubuntu的cuda10和cuda11共存

热门文章

  1. Javascript Number.MIN_VALUE
  2. IDEA快捷键生成serialVersionUID
  3. [bzoj 2017] [Usaco2009 Nov]硬币游戏
  4. 1223. Chernobyl’ Eagle on a Roof(dp)poj3783
  5. apache commons collections CollectionUtils工具类简单使用
  6. 服创大赛第二次讨论_2019-01-19
  7. Luogu1007 独木桥
  8. Linux下使用GDB进行调试
  9. Android-JNI编程-图文解析
  10. 在C#中ParameterizedThreadStart和ThreadStart区别