網(wǎng)站首頁 編程語言 正文
問題
使用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); //報錯點
原文鏈接:https://blog.csdn.net/qq_41653935/article/details/124309966
相關(guān)推薦
- 2022-06-24 SingleFlight模式的Go并發(fā)編程學(xué)習(xí)_Golang
- 2022-05-13 Github pages 同步到Gitee pages 并自動更新Gitee pages
- 2022-10-17 C++智能指針模板應(yīng)用詳細(xì)介紹_C 語言
- 2022-07-24 python單向循環(huán)鏈表實例詳解_python
- 2023-02-17 Python?樹表查找(二叉排序樹、平衡二叉樹)_python
- 2023-01-19 flask?post獲取前端請求參數(shù)的三種方式總結(jié)_python
- 2023-10-14 SqlServer--get 和 post 請求 http接口
- 2022-10-13 react-router?v6實現(xiàn)動態(tài)路由實例_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支