解決MybatisPlus?SqlServer?OFFSET?分頁問題
問題
使用MybatisPlus 連接 SqlServer 數(shù)據(jù)庫 ,在分頁的時候發(fā)生了如下的報錯,sql語句和報錯如下:
Cause: com.microsoft.sqlserver.jdbc.SQLServerException: “@P0”附近有語法錯誤。
...
SQL: SELECT * FROM tb_admin OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY
錯誤源碼重現(xiàn)
依賴
<!-- 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之后才有的
關(guān)鍵字解析:
Offset
子句:用于指定跳過(Skip)的數(shù)據(jù)行;Fetch
子句:該子句在Offset子句之后執(zhí)行,表示在跳過(Sikp)指定數(shù)量的數(shù)據(jù)行之后,返回一定數(shù)據(jù)量的數(shù)據(jù)行;- 執(zhí)行順序:
Offset子句必須在Order By 子句之后執(zhí)行
,F(xiàn)etch子句必須在Offset子句之后執(zhí)行;
所以解決問題的關(guān)鍵是,加一個排序。
至于為什么,我大致看了一下其他的解釋,說得加一個唯一字段排序,否則系統(tǒng)排序結(jié)果不唯一?于是我隨便試了一下order by 非唯一字段一樣分頁正常,這種說法說不通。
如果有懂的,歡迎評論區(qū)留言
解決
在page之前,添加orderby字句
//開始分頁 IPage<Admin> pageInfo = new Page<Admin>().setCurrent(current).setSize(size); wrapper.orderByDesc("id"); pageInfo = adminService.page(pageInfo, wrapper); //報錯點
到此這篇關(guān)于MybatisPlus SqlServer OFFSET 分頁問題的文章就介紹到這了,更多相關(guān)MybatisPlus SqlServer分頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sql不常用函數(shù)總結(jié)以及事務(wù),增加,刪除觸發(fā)器
sql不常用函數(shù)總結(jié)以及事務(wù),增加,刪除觸發(fā)器,需要的朋友可以參考下2012-06-06oracle,mysql,SqlServer三種數(shù)據(jù)庫的分頁查詢的實例
oracle,mysql,SqlServer三種數(shù)據(jù)庫的分頁查詢的實例,需要的朋友可以參考一下2013-03-03sqlserver bcp(數(shù)據(jù)導(dǎo)入導(dǎo)出工具)一般用法與命令詳解
bcp是SQL Server中負責導(dǎo)入導(dǎo)出數(shù)據(jù)的一個命令行工具,它是基于DB-Library的,并且能以并行的方式高效地導(dǎo)入導(dǎo)出大批量的數(shù)據(jù)2012-07-07sql server判斷數(shù)據(jù)庫、表、列、視圖是否存在
這篇文章主要介紹了sql server判斷數(shù)據(jù)庫、表、列、視圖是否存在的方法,需要的朋友可以參考下2014-07-07SQL入侵恢復(fù)xp_cmdshell方法總結(jié)
恢復(fù)xp_cmdshell SQL Server阻止了對組件 'xp_cmdshell' 的過程'sys.xp_cmdshell' 啟用2010-08-08SQLServer中用T—SQL命令查詢一個數(shù)據(jù)庫中有哪些表的sql語句
SQLServer如何用T—SQL命令查詢一個數(shù)據(jù)庫中有哪些表,方便進行表操作,需要的朋友可以參考下2012-06-06