解决MybatisPlus SqlServer OFFSET 分页问题

 更新时间:2022年04月21日 14:56:43   作者:cying2029  
这篇文章主要介绍了MybatisPlus SqlServer OFFSET 分页问题,在分页的时候有错误问题本文给大家记录下来,方便大家查阅,需要的朋友可以参考下

问题

使用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 分页问题的文章就介绍到这了,更多相关MybatisPlus SqlServer分页内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL判断是否

    SQL判断是否"存在",还在用 count 操作?很耗时的!

    这篇文章主要介绍了SQL判断是否"存在",还在用 count 操作?很耗时的!本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • freetds简介、安装、配置及使用介绍

    freetds简介、安装、配置及使用介绍

    简单的说FreeTDS是一个程序库,可以实现在Linux系统下访问微软的SQL数据库! FreeTDS是一个让SYBASE和Microsofte数据库客户端和其数据库服务通信的工具,其能够完成例如DB-Lib,CT-Lib,ODBC,JDBC和Perl DBI的工作。
    2014-08-08
  • SQL Server 数据库基础编程详解

    SQL Server 数据库基础编程详解

    这篇文章主要为大家介绍了SQL Server 数据库基础编程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • SQL(MSSQLSERVER)服务启动错误代码3414的解决方法

    SQL(MSSQLSERVER)服务启动错误代码3414的解决方法

    这篇文章主要介绍了SQL(MSSQLSERVER)服务启动错误代码3414的解决方法,需要的朋友可以参考下
    2016-03-03
  • [js]javascript与剪贴板交互

    [js]javascript与剪贴板交互

    [js]javascript与剪贴板交互...
    2007-07-07
  • 一文详解如何远程连接SQLServer数据库

    一文详解如何远程连接SQLServer数据库

    sql server是一款数据库管理工具,其中有非常多实用的功能可以帮助用户完成数据库的管理操作,也有一些用户在操作这款软件的时候会需要用到远程连接功能,这篇文章主要给大家介绍了关于如何远程连接SQLServer数据库的相关资料,需要的朋友可以参考下
    2023-10-10
  • 浅谈SQL Server中统计对于查询的影响分析

    浅谈SQL Server中统计对于查询的影响分析

    SQL Server查询分析器是基于开销的。通常来讲,查询分析器会根据谓词来确定该如何选择高效的查询路线,比如该选择哪个索引
    2012-05-05
  • SQL 中的For Xml Path详解

    SQL 中的For Xml Path详解

    今天就给大家介绍一下FOR XML PATH,它就是用来处理低版本数据库中数据合并的,是一个比较古老的功能了,新版本中也依然还能使用,对SQL 中的For Xml Path相关知识感兴趣的朋友一起看看吧
    2022-08-08
  • SQL Server中函数、存储过程与触发器的用法

    SQL Server中函数、存储过程与触发器的用法

    这篇文章介绍了SQL Server中函数、存储过程与触发器的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • SQL SERVER数据库开发之存储过程应用

    SQL SERVER数据库开发之存储过程应用

    SQL SERVER数据库开发之存储过程应用...
    2006-09-09

最新评论