SpringBoot+MyBatis-Plus實(shí)現(xiàn)分頁功能
前言
在SpringBoot項(xiàng)目中,結(jié)合MyBatis-Plus(簡稱MP)可以非常方便地實(shí)現(xiàn)分頁功能。MP為開發(fā)者提供了分頁插件PaginationInterceptor,只需簡單配置即可使用。
一、配置分頁插件
首先,在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ù)庫類型選擇相應(yīng)的DbType return interceptor; } }
注意:在新版本的MyBatis-Plus中,分頁插件的配置方式有所變化,不再使用PaginationInterceptor,而是使用MybatisPlusInterceptor結(jié)合PaginationInnerInterceptor。請(qǐng)根據(jù)你的MP版本選擇合適的配置方式。
二、編寫Mapper接口
接下來,在Mapper接口中定義分頁查詢的方法。不需要在Mapper的XML文件中編寫SQL語句來實(shí)現(xiàn)分頁,因?yàn)榉猪摬寮?huì)自動(dòng)對(duì)SQL進(jìn)行分頁處理。
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提供的分頁功能,不需要編寫具體的分頁SQL IPage<EntityClass> selectPageList(Page<EntityClass> page, QueryWrapper<EntityClass> queryWrapper); }
實(shí)際上,如果你的EntityClass正確繼承了MP的BaseModel(在新版本中通常不需要繼承),并且你的Mapper繼承了BaseMapper,你甚至不需要在Mapper接口中定義上述的selectPageList方法,因?yàn)锽aseMapper已經(jīng)提供了分頁查詢的方法。
三、在服務(wù)層調(diào)用分頁查詢
在服務(wù)層,你可以調(diào)用Mapper接口中的分頁查詢方法。首先,你需要?jiǎng)?chuàng)建一個(gè)Page
對(duì)象,并設(shè)置當(dāng)前頁碼和每頁顯示的記錄數(shù)。然后,調(diào)用Mapper的方法執(zhí)行分頁查詢。
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)建分頁對(duì)象,current為當(dāng)前頁碼,size為每頁顯示的數(shù)量 Page<EntityClass> page = new Page<>(current, size); // 調(diào)用Mapper方法進(jìn)行分頁查詢,這里假設(shè)沒有額外的查詢條件,如果有可以使用QueryWrapper添加條件 return yourMapper.selectPage(page, null); // 如果你的Mapper沒有定義selectPageList方法,請(qǐng)使用BaseMapper中的selectPage方法代替 } }
請(qǐng)注意:如果你的MP版本較新,且你的實(shí)體沒有繼承MP的任何類(這是推薦的做法),你應(yīng)該直接使用BaseMapper中的selectPage方法。此外,如果你的查詢需要額外的條件,可以創(chuàng)建一個(gè)QueryWrapper對(duì)象來指定這些條件。在上面的示例中,我沒有添加任何條件,所以傳遞了null作為第二個(gè)參數(shù)。
四、在控制器中調(diào)用服務(wù)層的分頁方法
最后,在控制器中調(diào)用服務(wù)層的分頁方法,并將結(jié)果返回給前端。通常,前端會(huì)期望得到一個(gè)包含當(dāng)前頁碼、總頁數(shù)、每頁記錄數(shù)和數(shù)據(jù)列表的響應(yīng)對(duì)象。你可以自定義一個(gè)響應(yīng)類來封裝這些信息,或者直接使用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") // 分頁查詢的API路徑,例如/your-endpoint/page?current=1&size=10 public Page<EntityClass> getPageList(@RequestParam int current, @RequestParam int size) { // 調(diào)用服務(wù)層方法進(jìn)行分頁查詢,并返回結(jié)果給前端 return yourService.getPageList(current, size); // 這里的方法名應(yīng)與服務(wù)層一致 } }
到此這篇關(guān)于SpringBoot+MyBatis-Plus實(shí)現(xiàn)分頁功能的文章就介紹到這了,更多相關(guān)SpringBoot MyBatis-Plus分頁內(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等詳解
雪花算法(雪花)是微博開源的分布式ID生成算法其核心思想就是:使用一個(gè)64位的長型的數(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)問題,避免業(yè)務(wù)代碼中堆積大量校驗(yàn)邏輯,需要的朋友可以參考下2024-09-09詳談Java 異常處理的誤區(qū)和經(jīng)驗(yàn)總結(jié)(分享)
下面小編就為大家分享一篇Java 異常處理的誤區(qū)和經(jīng)驗(yàn)總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧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ī)硪黄狫ava中十進(jìn)制和十六進(jìn)制的相互轉(zhuǎn)換方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08