mybatisplus page排序_MyBatisPlus分页的同时指定排序规则说明
分页配置
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分页的同时指定排序规则说明相关推荐
- MongoDB 添加、查询(条件查询、排序、分页、返回指定字段)、修改、删除数据、聚合aggregate
MongoDB内部支持JavaScript语法,使用SpiderMonkey作为内部的JavaScript解释器引擎. 1.常用命令 show databases:显示数据库列表 use:切换数据库 ...
- linux sort 排序 1 99,Linux操作系统中排序命令Sort的使用方法
语法格式 sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -m] [ -n ] [ -r ] [ -u ] [ -o OutFile ] [ -t C ...
- mybatisplus page排序_PostgreSQL使用WITH xxx AS()查询,使用Page中的OrderItem排序,会把WITH xxx AS()这段SQL忽略导致报错...
当前使用版本(必填,否则不予处理) 3.2.0 该问题是如何引起的?(确定最新版也有问题再提!!!) 目前更新到3.3.2版本问题一样存在 PostgreSQL使用WITH xxx AS()查询,使用 ...
- 如何在 Django REST Framework 中对分页结果过滤和排序?
作者 | 大江狗 责编 | 张文 来源 | Python Web 与 Django 开发 (ID:Python_Web_Django) 在本篇文章中我们将向你演示如何在 Django REST Fr ...
- APIView(认证,权限,限流,过滤,分页,序列化,排序)
概述: 一.身份认证: 1: 配置身份认证后端:注意:只作用于DRF视图,对django视图不起作用. 主要有两个认证后端,一个是基本认证后端,一个是seesion认证后端.BasicAuthenti ...
- SQL语句排序、分页、多表查询
一.排序 1.1 排序规则 使用 ORDER BY 子句排序 ASC(ascend): 升序 DESC(descend):降序 ORDER BY 子句在SELECT语句的结尾. 1.2 单列排序 SE ...
- MybatisPlus Page类的解析与使用
Mybatis-Plus Page类的详解与使用 Page类 源码分析 如何使用 Page类 mp3.3.0后提供了分页这个扩展功能,传送门Page类源码看这里 源码分析 records 用来存放查询 ...
- [原创]ExtAspNet秘密花园(十六) — 表格之排序与分页
排序和分页是表格必备的两个重要功能,本章会详细阐述如何在ExtAspNet中实现这两个功能. 排序 首先来看一个排序的例子,ASPX标签如下: 1: <ext:Grid ID="Gri ...
- jooq 事务_将jOOQ与Spring结合使用:排序和分页
jooq 事务 JOOQ是一个库,可以帮助我们控制SQL. 它可以从我们的数据库生成代码,并允许我们使用其流畅的API来构建类型安全的数据库查询. 本教程前面的部分向我们介绍了如何配置应用程序的应用程 ...
最新文章
- 运维企业专题(9)RHCS集群工具介绍
- python mysql ssh隧道_在python中使用ssh隧道连接mysql
- 无风扇网站服务器,这款服务器采用无风扇设计
- [leetcode] 53.最大子序和
- CSS 命名规范参考及书写注意事项
- Mybatis高级应用 整合Ehcache
- [探讨java深入的不变模式] java中String类的用法
- document.all用法
- 软件设计是怎样炼成的(6)——打造系统的底蕴(数据库设计)(下篇)
- nginx根据域名做http,https分发
- ExtJS下页面显示中文乱码问题
- C#语言中的修饰符汇总
- 计算机基础-初步认识软件和硬件
- 字符图形7-星号菱形
- 请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用“6.2f“格式输出。
- CocosCreator之绳索摆动效果
- 计算机键盘符号称呼,电脑键盘上特殊符号和标点符号名称的输入方法汇总
- 第十二届蓝桥杯 ——国际象棋
- 交换机和BBU的接口编号以及华为ATN950 BBU接口写法
- ubuntu的cuda10和cuda11共存
热门文章
- Javascript Number.MIN_VALUE
- IDEA快捷键生成serialVersionUID
- [bzoj 2017] [Usaco2009 Nov]硬币游戏
- 1223. Chernobyl’ Eagle on a Roof(dp)poj3783
- apache commons collections CollectionUtils工具类简单使用
- 服创大赛第二次讨论_2019-01-19
- Luogu1007 独木桥
- Linux下使用GDB进行调试
- Android-JNI编程-图文解析
- 在C#中ParameterizedThreadStart和ThreadStart区别