最近公司需要做一个告警页面的功能,需要分页,查了很多资料发现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分页详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对的支持!
更多springmvc+mybatis+pagehelper分页详解。