欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatisPlus分頁的同時指定排序規(guī)則說明

 更新時間:2020年12月02日 14:39:36   作者:梁云亮  
這篇文章主要介紹了MyBatisPlus分頁的同時指定排序規(guī)則說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

分頁配置

MyBatis Plus要想使用分頁,需要添加如下配置:

@Configuration
@ConditionalOnClass(value = {PaginationInterceptor.class})
public class MybatisPlusConfig {

 /**
 * 分頁插件
 * @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"); // 手動把sql拼接到最后(有sql注入的風險,請謹慎使用)
 IPage<Category> categoryIPage = categoryMapper.selectPage(page, queryWrapper);
 return PageBean.init(categoryIPage);
}

補充知識:解決mybatis-plus排序異常:failed to concat orderBy from IPage, exception=null

解決方案

String sql = "xxx"; // 放入不能正常進行排序的SQL語句

CCJSqlParserUtil.parse(sql); // 調用該方法,查看報錯信息

根據(jù)parse方法執(zhí)行時所拋出的異常信息中的line和column,定位出SQL語句中有問題的那一塊代碼,然后進行修正

將修正過后的SQL語句放入mapper中

注意,不要只看line和column給出位置的代碼,要把其位置左右兩邊的代碼也進行排查。

問題復現(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); // 構建分頁對象
page.setOrders(List<OrderItem>); // 設入排序項
userMapper.selectList(page); // 調用mybatis進行查詢

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方法后,控制臺出現(xiàn):

failed to concat orderBy from IPage, exception=null

返回結果數(shù)據(jù)也沒有按預期進行排序

排查過程

為了定位failed to concat orderBy from IPage錯誤信息的輸出位置:

將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ù)控制臺輸出failed to concat orderBy from IPage日志信息中的類名,定位到mybatis-plus-extension-3.2.0.jar中

com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor類的concatOrderBy方法

調試過程

對concatOrderBy方法的執(zhí)行過程進行debug,得知在調用CCJSqlParserUtil的parse方法對sql語句進行解析時拋出了JSQLParserException異常

concatOrderBy方法對上述異常進行捕獲,并打印日志信息:

failed to concat orderBy from IPage, exception

解決過程

對SQL進行修改,手動調用CCJSqlParserUtil的parse方法對修改后的語句進行調試

調試沒問題后,將修正過的SQL語句放入mapper文件中

修正過后的SQL語句

SELECT CONCAT(u.id, '/', u.`group`) AS groups FROM `user` u

以上這篇MyBatisPlus分頁的同時指定排序規(guī)則說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論