解决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分页内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatisPlus PaginationInterceptor分页插件的使用详解

    实现 配置插件 来到项目下的applicationContext.xml中配置sqlSessionFactoryBean的地方. <!-- 配置SqlSessionFactoryBean Mybatis提供的: org.mybatis.spring.SqlSessionFactoryBean MP提供的:com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean --> <bean id="sqlSessionFac

  • 浅谈mybatisPlus的Ipage分页和map参数的问题

    目录 mybatisPlus的Ipage分页和map参数 第一种情况 第二种情况 mybatisPlus IPage分页常见问题(坑) 1.TooManyResultsException mybatisPlus的Ipage分页和map参数 前提:先有一个map类型的参数 Map params= new HashMap(); params.put("name","张三"); params.put("age","23"); 第一种

  • MyBatisPlus分页时排序的实现

    目录 简介 建库建表 依赖 配置 代码 Entity Service Controller 测试 简介 说明 本文用示例介绍MyBtisPlus分页时排序的方法. 分页时排序的方法 后端OrderItems排序 后端Wrapper排序 前端指定排序 排序涉及到的类 排序涉及到Page类的List<OrderItem> orders;成员,OrderItem定义如下: public class OrderItem implements Serializable { private static

  • 解决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

  • 完美解决MybatisPlus插件分页查询不起作用总是查询全部数据问题

    问题描述: 在使用mybatisplus插件进行分页查询时分页参数不起作用,总是查出来全部数据. 原因分析: 查看打印的sql日志发现sql后面并没有limit条件,怀疑是缺少配置. 解决方案: 查阅资料通过添加配置类MybatisPlusConfig解决问题: @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ return new

  • 解决Mybatis-Plus操作分页后数据失效问题

    业务场景 我们知道在使用PageHelper分页插件时,会对执行PageHelper.startPage(pageNum, pageSize);方法后的第一条查询语句进行分页操作.在开发中总会遇到这样的业务情景,在进行分页查询后,需要对获得的列表数据包装成另一种类型,此时需要对新类型的列表进行分页,然而由于PageInfo<T>因为泛型的原因,导致处理后的列表不能加入到该类中. 如,我在数据库分页后查询到的类为PageInfo<User>,此时改类中的list属性为User,在当前

  • Mybatis-plus支持Gbase8s分页的实现示例

    目录 需求 实现方法 法2实现 20210423 修改完善 20210519完善 20210528完善 需求 实现mybatis-plus对gbase8s的分页效果支持,使切换数据库(如oracle/mysql/gbase8s)时同样分页插件代码一样实现分页效果. mybatis-plus版本:3.3.2 实现方法 修改Mybatis-plus源代码,重新打jar包,引用其作为项目依赖. 尴尬的是,mybatis-plus源码是gradle项目,目前没学习过,结果改好了源码不会打包- 在项目中重

  • 解决mybatis-plus3.4.1分页插件PaginationInterceptor和防止全表更新与删除插件SqlExplainInterceptor过时失效问题

    前言 在Mybatis Plus 3.4.0版本之后PaginationInterceptor插件就失效,新增Mybatis Plus 3.4.0的新内置插件 提示:以下是本篇文章正文内容,下面案例可供参考 分页插件 一.之前的配置 在sqlSessionFactoryBean中配置插件 <property name="plugins"> <array> <bean class="com.baomidou.mybatisplus.extensio

  • 解决Mybatis-plus和pagehelper依赖冲突的方法示例

    简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 Mybati-plus本身自带分页功能,但是我个人一直是使用pagehelper进行分页,所以在pom中添加了pagehelper依赖,但是运行项目后发现jar包冲突,面对冲突我们应该怎么解决它呢,看完如下内容便可轻松解决 先看依赖 <!-- mbatis-plus --> &

  • SqlServer 多种分页方式 详解(含简单速度测试)

    目录 SQLServer分页方式 1.Offset and Fetch 方式分页 2.row_number() 方式分页 3.row_number()变种 4.not in/top方式分页 5.not exists方式分页 6.max/top方式分页 SQLServer分页方式 附带50万数据分页时间[本机访问|已重启SQL服务|无其他程序干扰][非索引排序]环境 WIN7 SQL服务12.04 SQL管理器SSMS14.01 1.Offset and Fetch 方式分页 [SqlServer

  • sqlServer实现分页查询的三种方式

    目录 一.offset /fetch next关键字 二.利用max(主键) 三.利用row_number关键字 总结 sqlServer的分页查询和mysql语句不一样,有三种实现方式.分别是:offset /fetch next.利用max(主键).利用row_number关键字 一.offset /fetch next关键字 2012版本及以上才有,SQL server公司升级后推出的新方法. 公式: -- 分页查询公式-offset /fetch next select * from 表

  • 解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法

    mybatis-plus使用jdk8的LocalDateTime 查询时报错: org.springframework.dao.InvalidDataAccessApiUsageException: Error attempting to get column 'update_time' from result set.  Cause: java.sql.SQLFeatureNotSupportedException ; null; nested exception is java.sql.SQ

  • 解决Mybatis-plus找不到对应表及默认表名命名规则的问题

    错误截图 在测试使用Mybatis-plus查询数据库时报错 报错信息大概意思时在数据库中没有user这张表 而实际上确实没有 尝试 我这里application.ymml没有与Mybatis-plus的相关配置 为探究在没有配置的情况下时Mybatis-plus默认时按照什么来定义表名的 猜想有两个地方有可能(因为只有这两个地方是user) 先测试第一个 可以看到和之前的错误一样没有效果 测试第二个点 虽然报错,但是证明了在没有配置表名的情况下mybatis-plus是默认按照实体类名去查询数

随机推荐