Mybatis實(shí)現(xiàn)分頁查詢的詳細(xì)流程
一. 簡單分頁查詢——limit
使用select查詢時(shí),如果結(jié)果集數(shù)據(jù)量較大,一個(gè)頁面難以處理,就會(huì)采用分頁查詢。
分頁查詢,就是從結(jié)果集中拿出指定的第n頁到第m頁的數(shù)據(jù)來顯示。
// limit分頁公式
// currentPage:當(dāng)前頁
// pageSize:每頁記錄數(shù)
limit (currentPage-1) * pageSize,pageSize
// SQL語句 select * from student limit(currentPage-1)*pageSize,pageSize;
1. 基于注解的簡單分頁查詢
【Mapper接口】
@select("select * from student limit #{pageBegin},#{pageSize}")
List<Student> findByPage(@Param("pageBegin") Integer PageBegin,@Param("PageSize")Integer PageSize);【Controller類·】
@GetMapping("/findByPage")
public List<Student> findByPage(Integer page,Integer pageSize){
Integer pageBegin = (page-1) * pageSize;
return StudentMapper.findByPage(pageBegin,pageSize);
}二.基于mapper.xml的復(fù)雜分頁
1. 【定義Page類——封裝分頁結(jié)果】
/**
* 分頁結(jié)果封裝對象
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class PageResult implements Serializable{
private Long total;//總記錄數(shù)
private List rows;//當(dāng)前頁結(jié)果
}2.【定義PageResult類——封裝查詢條件】
封裝查詢條件
請求參數(shù)包括頁碼、每頁顯示記錄數(shù)、查詢條件。
請求參數(shù)的json格式為:{currentPage:1,pageSize:10,queryString:''apesource''}
// 分頁請求。
@AllArgsConstructor
@NoArgsConstructor
@Data
public class QueryPageBean implements Serializable{
private Integer currentPage;//當(dāng)前頁碼
private Integer pageSize;//每頁記錄數(shù)
private String queryString;//查詢條件
public QueryPageBean(Integer currentPage, Integer pageSize) {
this.currentPage = currentPage;
this.pageSize = pageSize;
}
}3.【Dao層】
/*** 持久層Dao接口 */
@Mapper
public interface CheckGroupDao {
public Page<CheckGroup> selectByCondition(String queryString);
}4.【xxxMapper.xml映射文件】
<!--動(dòng)態(tài)查詢:分頁查詢-->
<select id="selectByCondition" parameterType="string" resultType="com.apesource.graduation_project.pojo.CheckGroup">
select * from t_checkgroup
<if test="value != null and value.length > 0">
where code = #{value} or name = #{value} or helpCode = #{value}
</if>
</select>5.【Service層】
@Override
public PageResult pageQuery(Integer currentPage, Integer pageSize, String queryString) {
PageHelper.startPage(currentPage, pageSize);
Page<CheckGroup> page = checkGroupDao.selectByCondition(queryString);
return new PageResult(page.getTotal(), page.getResult());
}6. 【Controller層】
//分頁查詢
@PostMapping("/findPage")
public PageResult findPage(@RequestBody QueryPageBean queryPageBean) {
try {
PageResult pageResult = checkGroupService.pageQuery(queryPageBean.getCurrentPage(),queryPageBean.getPageSize(),queryPageBean.getQueryString());
return pageResult;
} catch (Exception e) {
return null;
}
}總結(jié)
到此這篇關(guān)于Mybatis實(shí)現(xiàn)分頁查詢的文章就介紹到這了,更多相關(guān)Mybatis分頁查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)在Word指定位置插入分頁符
在Word插入分頁符可以在指定段落后插入,也可以在特定文本位置處插入。本文將以Java代碼來操作以上兩種文檔分頁需求,需要的可以參考一下2022-04-04
解決@Validated對List對象驗(yàn)證失效問題
文章指出@Validated注解無法驗(yàn)證List數(shù)組參數(shù),建議手動(dòng)逐項(xiàng)驗(yàn)證或封裝List為對象進(jìn)行驗(yàn)證,前者代碼冗余但直接,后者需調(diào)整JSON結(jié)構(gòu)但更簡潔,根據(jù)需求選擇方案,權(quán)衡靈活性與參數(shù)改造成本2025-09-09
解析rainbond以應(yīng)用為中心的架構(gòu)設(shè)計(jì)原理
這篇文章主要為大家介紹了rainbond以應(yīng)用為中心的架構(gòu)設(shè)計(jì)實(shí)現(xiàn)及原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-02-02
SpringBoot結(jié)合SpringCloud的分布式系統(tǒng)搭建教程
本文介紹了如何使用SpringBoot和SpringCloud搭建一個(gè)分布式系統(tǒng),包括服務(wù)注冊與發(fā)現(xiàn)、配置中心、網(wǎng)關(guān)服務(wù)、負(fù)載均衡和斷路器等組件的使用,通過搭建和測試這個(gè)分布式系統(tǒng),技術(shù)人員可以深入理解微服務(wù)架構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)2025-12-12
SpringMVC請求的路徑變量里面寫正則表達(dá)式的方法
這篇文章主要介紹了SpringMVC請求的路徑變量里面寫正則表達(dá)式的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
深入了解Spring中最常用的11個(gè)擴(kuò)展點(diǎn)
我們一說到spring,可能第一個(gè)想到的是?IOC(控制反轉(zhuǎn))?和?AOP(面向切面編程)。除此之外,我們在使用spring的過程中,有沒有發(fā)現(xiàn)它的擴(kuò)展能力非常強(qiáng)。今天就來跟大家一起聊聊,在Spring中最常用的11個(gè)擴(kuò)展點(diǎn)2022-09-09
關(guān)于Java應(yīng)用日志與Jaeger的trace關(guān)聯(lián)的問題
這篇文章主要介紹了Java應(yīng)用日志如何與Jaeger的trace關(guān)聯(lián),通過jaeger發(fā)現(xiàn)這十次請求中有一次耗時(shí)特別長,想定位一下具體原因,感興趣的朋友跟隨小編一起看看吧2022-01-01

