使用 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
sql字段解析器的实现示例
Jun 23 SQL Server
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
Jul 07 SQL Server
sql通过日期判断年龄函数的示例代码
Jul 16 SQL Server
MySQL 中如何归档数据的实现方法
Mar 16 SQL Server
SQL Server中常用截取字符串函数介绍
Mar 16 SQL Server
SQL Server数据库基本概念、组成、常用对象与约束
Mar 20 SQL Server
如何使用SQL Server语句创建表
Apr 12 SQL Server
SQL Server Agent 服务无法启动
Apr 20 SQL Server
SQL Server 忘记密码以及重新添加新账号
Apr 26 SQL Server
SQL Server2019安装的详细步骤实战记录(亲测可用)
Jun 10 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
第十三节--对象串行化
2006/11/16 PHP
php警告Creating default object from empty value 问题的解决方法
2014/04/02 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
工作需要写的一个js拖拽组件
2011/07/28 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
Python 递归函数详解及实例
2016/12/27 Python
Python pandas常用函数详解
2018/02/07 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
详解flask表单提交的两种方式
2018/07/21 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
python scipy卷积运算的实现方法
2019/09/16 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
中国医药集团国药在线:国药网
2017/02/06 全球购物
MYSQL基础面试题
2012/05/13 面试题
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
班长竞选演讲稿
2014/04/24 职场文书
应聘会计求职信
2014/06/11 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫