解决MybatisPlus SqlServer OFFSET 分页问题
作者:cying2029 发布时间:2024-01-12 16:26:24
标签:MybatisPlus,SqlServer,分页
问题
使用MybatisPlus 连接 SqlServer 数据库 ,在分页的时候发生了如下的报错,sql语句和报错如下:
Cause: com.microsoft.sqlserver.jdbc.SQLServerException: “@P0”附近有语法错误。
...
SQL: SELECT * FROM tb_admin OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY
错误源码重现
依赖
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<!-- SqlServer依赖-->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
<version>7.4.1.jre8</version>
</dependency>
配置分页
@Configuration
public class MybatisPlusConfig {
/**
* mybatis-plus分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.SQL_SERVER));
return interceptor;
}
}
分页处
//开始分页
IPage<Admin> pageInfo = new Page<Admin>().setCurrent(current).setSize(size);
pageInfo = adminService.page(pageInfo, wrapper); //报错点
找资料
OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY
是SqlServer2012之后才有的
关键字解析:
Offset
子句:用于指定跳过(Skip)的数据行;Fetch
子句:该子句在Offset子句之后执行,表示在跳过(Sikp)指定数量的数据行之后,返回一定数据量的数据行;执行顺序:
Offset子句必须在Order By 子句之后执行
,Fetch子句必须在Offset子句之后执行;
所以解决问题的关键是,加一个排序。
至于为什么,我大致看了一下其他的解释,说得加一个唯一字段排序,否则系统排序结果不唯一?于是我随便试了一下order by 非唯一字段一样分页正常,这种说法说不通。
如果有懂的,欢迎评论区留言
解决
在page之前,添加orderby字句
//开始分页
IPage<Admin> pageInfo = new Page<Admin>().setCurrent(current).setSize(size);
wrapper.orderByDesc("id");
pageInfo = adminService.page(pageInfo, wrapper); //报错点
来源:https://blog.csdn.net/qq_41653935/article/details/124309966


猜你喜欢
- 以前做音乐项目的时候,最让我们头痛的就是满足用户的问题。在音乐的领域,不要试图去满足所有用户这个定律得到了最充分的验证。究其原因,无非是音乐
- 该算法实现对列表中大于某个阈值(比如level=5)的连续数据段的提取,具体效果如下:找出list里面大于5的连续数据段:list = [1
- 为了安全我们经常给access数据库加上密码,这样就算让本人下载了数据库,那么想看到数据库中的数据也不是那么简单的,起码多了一层障碍!我们平
- 数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值。举个例子:x
- 前言控制文件(control file)是一个相当小的文件(最多能增长到64M左右),其中包含Oracle需要的其他文件的一个目录。参数文件
- Tuple 元组元组的定义和使用元组的定义:元组是有序的不可变对象集合元组使用小括号包围,各个对象之间使用逗号分隔元组是异构的,可以包含多种
- 本文实例分析了JS获取年月日时分秒的方法。分享给大家供大家参考,具体如下:var d = new Date();var time = d.g
- 本文实例讲述了python通过加号运算符操作列表的方法。分享给大家供大家参考。具体如下:li = ['a', 'b&
- Python开发最牛逼的IDE——pycharm(其实其它的工具,例如eclipse也可以写,只不过比较麻烦,需要安装很多的插件,所以说py
- 前言备受期待的django 2.0已经发布了,最大的一个变化就是不再支持python2.x版本了,这也为我们还在保守使用的2.x的同学们敲响
- 当下基本所有的目标检测类的任务都会选择基于深度学习的方式,诸如:YOLO、SSD、RCNN等等,这一领域不乏有很多出色的模型,而且还在持续地
- (1)、导库import pandas as pdfrom pandas import Series(2)、读取csv文件的两种方式#读取c
- Software as a service 软件即服务,21世纪开始兴起的一种完全创新的软件应用模式。客户通过互联网向厂商定购所需的应用软件
- Macromedia官方将在其他软件中内建Fireworks技术称为Fireworks技术,网上也称之为内建图片编辑器。Dreamweave
- 无论安装以下哪种库,强烈建议在新环境下安装,之前在base环境下安装各种报错!!!如何在新环境下安装可参见我之前的总结或网上其他文章。不推荐
- # 判断三角形类型def triangle(a,b,c): if a>0 and b>0 and c>0: &
- 其他方法都不适用,只有这个documentElement才能正确取得当前可见区域的大小var w = parseInt(document.d
- 对于部署在新浪应用引擎SAE上的项目,使用新浪SAE云存储是不错的存储方案。新浪SAE云存储仅能在SAE环境中正常使用,对它进行简单封装后,
- 一. 语法1.1 获取当前页面的所有cookie:var allCookies = document.cookie;allCookies 是
- 前言最近在开发环境 oracle 启动侦听的时候,出现了 TNS:permission denied 的问题,通过网上和咨询朋友,最终找到了