自定义分页实现

使用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、最后:还是没有最后了吧,不知道要说些什么了!!!!

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值