使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题


Posted in SQL Server onApril 22, 2022

问题

使用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); //报错点

到此这篇关于MybatisPlus SqlServer OFFSET 分页问题的文章就介绍到这了!


Tags in this post...

SQL Server 相关文章推荐
2021-4-3课程——SQL Server查询【2】
Apr 05 SQL Server
sqlserver2017共享功能目录路径不可改的解决方法
Apr 16 SQL Server
sql查询结果列拼接成逗号分隔的字符串方法
May 25 SQL Server
SQL Server代理:理解SQL代理错误日志处理方法
Jun 30 SQL Server
SQL写法--行行比较
Aug 23 SQL Server
sql server删除前1000行数据的方法实例
Aug 30 SQL Server
sql时间段切分实现每隔x分钟出一份高速门架车流量
Feb 28 SQL Server
SQL Server查询某个字段在哪些表中存在
Mar 03 SQL Server
SQL Server使用导出向导功能
Apr 08 SQL Server
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
Apr 22 SQL Server
SQL Server中的逻辑函数介绍
May 25 SQL Server
SQL Server2019安装的详细步骤实战记录(亲测可用)
Jun 10 SQL Server
使用MybatisPlus打印sql语句
Apr 22 #SQL Server
Sql Server 行数据的某列值想作为字段列显示的方法
SQL Server Agent 服务无法启动
Apr 20 #SQL Server
SQLServer权限之只开启创建表权限
如何使用SQL Server语句创建表
Apr 12 #SQL Server
MSSQL基本语法操作
Apr 11 #SQL Server
SQL Server数据库查询出现阻塞之性能调优
Apr 10 #SQL Server
You might like
如何对PHP程序中的常见漏洞进行攻击
2006/10/09 PHP
php生成RSS订阅的方法
2015/02/13 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
基于jquery的跨域调用文件
2010/11/19 Javascript
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
JS数组实现分类统计实例代码
2018/09/30 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
详解用python生成随机数的几种方法
2019/08/04 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
房地产管理毕业生自荐信
2013/11/04 职场文书
期末自我鉴定
2014/02/02 职场文书
秦兵马俑教学反思
2014/02/07 职场文书
商务专员岗位职责范本
2014/06/29 职场文书
python数据分析之用sklearn预测糖尿病
2021/04/22 Python
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
Python中三种花式打印的示例详解
2022/03/19 Python