使用pagehelper分页插件的时候,遇到了不能分页的情况,在此记录一下,也可能是使用的方式不正确,请路过的大佬指正!
有如下的user_msg留言表
UserMsg实体类:
package com.hhf.house.entity;
import java.time.LocalDate;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author hhf
* @since 2020-04-07
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class UserMsg implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id",type = IdType.INPUT)
private Long id;
/**
* 消息
*/
private String msg;
/**
* 创建时间
*/
private LocalDate createTime;
/**
* 经纪人id
*/
private Long agentId;
/**
* 房屋id
*/
private Long houseId;
/**
* 用户姓名
*/
private String userName;
}
想要实现的效果:把这个表分页遍历到页面,遍历的时候显示房屋名称,经纪机构名称,如下:
我首先考虑的是往UserMsg实体类里面添加两个对象属性,一个是经纪机构Agency类,一个是房产House类,这样的方式可以实现,只是我觉得实体类太臃肿了,显得很乱!
尝试了几次后,没有解决分页插件不能分页的问题,所以我想自己写分页类,虽然功能没有那么强大,但是我的需求已经够了。
所以我建了一个Vo对象,用来页面渲染用的
package com.hhf.house.vo;
import com.hhf.house.entity.UserMsg;
import lombok.Data;
import java.io.Serializable;
@Data
public class UserMsgVo extends UserMsg{
private String agencyName;
private String houseName;
}
具体的实现:
1、创建一个PageInfo类,定义一些属性
package com.hhf.utils;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 自定义分页
*/
@Data
public class PageInfo<T> implements Serializable {
private static final long serialVersionUID = 6289664328222015781L;
private int total_rows; //总记录数 从数据库查询
private int current_page; //当前页 前端传递过来的
private int page_size; //每页条数 应该有,自定义(可写在项目配置文件中)
private int total_pages; //总页数 可以算
private int offset_row; //偏移量 可以算
private boolean hasPrev; //是否有前一页
private boolean hasNext; //是否有下一页
private List<T> list; // 存储数据
public PageInfo(int total_rows, int current_page, int page_size) {
super();
this.total_rows=total_rows;
this.current_page=current_page;
this.page_size=page_size;
// 偏移量 =(当前页-1)* 每页显示条数 -> limit offset_row,page_size
this.offset_row = ( this.current_page - 1 ) * this.page_size ;
// 总页数 = 总记录数 % 每页显示条数 == 0 如果取余为0,则总记录数=总记录数/每页显示条数 ,否则 总记录数=总记录数/每页显示条数+1
this.total_pages = this.total_rows%this.page_size ==0
? this.total_rows/this.page_size : this.total_rows/this.page_size +1;
// 当前页为1时,没有前一页
this.hasPrev=this.current_page==1 ? false:true;
// 当前页为总页数时,没有下一页
this.hasNext=this.total_pages==this.current_page ? false:true;
}
}
2、Controller:前端传过来两个参数pageNum,和pageSize,给它设置默认值:
@RequestMapping("msgList")
public String msgList(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize,
ModelMap modelMap){
List<Agency> agencys = agencyService.list();
PageInfo page = msgService.msgPageList(pageNum,pageSize);
modelMap.put("page",page);
modelMap.put("agencys",agencys);
return "/house/usermsg";
}
3、Service:
public PageInfo msgPageList(Integer pageNum, Integer pageSize) {
int totle = totleCount();
PageInfo<UserMsgVo> pageInfo = new PageInfo<>(totle,pageNum,pageSize);
List<UserMsg> list = userMsgMapper.msgList(pageInfo.getOffset_row(),pageInfo.getPage_size());
// 列表渲染准备
ArrayList<UserMsgVo> n_userMsg = Lists.newArrayList();
list.forEach(msg -> {
UserMsgVo msgVo = new UserMsgVo();
//BeanUtils.copyProperties(msg,msgVo);
Agency age = agencyService.getById(msg.getAgentId());
msgVo.setAgencyName(age.getName());
House hou = houseService.getById(msg.getHouseId());
msgVo.setHouseName(hou.getName());
msgVo.setAgentId(msg.getAgentId());
msgVo.setCreateTime(msg.getCreateTime());
msgVo.setHouseId(msg.getHouseId());
msgVo.setId(msg.getId());
msgVo.setMsg(msg.getMsg());
msgVo.setUserName(msg.getUserName());
n_userMsg.add(msgVo);
});
pageInfo.setList(n_userMsg);
return pageInfo;
}
4、mapper:(略)
5、实现的效果:
6、最后:还是没有最后了吧,不知道要说些什么了!!!!