SpringMvc+Mybatis+Pagehelper分页详解

作者:Net-Bean 时间:2021-08-13 14:15:11 

最近公司需要做一个告警页面的功能,需要分页,查了很多资料发现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分页详解网站的支持!

来源:http://blog.csdn.net/qq_32715873/article/details/54016797

标签:springmvc,mybatis,分页
0
投稿

猜你喜欢

  • Java 归并排序算法、堆排序算法实例详解

    2023-11-25 09:43:25
  • Android中实现根据资源名获取资源ID

    2023-06-20 04:18:30
  • Java集合中的fail-fast(快速失败)机制详解

    2023-05-10 16:31:33
  • Java中synchronized的几种使用方法

    2023-06-19 16:33:28
  • Java8中stream和functional interface的配合使用详解

    2023-02-27 22:44:51
  • 在SpringBoot中通过jasypt进行加密解密的方法

    2023-11-15 21:29:23
  • IDEA部署JavaWeb项目到Tomcat服务器的方法

    2023-11-02 23:21:22
  • IDEA Error:java:无效的源发行版:13的解决过程

    2023-11-25 10:07:19
  • Springboot 内部服务调用方式

    2023-08-24 00:32:20
  • java算法之Math.random()随机概率玩法实例演示

    2023-11-28 23:32:17
  • Java实现登录与注册页面

    2023-04-17 03:21:20
  • netty pipeline中的inbound和outbound事件传播分析

    2023-08-27 06:57:00
  • Java String不可变性实现原理解析

    2023-11-09 23:15:53
  • spring validation多层对象校验教程

    2023-11-27 15:17:49
  • Java基于rest assured实现接口测试过程解析

    2022-07-25 09:30:25
  • java 字段值为null,不返回该字段的问题

    2023-07-13 10:32:34
  • Spring MVC入门_动力节点Java学院整理

    2023-11-03 20:35:31
  • Java中HashMap里面key为null存放到哪

    2023-11-10 02:46:47
  • SpringCloud实战之Zuul网关服务

    2023-01-30 11:33:53
  • springboot+gradle 构建多模块项目的步骤

    2023-02-19 00:33:31
  • asp之家 软件编程 m.aspxhome.com