国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

SpringMvc+Mybatis+Pagehelper分頁詳解

2019-11-26 13:19:40
字體:
來源:轉載
供稿:網友

最近公司需要做一個告警頁面的功能,需要分頁,查了很多資料發現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); 

6.service的接口方法

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;   } 

8.注意到我這邊用了一個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", 

這里我沒有用bootstrap自帶的分頁按鈕,我是自己用jq寫的按鈕組,在下一篇文章我會把按鈕代碼貼出來,這樣可自定義的程度會高一些~  你也可以直接用bootstraptable子帶的分頁按鈕,把配置改下就好。

以上所述是小編給大家介紹的SpringMvc+Mybatis+Pagehelper分頁詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富锦市| 韶关市| 无为县| 宾川县| 富川| 腾冲县| 武夷山市| 芒康县| 屯昌县| 万源市| 保康县| 苗栗县| 罗平县| 中阳县| 郧西县| 南木林县| 呼和浩特市| 桃江县| 白沙| 怀集县| 德保县| 山阴县| 佛冈县| 玉山县| 台山市| 内江市| 普安县| 石阡县| 南岸区| 巨鹿县| 东宁县| 乌拉特中旗| 桂平市| 富裕县| 甘谷县| 义马市| 临颍县| 定日县| 仙桃市| 河南省| 桑植县|