SpringMvc+Mybatis+Pagehelper分页详解
最近公司需要做⼀个告警页⾯的功能,需要分页,查了很多资料发现PageHelper⽐较合适
故写⼀篇从零开始的PageHelper使⽤的教程,也记录下忙活⼀天的东西
1.⾸先需要在项⽬中添加PageHelper的依赖,这⾥我⽤的Maven添加
1 2 3 4 5<dependency>
<groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
2.在mybatis的配置⽂件中添加对pagehelper 的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32<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"/>spring mvc和boot区别
<!-- 该参数默认为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的类来储存分页的信息
1
public class PageBean<T> implements Serializable {
private static final long serialVersionUID = 1L;
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56    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 = PageNum();        this.pageSize = PageSize();
this.pages = Pages();
this.list = page;
this.size = page.size();
}
}
public long getTotal() {
return total;
}
public void setTotal(long 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;
}
57  }
下⾯就是业务逻辑的代码了
4.⾸先从l⽂件写起,操作数据库的sql,查出我们所需要的数据
1 2 3 4 5 6 7<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的接⼝⽅法
1public List<AlarmParamModel> selectallList(AlarmParamModel model);
6.service的接⼝⽅法
1Datagrid selectallList(AlarmParamModel model,int pageNum, int pageSize);
7.service的实现类
这⾥需要注意下,是分页的主要逻辑。pageNum表⽰页码,pageSize表⽰每页显⽰的数⽬,startPag⽅法是初始的页⾯,orderBy⽅法是将数据按某个字段进⾏排序,这⾥我⽤的是occr_time的降序(desc)
1 2 3 4 5 6 7 8public Datagrid selectallList(AlarmParamModel model,int pageNum, int pageSize){    PageHelper.startPage(pageNum, pageSize);
List<AlarmParamModel> list = this.alarmMgrMapper.selectallList(model);
PageInfo<AlarmParamModel> pageInfo = new PageInfo<AlarmParamModel>(list);    Datagrid datagrid = new Total(),List());
return datagrid;
}
8.注意到我这边⽤了⼀个Datagrid类,是⽤于向前台传数据⽤的类,包括total(总数)和rows(数据)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15public class Datagrid {
private long total;
private List rows = new ArrayList<>();  public Datagrid() {
super();
}
public Datagrid(long total, List rows) {    super();
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
16 17 18 19 20 21 22 23 24    al = total;
}
public List getRows() {
return rows;
}
public void setRows(List rows) {    ws = rows;
}
}
9.开始写controller层,调⽤之前写的⽅法
这⾥需要注意的是,offset和limit 是前台传来的页码和每页显⽰的数量,区别于bootstraptable 的offset和limit,那个offset表⽰的是偏移量,即如果每页显⽰10条数据,那么bootstrap中的第⼆页表⽰的offset就是10,第⼀页和第三页分别是0和20。⽽我这⾥的offset 就是指代的pageNum。
1 2 3 4 5 6 7 8@RequestMapping(value = "/AlarmInfo/list", method = {RequestMethod.GET,Request
Method.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 的配置贴⼀下1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27$('#tb_departments').bootstra
pTable({
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 ,
28 29      paginationHAlign:"left",
paginationDetailHAlign:"right",
这⾥我没有⽤bootstrap⾃带的分页按钮,我是⾃⼰⽤jq写的按钮组,在下⼀篇⽂章我会把按钮代码贴出来,这样可⾃定义的程度会⾼⼀些~  你也可以直接⽤bootstraptable⼦带的分页按钮,把配置改下就好。
以上所述是⼩编给⼤家介绍的SpringMvc+Mybatis+Pagehelper分页详解,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对脚本之家⽹站的⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。