SpringMvc+Mybatis+Pagehelper分頁(yè)詳解
最近公司需要做一個(gè)告警頁(yè)面的功能,需要分頁(yè),查了很多資料發(fā)現(xiàn)PageHelper比較合適
故寫(xiě)一篇從零開(kāi)始的PageHelper使用的教程,也記錄下忙活一天的東西
1.首先需要在項(xiàng)目中添加PageHelper的依賴(lài),這里我用的Maven添加
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.6</version> </dependency>
2.在mybatis的配置文件中添加對(duì)pagehelper 的配置
<configuration>
<plugins>
<!-- com.github.pagehelper為PageHelper類(lèi)所在包名 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 4.0.0以后版本可以不設(shè)置該參數(shù) -->
<property name="dialect" value="mysql"/>
<!-- 該參數(shù)默認(rèn)為false -->
<!-- 設(shè)置為true時(shí),會(huì)將RowBounds第一個(gè)參數(shù)offset當(dāng)成pageNum頁(yè)碼使用 -->
<!-- 和startPage中的pageNum效果一樣-->
<property name="offsetAsPageNum" value="true"/>
<!-- 該參數(shù)默認(rèn)為false -->
<!-- 設(shè)置為true時(shí),使用RowBounds分頁(yè)會(huì)進(jìn)行count查詢(xún) -->
<property name="rowBoundsWithCount" value="true"/>
<!-- 設(shè)置為true時(shí),如果pageSize=0或者RowBounds.limit = 0就會(huì)查詢(xún)出全部的結(jié)果 -->
<!-- (相當(dāng)于沒(méi)有執(zhí)行分頁(yè)查詢(xún),但是返回結(jié)果仍然是Page類(lèi)型)-->
<property name="pageSizeZero" value="true"/>
<!-- 3.3.0版本可用 - 分頁(yè)參數(shù)合理化,默認(rèn)false禁用 -->
<!-- 啟用合理化時(shí),如果pageNum<1會(huì)查詢(xún)第一頁(yè),如果pageNum>pages會(huì)查詢(xún)最后一頁(yè) -->
<!-- 禁用合理化時(shí),如果pageNum<1或pageNum>pages會(huì)返回空數(shù)據(jù) -->
<property name="reasonable" value="true"/>
<!-- 3.5.0版本可用 - 為了支持startPage(Object params)方法 -->
<!-- 增加了一個(gè)`params`參數(shù)來(lái)配置參數(shù)映射,用于從Map或ServletRequest中取值 -->
<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默認(rèn)值 -->
<!-- 不理解該含義的前提下,不要隨便復(fù)制該配置 -->
<!-- <property name="params" value="pageNum=start;pageSize=limit;"/> -->
<!-- 支持通過(guò)Mapper接口參數(shù)來(lái)傳遞分頁(yè)參數(shù) -->
<property name="supportMethodsArguments" value="true"/>
<!-- always總是返回PageInfo類(lèi)型,check檢查返回類(lèi)型是否為PageInfo,none返回Page -->
<property name="returnPageInfo" value="check"/>
</plugin>
</plugins>
</configuration>
3.添加一個(gè)PageBean的類(lèi)來(lái)儲(chǔ)存分頁(yè)的信息
public class PageBean<T> implements Serializable {
private static final long serialVersionUID = 1L;
private long total; //總記錄數(shù)
private List<T> list; //結(jié)果集
private int pageNum; //第幾頁(yè)
private int pageSize; //每頁(yè)記錄數(shù)
private int pages; // 總頁(yè)數(shù)
private int size; //當(dāng)前頁(yè)的數(shù)量<=pageSize
public PageBean(List<T> list){
if (list instanceof Page){
Page<T> page = (Page<T>) list;
this.pageNum = page.getPageNum();
this.pageSize = page.getPageSize();
this.total = page.getTotal();
this.pages = page.getPages();
this.list = page;
this.size = page.size();
}
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
}
下面就是業(yè)務(wù)邏輯的代碼了
4.首先從mapper.xml文件寫(xiě)起,操作數(shù)據(jù)庫(kù)的sql,查出我們所需要的數(shù)據(jù)
<select id="selectallList" parameterType="com.alarm.bean.AlarmParamModel" resultMap="AlarmMap"> select message_id, seqnum, message_type, process_status, distribute_status, processor, occur_time, close_time, system_id, group_id, warn_level, message_content from td_alarm_info </select>
5.mapper的接口方法
public List<AlarmParamModel> selectallList(AlarmParamModel model);
6.service的接口方法
Datagrid selectallList(AlarmParamModel model,int pageNum, int pageSize);
7.service的實(shí)現(xiàn)類(lèi)
這里需要注意下,是分頁(yè)的主要邏輯。pageNum表示頁(yè)碼,pageSize表示每頁(yè)顯示的數(shù)目,startPag方法是初始的頁(yè)面,orderBy方法是將數(shù)據(jù)按某個(gè)字段進(jìn)行排序,這里我用的是occr_time的降序(desc)
public Datagrid selectallList(AlarmParamModel model,int pageNum, int pageSize){
PageHelper.startPage(pageNum, pageSize);
PageHelper.orderBy("occur_time desc");
List<AlarmParamModel> list = this.alarmMgrMapper.selectallList(model);
PageInfo<AlarmParamModel> pageInfo = new PageInfo<AlarmParamModel>(list);
Datagrid datagrid = new Datagrid(pageInfo.getTotal(),pageInfo.getList());
return datagrid;
}
8.注意到我這邊用了一個(gè)Datagrid類(lèi),是用于向前臺(tái)傳數(shù)據(jù)用的類(lèi),包括total(總數(shù))和rows(數(shù)據(jù))
public class Datagrid {
private long total;
private List rows = new ArrayList<>();
public Datagrid() {
super();
}
public Datagrid(long total, List rows) {
super();
this.total = total;
this.rows = rows;
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List getRows() {
return rows;
}
public void setRows(List rows) {
this.rows = rows;
}
}
9.開(kāi)始寫(xiě)controller層,調(diào)用之前寫(xiě)的方法
這里需要注意的是,offset和limit 是前臺(tái)傳來(lái)的頁(yè)碼和每頁(yè)顯示的數(shù)量,區(qū)別于bootstraptable 的offset和limit,那個(gè)offset表示的是偏移量,即如果每頁(yè)顯示10條數(shù)據(jù),那么bootstrap中的第二頁(yè)表示的offset就是10,第一頁(yè)和第三頁(yè)分別是0和20。而我這里的offset就是指代的pageNum。
@RequestMapping(value = "/AlarmInfo/list", method = {RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public Datagrid alarmInfo(AlarmParamModel model,@RequestParam(value="offset",defaultValue="0",required=false)Integer pageNum,
@RequestParam(value="limit",defaultValue="10",required=false)Integer pageSize)
{
Datagrid datagrid = this.alarmMgrService.selectallList(model,pageNum, pageSize);
return datagrid;
}
10. 到現(xiàn)在前臺(tái)的請(qǐng)求已經(jīng)可以獲取后臺(tái)的數(shù)據(jù)并且分頁(yè)了,我再將我的前臺(tái)bootstrap table 的配置貼一下
$('#tb_departments').bootstrapTable({
url: 'http://10.1.234.134:8088/api/AlarmInfo/list', //請(qǐng)求后臺(tái)的URL(*)
method: 'get', //請(qǐng)求方式(*)
striped: false, //是否顯示行間隔色
cache: false, //是否使用緩存,默認(rèn)為true,所以一般情況下需要設(shè)置一下這個(gè)屬性(*)
pagination: true, //是否顯示分頁(yè)(*)
onlyInfoPagination:true, //設(shè)置為 true 只顯示總數(shù)據(jù)數(shù),而不顯示分頁(yè)按鈕。需要 pagination='True'
sortable: true, //是否啟用排序
sortOrder: "asc", //排序方式
queryParams: oTableInit.queryParams,//傳遞參數(shù)(*)
sidePagination: "server", //分頁(yè)方式:client客戶(hù)端分頁(yè),server服務(wù)端分頁(yè)(*)
pageNumber:1, //初始化加載第一頁(yè),默認(rèn)第一頁(yè)
pageSize: 10, //每頁(yè)的記錄行數(shù)(*)
pageList: [10, 25, 50, 100], //可供選擇的每頁(yè)的行數(shù)(*)
search: false, //是否顯示表格搜索,此搜索是客戶(hù)端搜索,不會(huì)進(jìn)服務(wù)端,所以,個(gè)人感覺(jué)意義不大
strictSearch: true,
showColumns: false, //是否顯示所有的列
showRefresh: false, //是否顯示刷新按鈕
minimumCountColumns: 2, //最少允許的列數(shù)
clickToSelect: true, //是否啟用點(diǎn)擊選中行
checkboxHeader:true, //add
height: 500, //行高,如果沒(méi)有設(shè)置height屬性,表格自動(dòng)根據(jù)記錄條數(shù)覺(jué)得表格高度
uniqueId: "id", //每一行的唯一標(biāo)識(shí),一般為主鍵列
showToggle:false, //是否顯示詳細(xì)視圖和列表視圖的切換按鈕
cardView: false, //是否顯示詳細(xì)視圖
detailView: true,
detailFormatter:detailFormatter ,
paginationHAlign:"left",
paginationDetailHAlign:"right",
這里我沒(méi)有用bootstrap自帶的分頁(yè)按鈕,我是自己用jq寫(xiě)的按鈕組,在下一篇文章我會(huì)把按鈕代碼貼出來(lái),這樣可自定義的程度會(huì)高一些~ 你也可以直接用bootstraptable子帶的分頁(yè)按鈕,把配置改下就好。
以上所述是小編給大家介紹的SpringMvc+Mybatis+Pagehelper分頁(yè)詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- springboot?+mybatis?使用PageHelper實(shí)現(xiàn)分頁(yè)并帶條件模糊查詢(xún)功能
- SpringBoot+Mybatis分頁(yè)插件PageHelper實(shí)現(xiàn)分頁(yè)效果
- Spring Boot+Mybatis+Pagehelper分頁(yè)實(shí)現(xiàn)
- Spring Boot+Mybatis+Druid+PageHelper實(shí)現(xiàn)多數(shù)據(jù)源并分頁(yè)的方法
- SpringBoot集成MyBatis的分頁(yè)插件PageHelper實(shí)例代碼
- Spring集成MyBatis和PageHelper分頁(yè)插件整合過(guò)程詳解
相關(guān)文章
學(xué)習(xí)SpringMVC——國(guó)際化+上傳+下載詳解
本篇文章主要介紹了學(xué)習(xí)SpringMVC——國(guó)際化+上傳+下載,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。2016-12-12
詳解在SpringBoot中@Transactional事物操作和事物無(wú)效問(wèn)題排查
這篇文章主要介紹了詳解在SpringBoot中@Transactional事物操作和事物無(wú)效問(wèn)題排查,本文詳細(xì)的介紹了SpringBoot中集成使用@Transactional注解操作事物以及事物開(kāi)啟后無(wú)效的問(wèn)題排查,需要的朋友可以參考下2021-06-06
Java實(shí)戰(zhàn)之在線寄查快遞系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了如何利用Java制作一個(gè)在線寄查快遞系統(tǒng),文中采用的技術(shù)有java、SpringBoot、FreeMarker、Mysql,需要的可以參考一下2022-02-02
Java8新特性之Collectors.joining()實(shí)例詳解
在項(xiàng)目中我們常常要對(duì)list集合的數(shù)據(jù)做一些字符串拼接/處理等相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于Java8新特性之Collectors.joining()的相關(guān)資料,需要的朋友可以參考下2023-01-01
Maven+Tomcat8 實(shí)現(xiàn)自動(dòng)化部署的方法
本篇文章主要介紹了Maven+Tomcat8 實(shí)現(xiàn)自動(dòng)化部署的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
SpringDataJpa如何使用union多表分頁(yè)條件查詢(xún)
這篇文章主要介紹了SpringDataJpa如何使用union多表分頁(yè)條件查詢(xún),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
解決Mybatis在IDEA中找不到mapper映射文件的問(wèn)題
這篇文章主要介紹了解決Mybatis在IDEA中找不到mapper映射文件的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10

