使用 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
Sql-Server数据库单表查询 4.3实验课
Apr 05 SQL Server
SqlServer: 如何更改表的文件组?(进而改变存储位置)
Apr 05 SQL Server
SQLServer2019 数据库的基本使用之图形化界面操作的实现
Apr 08 SQL Server
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
Jun 30 SQL Server
SQL SERVER实现连接与合并查询
Feb 24 SQL Server
SQL Server远程连接的设置步骤(图文)
Mar 23 SQL Server
SQL Server使用导出向导功能
Apr 08 SQL Server
SQL Server表分区降低运维和维护成本
Apr 08 SQL Server
SQL Server中锁的用法
May 20 SQL Server
SQL使用复合索引实现数据库查询的优化
May 25 SQL Server
SQL解决未能删除约束问题drop constraint
May 30 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完整的日历类(CLASS)
2006/11/27 PHP
smarty实现多级分类的方法
2014/12/05 PHP
深入理解PHP类的自动载入机制
2016/09/16 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
学习jquery之一
2007/04/27 Javascript
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
js css实现垂直方向自适应的三角提示菜单
2016/06/26 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
python3实现高效的端口扫描
2019/08/31 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
python set集合使用方法解析
2019/11/05 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
竞选演讲稿范文
2013/12/28 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
技术岗位竞聘演讲稿
2014/05/16 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
安全温馨提示语大全
2015/07/14 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
Java中的继承、多态以及封装
2022/04/11 Java/Android