解決MybatisPlus?SqlServer?OFFSET?分頁問題
問題
使用MybatisPlus 連接 SqlServer 數(shù)據(jù)庫 ,在分頁的時(shí)候發(fā)生了如下的報(bào)錯(cuò),sql語句和報(bào)錯(cuò)如下:
Cause: com.microsoft.sqlserver.jdbc.SQLServerException: “@P0”附近有語法錯(cuò)誤。
...
SQL: SELECT * FROM tb_admin OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY
錯(cuò)誤源碼重現(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); //報(bào)錯(cuò)點(diǎn)
找資料
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)鍵是,加一個(gè)排序。
至于為什么,我大致看了一下其他的解釋,說得加一個(gè)唯一字段排序,否則系統(tǒng)排序結(jié)果不唯一?于是我隨便試了一下order by 非唯一字段一樣分頁正常,這種說法說不通。
如果有懂的,歡迎評(píng)論區(qū)留言
解決
在page之前,添加orderby字句
//開始分頁 IPage<Admin> pageInfo = new Page<Admin>().setCurrent(current).setSize(size); wrapper.orderByDesc("id"); pageInfo = adminService.page(pageInfo, wrapper); //報(bào)錯(cuò)點(diǎn)
到此這篇關(guān)于MybatisPlus SqlServer OFFSET 分頁問題的文章就介紹到這了,更多相關(guān)MybatisPlus SqlServer分頁內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sql不常用函數(shù)總結(jié)以及事務(wù),增加,刪除觸發(fā)器
sql不常用函數(shù)總結(jié)以及事務(wù),增加,刪除觸發(fā)器,需要的朋友可以參考下2012-06-06oracle,mysql,SqlServer三種數(shù)據(jù)庫的分頁查詢的實(shí)例
oracle,mysql,SqlServer三種數(shù)據(jù)庫的分頁查詢的實(shí)例,需要的朋友可以參考一下2013-03-03SQL Server 總結(jié)復(fù)習(xí) (二)
SQL Server 總結(jié)復(fù)習(xí),學(xué)習(xí)sqlserver的朋友可以參考下2012-08-08SQL Server連接中三個(gè)常見的錯(cuò)誤分析
SQL Server連接中三個(gè)常見的錯(cuò)誤分析...2007-03-03sqlserver bcp(數(shù)據(jù)導(dǎo)入導(dǎo)出工具)一般用法與命令詳解
bcp是SQL Server中負(fù)責(zé)導(dǎo)入導(dǎo)出數(shù)據(jù)的一個(gè)命令行工具,它是基于DB-Library的,并且能以并行的方式高效地導(dǎo)入導(dǎo)出大批量的數(shù)據(jù)2012-07-07sql server判斷數(shù)據(jù)庫、表、列、視圖是否存在
這篇文章主要介紹了sql server判斷數(shù)據(jù)庫、表、列、視圖是否存在的方法,需要的朋友可以參考下2014-07-07SQL Server 總結(jié)復(fù)習(xí)(一)
寫這篇文章,主要是總結(jié)最近學(xué)到的一些新知識(shí),這些特性不一定是SQLSERVER最新版才有,大多數(shù)是2008新特性,有些甚至是更早。如果有不懂的地方,建議大家去百度谷歌搜搜,本文不做詳細(xì)闡述,有錯(cuò)誤的地方,歡迎大家批評(píng)指正2012-08-08數(shù)據(jù)庫日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(2)
下面小編就為大家?guī)硪黄獢?shù)據(jù)庫基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07SQL入侵恢復(fù)xp_cmdshell方法總結(jié)
恢復(fù)xp_cmdshell SQL Server阻止了對(duì)組件 'xp_cmdshell' 的過程'sys.xp_cmdshell' 啟用2010-08-08SQLServer中用T—SQL命令查詢一個(gè)數(shù)據(jù)庫中有哪些表的sql語句
SQLServer如何用T—SQL命令查詢一個(gè)數(shù)據(jù)庫中有哪些表,方便進(jìn)行表操作,需要的朋友可以參考下2012-06-06