MyBatisPlus分頁(yè)的同時(shí)指定排序規(guī)則說(shuō)明
分頁(yè)配置
MyBatis Plus要想使用分頁(yè),需要添加如下配置:
@Configuration
@ConditionalOnClass(value = {PaginationInterceptor.class})
public class MybatisPlusConfig {
/**
* 分頁(yè)插件
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
return paginationInterceptor; //返回分布攔截器
}
}
指定排序規(guī)則:
方法一
public PageBean<Category> listPage(int pageNum, int pageSize) {
IPage<Category> page = new Page<>(pageNum,pageSize);
QueryWrapper<Category> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("state",1)
.orderByDesc("level");
IPage<Category> categoryIPage = categoryMapper.selectPage(page, queryWrapper);
return PageBean.init(categoryIPage);
}
方法二(不建議)
public PageBean<Category> listPage(int pageNum, int pageSize) {
IPage<Category> page = new Page<>(pageNum,pageSize);
QueryWrapper<Category> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("state",1)
.orderBy("level")
.last("desc"); // 手動(dòng)把sql拼接到最后(有sql注入的風(fēng)險(xiǎn),請(qǐng)謹(jǐn)慎使用)
IPage<Category> categoryIPage = categoryMapper.selectPage(page, queryWrapper);
return PageBean.init(categoryIPage);
}
補(bǔ)充知識(shí):解決mybatis-plus排序異常:failed to concat orderBy from IPage, exception=null
解決方案
String sql = "xxx"; // 放入不能正常進(jìn)行排序的SQL語(yǔ)句
CCJSqlParserUtil.parse(sql); // 調(diào)用該方法,查看報(bào)錯(cuò)信息
根據(jù)parse方法執(zhí)行時(shí)所拋出的異常信息中的line和column,定位出SQL語(yǔ)句中有問題的那一塊代碼,然后進(jìn)行修正
將修正過后的SQL語(yǔ)句放入mapper中
注意,不要只看line和column給出位置的代碼,要把其位置左右兩邊的代碼也進(jìn)行排查。
問題復(fù)現(xiàn)
pom.xml
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.8.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <java.version>1.8</java.version> </properties> <dependencies> ... <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>5.1.48</version> </dependency> <!-- mybatis --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> ... </dependencies>
service層
Page<UserVO> page = new Page<>(pageNum, pageSize); // 構(gòu)建分頁(yè)對(duì)象 page.setOrders(List<OrderItem>); // 設(shè)入排序項(xiàng) userMapper.selectList(page); // 調(diào)用mybatis進(jìn)行查詢
dao層
IPage<UserVO> selectList(page);
mapper
<mapper> <select id="selectList" resultType="com.demo.springboottest.vo.UserVO"> SELECT CONCAT(u.id, '/', u.group) AS groups FROM `user` u </select> </mapper>
執(zhí)行selectList方法后,控制臺(tái)出現(xiàn):
failed to concat orderBy from IPage, exception=null
返回結(jié)果數(shù)據(jù)也沒有按預(yù)期進(jìn)行排序
排查過程
為了定位failed to concat orderBy from IPage錯(cuò)誤信息的輸出位置:
將mybatis-plus的日志配置修改為
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
將spring-boot日志輸出格式配置為
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
根據(jù)控制臺(tái)輸出failed to concat orderBy from IPage日志信息中的類名,定位到mybatis-plus-extension-3.2.0.jar中
com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor類的concatOrderBy方法
調(diào)試過程
對(duì)concatOrderBy方法的執(zhí)行過程進(jìn)行debug,得知在調(diào)用CCJSqlParserUtil的parse方法對(duì)sql語(yǔ)句進(jìn)行解析時(shí)拋出了JSQLParserException異常
concatOrderBy方法對(duì)上述異常進(jìn)行捕獲,并打印日志信息:
failed to concat orderBy from IPage, exception
解決過程
對(duì)SQL進(jìn)行修改,手動(dòng)調(diào)用CCJSqlParserUtil的parse方法對(duì)修改后的語(yǔ)句進(jìn)行調(diào)試
調(diào)試沒問題后,將修正過的SQL語(yǔ)句放入mapper文件中
修正過后的SQL語(yǔ)句
SELECT CONCAT(u.id, '/', u.`group`) AS groups FROM `user` u
以上這篇MyBatisPlus分頁(yè)的同時(shí)指定排序規(guī)則說(shuō)明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java?處理樹形結(jié)構(gòu)數(shù)據(jù)的過程
這篇文章主要介紹了Java?處理樹形結(jié)構(gòu)數(shù)據(jù)的過程,本文給大家分析具體實(shí)現(xiàn)過程,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置
今天小編就為大家分享一篇關(guān)于SpringBoot中關(guān)于static和templates的注意事項(xiàng)以及webjars的配置,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
SpringBoot實(shí)現(xiàn)接口冪等性的4種方案
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)接口冪等性的4種方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Java?for循環(huán)標(biāo)簽跳轉(zhuǎn)到指定位置的示例詳解
這篇文章主要介紹了Java?for循環(huán)標(biāo)簽跳轉(zhuǎn)到指定位置,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05
Spring基于ProxyFactoryBean創(chuàng)建AOP代理
這篇文章主要介紹了Spring基于ProxyFactoryBean創(chuàng)建AOP代理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
java實(shí)現(xiàn)斗地主發(fā)牌系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)斗地主發(fā)牌系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04

