栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMvc+Mybatis+Pagehelper分页详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMvc+Mybatis+Pagehelper分页详解

最近公司需要做一个告警页面的功能,需要分页,查了很多资料发现PageHelper比较合适

故写一篇从零开始的PageHelper使用的教程,也记录下忙活一天的东西

1.首先需要在项目中添加PageHelper的依赖,这里我用的Maven添加

 
 com.github.pagehelper 
 pagehelper 
 4.1.6 
 

2.在mybatis的配置文件中添加对pagehelper 的配置

   
    
      
      
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
      
    
 

3.添加一个PageBean的类来储存分页的信息

public class PageBean implements Serializable { 
   private static final long serialVersionUID = 1L; 
    private long total; //总记录数 
    private List list; //结果集 
    private int pageNum; //第几页 
    private int pageSize; //每页记录数 
    private int pages; // 总页数 
    private int size; //当前页的数量<=pageSize 
 
    public PageBean(List list){ 
      if (list instanceof Page){ 
 Page page = (Page) 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 getList() { 
      return list; 
    } 
    public void setList(List 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 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 
 

5.mapper的接口方法

public List 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 list = this.alarmMgrMapper.selectallList(model); 
     PageInfo pageInfo = new PageInfo(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分页详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对考高分网网站的支持!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/148191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号