最近公司需要做一個告警頁面的功能,需要分頁,查了很多資料發現PageHelper比較合適
故寫一篇從零開始的PageHelper使用的教程,也記錄下忙活一天的東西
1.首先需要在項目中添加PageHelper的依賴,這裡我用的Maven添加
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.6</version> </dependency>
2.在mybatis的配置文件中添加對pagehelper 的配置
<configuration> <plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageHelper"> <!-- 4.0.0以后版本可以不设置该参数 --> <property name="dialect" value="mysql"/> <!-- 该参数默认为false --> <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 --> <!-- 和startPage中的pageNum效果一样--> <property name="offsetAsPageNum" value="true"/> <!-- 该参数默认为false --> <!-- 设置为true时,使用RowBounds分页会进行count查询 --> <property name="rowBoundsWithCount" value="true"/> <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 --> <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)--> <property name="pageSizeZero" value="true"/> <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 --> <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 --> <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 --> <property name="reasonable" value="true"/> <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 --> <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 --> <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 --> <!-- 不理解该含义的前提下,不要随便复制该配置 --> <!-- <property name="params" value="pageNum=start;pageSize=limit;"/> --> <!-- 支持通过Mapper接口参数来传递分页参数 --> <property name="supportMethodsArguments" value="true"/> <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page --> <property name="returnPageInfo" value="check"/> </plugin> </plugins> </configuration>
3.添加一個PageBean的類來儲存分頁的信息
public class PageBean<T> implements Serializable { private static final long serialVersionUID = 1L; private long total; //总记录数 private List<T> list; //结果集 private int pageNum; //第几页 private int pageSize; //每页记录数 private int pages; // 总页数 private int size; //当前页的数量<=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; } }
下面就是業務邏輯的程式碼了
4.首先從mapper.xml檔寫起,操作資料庫的sql,查出我們所需要的資料
<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);
介面方法
Datagrid selectallList(AlarmParamModel model,int pageNum, int pageSize);
7.service的實作類別
這裡需要注意下,是分頁的主要邏輯。 pageNum表示頁碼,pageSize表示每頁顯示的數目,startPag方法是初始的頁面,orderBy方法是將資料依某個欄位排序,這裡我用的是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; }
88 .注意到我這邊用了一個Datagrid類,是用於向前台傳數據用的類,包括total(總數)和rows(數據)
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.開始寫controller層,調用之前寫的方法 這裡要注意的是,offset和limit 是前台傳來的頁碼和每頁顯示的數量,區別於bootstraptable 的offset和limit,那個offset表示的是偏移量,即如果每頁顯示10條數據,那麼bootstrap中的第二頁表示的offset就是10,第一頁和第三頁分別是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. 到現在前台的請求已經可以取得後台的資料並且分頁了,我再將我的前台bootstrap table 的設定貼一下
$('#tb_departments').bootstrapTable({ url: 'http://10.1.234.134:8088/api/AlarmInfo/list', //请求后台的URL(*) method: 'get', //请求方式(*) striped: false, //是否显示行间隔色 cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination: true, //是否显示分页(*) onlyInfoPagination:true, //设置为 true 只显示总数据数,而不显示分页按钮。需要 pagination='True' sortable: true, //是否启用排序 sortOrder: "asc", //排序方式 queryParams: oTableInit.queryParams,//传递参数(*) sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*) pageNumber:1, //初始化加载第一页,默认第一页 pageSize: 10, //每页的记录行数(*) pageList: [10, 25, 50, 100], //可供选择的每页的行数(*) search: false, //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 strictSearch: true, showColumns: false, //是否显示所有的列 showRefresh: false, //是否显示刷新按钮 minimumCountColumns: 2, //最少允许的列数 clickToSelect: true, //是否启用点击选中行 checkboxHeader:true, //add height: 500, //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度 uniqueId: "id", //每一行的唯一标识,一般为主键列 showToggle:false, //是否显示详细视图和列表视图的切换按钮 cardView: false, //是否显示详细视图 detailView: true, detailFormatter:detailFormatter , paginationHAlign:"left", paginationDetailHAlign:"right",的分頁按鈕,我是自己用jq寫的按鈕組,在下一篇文章我會把按鈕代碼貼出來,這樣可自訂的程度會高一些~ 你也可以直接用bootstraptable子帶的分頁按鈕,把配置改下就好。 以上所述是小編給大家介紹的SpringMvc+Mybatis+Pagehelper分頁詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對PHP中文網的支持!
更多SpringMvc+Mybatis+Pagehelper分頁詳解相關文章請關注PHP中文網!

本文分析了2025年的前四個JavaScript框架(React,Angular,Vue,Susve),比較了它們的性能,可伸縮性和未來前景。 儘管由於強大的社區和生態系統,所有這些都保持占主導地位,但它們的相對人口

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

Node.js 20通過V8發動機改進可顯著提高性能,特別是更快的垃圾收集和I/O。 新功能包括更好的WebSembly支持和精製的調試工具,提高開發人員的生產率和應用速度。

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

本文介紹了SnakeyAml中的CVE-2022-1471漏洞,這是一個允許遠程代碼執行的關鍵缺陷。 它詳細介紹瞭如何升級春季啟動應用程序到Snakeyaml 1.33或更高版本的降低風險,強調了依賴性更新

本文使用lambda表達式,流API,方法參考和可選探索將功能編程集成到Java中。 它突出顯示了通過簡潔性和不變性改善代碼可讀性和可維護性等好處

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器