SpringMvc+Mybatis+Pagehelper分页详解

网友投稿 324 2023-06-20


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,查出我们所需要的数据

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

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");

http:// 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: http://"id", //每一行的唯一标识,一般为主键列

shiqZJeFOnJlowToggle:false, //是否显示详细视图和列表视图的切换按钮

cardView: false, //是否显示详细视图

detailView: true,

detailFormatter:detailFormatter ,

paginationHAlign:"left",

paginationDetailHAlign:"right",

这里我没有用bootstrap自带的分页按钮,我是自己用jq写的按钮组,在下一篇文章我会把按钮代码贴出来,这样可自定义的程度会高一些~  你也可以直接用bootstraptable子带的分页按钮,把配置改下就好。

以上所述是给大家介绍的SpringMvc+Mybatis+Pagehelper分页详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序 Canvas增强组件实例详解及源码分享
下一篇:bootstrap laydate日期组件使用详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~