使用 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——索引+基于单表的数据插入与简单查询【1】
Apr 05 SQL Server
【HBU】数据库第四周 单表查询
Apr 05 SQL Server
SQL SERVER中常用日期函数的具体使用
Apr 08 SQL Server
SQLServer2019 数据库的基本使用之图形化界面操作的实现
Apr 08 SQL Server
SQL Server中交叉联接的用法详解
Apr 22 SQL Server
sql中mod()函数取余数的用法
May 29 SQL Server
在 SQL 语句中处理 NULL 值的方法
Jun 07 SQL Server
数据库之SQL技巧整理案例
Jul 07 SQL Server
SQL写法--行行比较
Aug 23 SQL Server
SQLServer之常用函数总结详解
Aug 30 SQL Server
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
Apr 22 SQL Server
SQL使用复合索引实现数据库查询的优化
May 25 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
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
vue router 组件的高级应用实例代码
2019/04/08 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
Python中操作MySQL入门实例
2015/02/08 Python
python中global用法实例分析
2015/04/30 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
Python全局变量与局部变量区别及用法分析
2018/09/03 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
python list转置和前后反转的例子
2019/08/26 Python
django创建简单的页面响应实例教程
2019/09/06 Python
pandas-resample按时间聚合实例
2019/12/27 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
python中关于数据类型的学习笔记
2020/07/19 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
工商管理专业学生的自我评价
2013/10/01 职场文书
大学生自我鉴定范文
2013/12/28 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书