SpringBoot+MyBatis-Plus實(shí)現(xiàn)分頁(yè)功能
前言
在SpringBoot項(xiàng)目中,結(jié)合MyBatis-Plus(簡(jiǎn)稱MP)可以非常方便地實(shí)現(xiàn)分頁(yè)功能。MP為開(kāi)發(fā)者提供了分頁(yè)插件PaginationInterceptor,只需簡(jiǎn)單配置即可使用。
一、配置分頁(yè)插件
首先,在SpringBoot的配置類中(通常是帶有@Configuration注解的類)配置PaginationInterceptor。
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2)); // 根據(jù)你的數(shù)據(jù)庫(kù)類型選擇相應(yīng)的DbType return interceptor; } }
注意:在新版本的MyBatis-Plus中,分頁(yè)插件的配置方式有所變化,不再使用PaginationInterceptor,而是使用MybatisPlusInterceptor結(jié)合PaginationInnerInterceptor。請(qǐng)根據(jù)你的MP版本選擇合適的配置方式。
二、編寫(xiě)Mapper接口
接下來(lái),在Mapper接口中定義分頁(yè)查詢的方法。不需要在Mapper的XML文件中編寫(xiě)SQL語(yǔ)句來(lái)實(shí)現(xiàn)分頁(yè),因?yàn)榉猪?yè)插件會(huì)自動(dòng)對(duì)SQL進(jìn)行分頁(yè)處理。
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Select; import your.package.name.EntityClass; public interface YourMapper extends BaseMapper<EntityClass> { // 使用MP提供的分頁(yè)功能,不需要編寫(xiě)具體的分頁(yè)SQL IPage<EntityClass> selectPageList(Page<EntityClass> page, QueryWrapper<EntityClass> queryWrapper); }
實(shí)際上,如果你的EntityClass正確繼承了MP的BaseModel(在新版本中通常不需要繼承),并且你的Mapper繼承了BaseMapper,你甚至不需要在Mapper接口中定義上述的selectPageList方法,因?yàn)锽aseMapper已經(jīng)提供了分頁(yè)查詢的方法。
三、在服務(wù)層調(diào)用分頁(yè)查詢
在服務(wù)層,你可以調(diào)用Mapper接口中的分頁(yè)查詢方法。首先,你需要?jiǎng)?chuàng)建一個(gè)Page
對(duì)象,并設(shè)置當(dāng)前頁(yè)碼和每頁(yè)顯示的記錄數(shù)。然后,調(diào)用Mapper的方法執(zhí)行分頁(yè)查詢。
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import your.package.name.EntityClass; import your.package.name.YourMapper; @Service public class YourService { @Autowired private YourMapper yourMapper; public Page<EntityClass> getPageList(int current, int size) { // 創(chuàng)建分頁(yè)對(duì)象,current為當(dāng)前頁(yè)碼,size為每頁(yè)顯示的數(shù)量 Page<EntityClass> page = new Page<>(current, size); // 調(diào)用Mapper方法進(jìn)行分頁(yè)查詢,這里假設(shè)沒(méi)有額外的查詢條件,如果有可以使用QueryWrapper添加條件 return yourMapper.selectPage(page, null); // 如果你的Mapper沒(méi)有定義selectPageList方法,請(qǐng)使用BaseMapper中的selectPage方法代替 } }
請(qǐng)注意:如果你的MP版本較新,且你的實(shí)體沒(méi)有繼承MP的任何類(這是推薦的做法),你應(yīng)該直接使用BaseMapper中的selectPage方法。此外,如果你的查詢需要額外的條件,可以創(chuàng)建一個(gè)QueryWrapper對(duì)象來(lái)指定這些條件。在上面的示例中,我沒(méi)有添加任何條件,所以傳遞了null作為第二個(gè)參數(shù)。
四、在控制器中調(diào)用服務(wù)層的分頁(yè)方法
最后,在控制器中調(diào)用服務(wù)層的分頁(yè)方法,并將結(jié)果返回給前端。通常,前端會(huì)期望得到一個(gè)包含當(dāng)前頁(yè)碼、總頁(yè)數(shù)、每頁(yè)記錄數(shù)和數(shù)據(jù)列表的響應(yīng)對(duì)象。你可以自定義一個(gè)響應(yīng)類來(lái)封裝這些信息,或者直接使用MP提供的Page
對(duì)象。這里演示后者。
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import your.package.name.EntityClass; import your.package.name.YourService; @RestController @RequestMapping("/your-endpoint") public class YourController { @Autowired private YourService yourService; @GetMapping("/page") // 分頁(yè)查詢的API路徑,例如/your-endpoint/page?current=1&size=10 public Page<EntityClass> getPageList(@RequestParam int current, @RequestParam int size) { // 調(diào)用服務(wù)層方法進(jìn)行分頁(yè)查詢,并返回結(jié)果給前端 return yourService.getPageList(current, size); // 這里的方法名應(yīng)與服務(wù)層一致 } }
到此這篇關(guān)于SpringBoot+MyBatis-Plus實(shí)現(xiàn)分頁(yè)功能的文章就介紹到這了,更多相關(guān)SpringBoot MyBatis-Plus分頁(yè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring boot validation參數(shù)校驗(yàn)實(shí)例分析
這篇文章主要介紹了spring boot validation參數(shù)校驗(yàn),結(jié)合實(shí)例形式分析了spring boot validation進(jìn)行數(shù)據(jù)有效性驗(yàn)證的相關(guān)操作技巧,需要的朋友可以參考下2019-11-11MybatisPlus 主鍵策略之type=IdType.ASSIGN_ID等詳解
雪花算法(雪花)是微博開(kāi)源的分布式ID生成算法其核心思想就是:使用一個(gè)64位的長(zhǎng)型的數(shù)字作為全局唯一ID,這篇文章主要介紹了MybatisPlus 主鍵策略(type=IdType.ASSIGN_ID等詳解),需要的朋友可以參考下2024-04-04Java如何基于EasyExcel實(shí)現(xiàn)導(dǎo)入數(shù)據(jù)校驗(yàn)并生成錯(cuò)誤信息Excel
這篇文章主要介紹了Java如何基于EasyExcel實(shí)現(xiàn)導(dǎo)入數(shù)據(jù)校驗(yàn)并生成錯(cuò)誤信息Excel,為了優(yōu)化項(xiàng)目中的文件導(dǎo)入功能,考慮構(gòu)建一個(gè)基于EasyExcel的通用Excel導(dǎo)入框架,主要解決導(dǎo)入數(shù)據(jù)的校驗(yàn)問(wèn)題,避免業(yè)務(wù)代碼中堆積大量校驗(yàn)邏輯,需要的朋友可以參考下2024-09-09詳談Java 異常處理的誤區(qū)和經(jīng)驗(yàn)總結(jié)(分享)
下面小編就為大家分享一篇Java 異常處理的誤區(qū)和經(jīng)驗(yàn)總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Spring的事件機(jī)制知識(shí)點(diǎn)詳解及實(shí)例分析
在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于Spring的事件機(jī)制知識(shí)點(diǎn)詳解及實(shí)例分析,有需要的朋友么可以參考下。2021-12-12Java中十進(jìn)制和十六進(jìn)制的相互轉(zhuǎn)換方法
下面小編就為大家?guī)?lái)一篇Java中十進(jìn)制和十六進(jìn)制的相互轉(zhuǎn)換方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08