使用 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 相关文章推荐
SQLServer2019 数据库的基本使用之图形化界面操作的实现
Apr 08 SQL Server
SQL Server2019数据库之简单子查询的具有方法
Apr 27 SQL Server
mybatis调用sqlserver存储过程返回结果集的方法
May 08 SQL Server
SQL 窗口函数实现高效分页查询的案例分析
May 21 SQL Server
解决sql server 数据库,sa用户被锁定的问题
Jun 11 SQL Server
利用 SQL Server 过滤索引提高查询语句的性能分析
Jul 15 SQL Server
SQLServer之常用函数总结详解
Aug 30 SQL Server
通过T-SQL语句创建游标与实现数据库加解密功能
Mar 16 SQL Server
SQL Server数据库查询出现阻塞之性能调优
Apr 10 SQL Server
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
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
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
PHP多进程编程实例详解
2017/07/19 PHP
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
一个用js实现控制台控件的代码
2007/09/04 Javascript
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
node.js中的http.get方法使用说明
2014/12/14 Javascript
使用JQuery选择HTML遍历函数的方法
2016/09/17 Javascript
Javascript 实现计算器时间功能详解及实例(二)
2017/01/08 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
Python的lambda匿名函数的简单介绍
2013/04/25 Python
使用cx_freeze把python打包exe示例
2014/01/24 Python
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
Python函数中的函数(闭包)用法实例
2016/03/15 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
简单了解Python write writelines区别
2020/02/27 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
软件测试工程师笔试题带答案
2015/03/27 面试题
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
踏青活动策划方案
2014/08/19 职场文书
项目验收申请报告
2015/05/15 职场文书
羊脂球读书笔记
2015/06/30 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书