MybatisPlus實(shí)現(xiàn)分頁(yè)效果并解決錯(cuò)誤問(wèn)題:cant?found?IPage?for?args
前言
早就知道MybatisPlus對(duì)分頁(yè)進(jìn)行了處理,但是一直沒(méi)有實(shí)戰(zhàn)用過(guò),用的是自己封裝的一個(gè)分頁(yè)組件,雖不說(shuō)麻煩吧,但是也不是特別簡(jiǎn)單。
寫(xiě)起來(lái)還是比較復(fù)雜,但是最近這個(gè)組件有了點(diǎn)小小的bug,我決定是時(shí)候放棄它了,毅然加入光榮的進(jìn)化。
然后我就去摸索使用MybatisPlus封裝的分頁(yè)組件,不用不知道,一用嚇一跳。不得不說(shuō)是真香啊!功能強(qiáng)大且使用簡(jiǎn)單
吹了這么多,下面就簡(jiǎn)單下如何使用MybatisPlus實(shí)現(xiàn)分頁(yè)效果
簡(jiǎn)單說(shuō)明
核心代碼其實(shí)就這幾行:
Page<ProjectBiddVO> page = new Page<>(pageNo,pageSize); IPage<ProjectBiddVO> projectBiddVOS = projectBiddService.queryListInfo(page,projectBiddvo);
Page就是根據(jù)當(dāng)前頁(yè)數(shù)和顯示條數(shù)得到的一個(gè)結(jié)果集
其中,IPage 是分頁(yè)的關(guān)鍵,將我們需要分頁(yè)的條件用Page處理,即可達(dá)到分頁(yè)效果。
可以看到有很多里面方法
代碼實(shí)現(xiàn)
實(shí)現(xiàn)起來(lái)特別簡(jiǎn)單,兩行代碼即可
兩個(gè)參數(shù)pageNo和pageSize,分別是limit的兩個(gè)參數(shù),對(duì)應(yīng)當(dāng)前頁(yè)和每頁(yè)條數(shù)
下面是相關(guān)的代碼,供大家參考:
controller
這樣寫(xiě)有一個(gè)問(wèn)題,就是如果不傳pageNo和pageSize,會(huì)空指針報(bào)錯(cuò)
在controller中前兩個(gè)參數(shù)是必傳的,一般后面那個(gè)參數(shù)是實(shí)體,然后將pageNo和pageSize轉(zhuǎn)換為IPage對(duì)象,后面只需要傳IPage參數(shù)和業(yè)務(wù)參數(shù)了,如果只寫(xiě)實(shí)現(xiàn)分頁(yè),只傳IPage就夠了。
@ApiOperation(value = "招投標(biāo)項(xiàng)目-自定義列表查詢", notes = "招投標(biāo)項(xiàng)目-自定義列表查詢") @GetMapping(value = "/queryListInfo") public Result<?> queryListInfo(Integer pageNo,Integer pageSize,ProjectBiddVO projectBiddvo) { Page<ProjectBiddVO> page = new Page<>(pageNo,pageSize); IPage<ProjectBiddVO> projectBiddVOS = projectBiddService.queryListInfo(page,projectBiddvo); return Result.OK(projectBiddVOS); }
接口測(cè)試:
想要優(yōu)化這個(gè)問(wèn)題,也很簡(jiǎn)單,可以給這兩個(gè)參數(shù)默認(rèn)值,防止空指針
也可以通過(guò)if判斷參數(shù)是否為空,是空的話賦值
這里我選擇前者,因?yàn)槲矣X(jué)得更簡(jiǎn)單
@ApiOperation(value = "招投標(biāo)項(xiàng)目-自定義列表查詢", notes = "招投標(biāo)項(xiàng)目-自定義列表查詢") @GetMapping(value = "/queryListInfo") public Result<?> queryListInfo( @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, ProjectBiddVO projectBiddvo) { Page<ProjectBiddVO> page = new Page<>(pageNo,pageSize); IPage<ProjectBiddVO> projectBiddVOS = projectBiddService.queryListInfo(page,projectBiddvo); return Result.OK(projectBiddVOS); }
再來(lái)運(yùn)行一下吧,這次就算不傳參,也是不會(huì)報(bào)錯(cuò)的
不傳當(dāng)前頁(yè)數(shù)默認(rèn)就是指定的默認(rèn)值嘍,傳的話就按照傳的值去分頁(yè)
通過(guò)日志可以發(fā)現(xiàn),其實(shí)也是先去count了一下總條數(shù),再進(jìn)行分頁(yè)處理的
service
IPage<ProjectBiddVO> queryListInfo(Page<ProjectBiddVO> page, ProjectBiddVO projectBiddVO);
serviceImpl
public IPage<ProjectBiddVO> queryListInfo(Page<ProjectBiddVO> page, ProjectBiddVO projectBiddVO) { return projectBiddMapper.queryListInfo(page,projectBiddVO); }
mapper(dao)
IPage<ProjectBiddVO> queryListInfo(Page<ProjectBiddVO> page,@Param("projectBiddVO") ProjectBiddVO projectBiddVO);
mapper(dao).xml
關(guān)于xml文件,不用我們手動(dòng)指定limit的條件了,改怎么寫(xiě)就怎么寫(xiě)就好,MybatisPlus會(huì)根據(jù)我們的sql查詢結(jié)果進(jìn)行分頁(yè)處理
例如我寫(xiě)的是:
select id, province, city, county, concat(province,city,county) as area, business_code_dic, section_status_dic, project_bidd_code, project_bidd_name, deposit_amount, bidder, open_bidd_time, margins_End_time, del_flag, remark from esgs_project_bidd <where> del_flag = 0 and open_bidd_time > now() and section_status_dic=0 <if test="projectBiddVO.projectBiddName!=null and projectBiddVO.projectBiddName!=''"> and project_bidd_name=#{projectBiddVO.projectBiddName} </if> <if test="projectBiddVO.projectBiddCode!=null and projectBiddVO.projectBiddCode!=''"> and project_bidd_code=#{projectBiddVO.projectBiddCode} </if> <if test="projectBiddVO.bidder!=null and projectBiddVO.bidder!=''"> and bidder=#{projectBiddVO.bidder} </if> <if test="projectBiddVO.openBiddStartTime != null and projectBiddVO.openBiddStartTime != ''"> and open_bidd_time > #{projectBiddVO.openBiddStartTime} </if> <if test="projectBiddVO.openBiddStopTime != null and projectBiddVO.openBiddStopTime != ''"> and open_bidd_time < #{projectBiddVO.openBiddStopTime} </if> </where> <if test="projectBiddVO.area!=null and projectBiddVO.area!=''"> having area like concat(#{projectBiddVO.area}, '%') </if> </select>
解決報(bào)錯(cuò)
如果遇到下面啊這個(gè)報(bào)錯(cuò)信息:
com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can’t found IPage for args!
出現(xiàn)這個(gè)錯(cuò)誤大概率是因?yàn)椋?/p>
我們想要使用分頁(yè),且把返回值定義成了IPage ,但是沒(méi)有把page對(duì)象傳入到mapper中。且要把這個(gè)page放到第一個(gè)參數(shù)。
錯(cuò)誤演示:
正確演示:
總結(jié)
到此這篇關(guān)于MybatisPlus實(shí)現(xiàn)分頁(yè)效果并解決錯(cuò)誤:cant found IPage for args!的文章就介紹到這了,更多相關(guān)MybatisPlus實(shí)現(xiàn)分頁(yè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java17和springboot3.0使用shiro報(bào)ClassNotFoundException的解決
本文主要介紹了Java17和springboot3.0使用shiro報(bào)ClassNotFoundException的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04IntelliJ IDEA同步代碼時(shí)版本沖突而產(chǎn)生出的incoming partial文件問(wèn)題的解決辦法
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA同步代碼時(shí)版本沖突而產(chǎn)生出的incoming partial文件問(wèn)題的解決辦法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10java實(shí)現(xiàn)時(shí)鐘表盤(pán)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)時(shí)鐘表盤(pán),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09Java中List for循環(huán)的6種寫(xiě)法總結(jié)(推薦)
下面小編就為大家?guī)?lái)一篇Java中List for循環(huán)的6種寫(xiě)法總結(jié)(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06Springboot如何使用mybatis實(shí)現(xiàn)攔截SQL分頁(yè)
這篇文章主要介紹了Springboot使用mybatis實(shí)現(xiàn)攔截SQL分頁(yè),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06SpringCloud2020 bootstrap 配置文件失效的解決方法
這篇文章主要介紹了SpringCloud2020 bootstrap 配置文件失效的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02SpringBoot實(shí)現(xiàn)設(shè)置全局和局部時(shí)間格式化
本文主要介紹了SpringBoot實(shí)現(xiàn)設(shè)置全局和局部時(shí)間格式化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01