使用 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 窗口函数实现高效分页查询的案例分析
May 21 SQL Server
SQLServer之常用函数总结详解
Aug 30 SQL Server
SQLServer中exists和except用法介绍
Dec 04 SQL Server
sql server 累计求和实现代码
Feb 28 SQL Server
通过T-SQL语句创建游标与实现数据库加解密功能
Mar 16 SQL Server
SQL Server实现分页方法介绍
Mar 16 SQL Server
sqlserver连接错误之SQL评估期已过的问题解决
Mar 23 SQL Server
MSSQL基本语法操作
Apr 11 SQL Server
SQL Server中的游标介绍
May 20 SQL Server
SQL Server中锁的用法
May 20 SQL Server
SQL中的连接查询详解
Jun 21 SQL Server
SqlServer常用函数及时间处理小结
May 08 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文件中bom的PHP代码
2012/03/13 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
PyCharm 常用快捷键和设置方法
2017/12/20 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
值得收藏的10道python 面试题
2019/04/15 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
Windows和Linux动态库应用异同
2016/04/17 面试题
代码中finally中的代码会不会执行
2012/02/06 面试题
管事部库房保管员岗位职责
2014/02/21 职场文书
建议书标准格式
2014/03/12 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
护理目标管理责任书
2014/07/25 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
歌咏比赛主持词
2015/06/29 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL