網站首頁 編程語言 正文
問題
使用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); //報錯點
原文鏈接:https://blog.csdn.net/qq_41653935/article/details/124309966
相關推薦
- 2022-09-29 C#正則表達式(Regex類)用法實例總結_C#教程
- 2023-07-09 echart 設置柱狀圖y軸最大刻度
- 2022-03-23 C#使用表達式樹實現對象復制的示例代碼_C#教程
- 2022-02-20 Flutter TextFormField 監聽focus、blur事件
- 2022-04-10 關于C#中GUI編程的標準事件問題_C#教程
- 2022-08-12 Go本地測試小技巧解耦任務拆解_Golang
- 2022-03-05 Linux下Apache服務的部署和配置_Linux
- 2022-10-03 Flutter之可滾動組件子項緩存?KeepAlive詳解_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支