使用 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 相关文章推荐
SQL Server基本使用和简单的CRUD操作
Apr 05 SQL Server
【HBU】数据库第四周 单表查询
Apr 05 SQL Server
SQLServer2019 数据库环境搭建与使用的实现
Apr 08 SQL Server
SQL Server代理:理解SQL代理错误日志处理方法
Jun 30 SQL Server
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
Jul 07 SQL Server
利用 SQL Server 过滤索引提高查询语句的性能分析
Jul 15 SQL Server
Spark SQL 2.4.8 操作 Dataframe的两种方式
Oct 16 SQL Server
SQL中的三种去重方法小结
Nov 01 SQL Server
SQL Server使用导出向导功能
Apr 08 SQL Server
SQL Server使用PIVOT与unPIVOT实现行列转换
May 25 SQL Server
SQL Server删除表中的重复数据
May 25 SQL Server
SQL bool盲注和时间盲注详解
Jul 23 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简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
js验证表单大全
2006/11/25 Javascript
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
关于Python 3中print函数的换行详解
2017/08/08 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
python之语音识别speech模块
2020/09/09 Python
python温度转换华氏温度实现代码
2020/12/06 Python
使用Python实现音频双通道分离
2020/12/25 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
ECHT官方网站:男女健身服
2020/02/14 全球购物
高二英语教学反思
2014/01/19 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
安全主题班会教案
2015/08/12 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
git中cherry-pick命令的使用教程
2022/06/25 Servers