Java手写PageBean实现分页

共 3240字,需浏览 7分钟

 ·

2021-11-16 22:03

手写PageBean分页对象


提示:

本次测试使用环境为:SpringBoot +Mybatis Plus Mysql,如使用纯servlet可自行修改代逻辑。


思路:

  1. 需要创建个PageBean泛型对象进行存储分页数据。

  2. 查询总页数

  3. 查询分页数据,并封装分页对象数据

  4. 返回分页数据


步骤:

  1. Controller接收才当前页参数和取多少条参数

  2. 调用Service处理数据

  3. Dao获取并返回PageBean分页数据对象


1. PageBean泛型对象

把需要用到的属性进行封装,T泛型为可传入任意对象。

/**
 * PageBean 分页工具对象
 *
 * @param  数据类型
 */

public class PageBean<T{

    private Integer totalPage;//总页码
    private Integer totalCount;//总记录数
    private Integer currentPage; //当前页码
    private Integer pageSize; //每页显示的记录数
    private List list; //每页的数据List集合
    
}

返回个给页面的参数对象就是该PageBean对象,包含分页数据。


2. Controlle层

此处直接调用Dao层,不写Service,有需要可自己写。

/**
 * controller层
 * 返回json数据
 *
 * @Author 黄柏茗
 * @Date 2021-11-14
 */

@RestController
@RequestMapping("/test")
public class TestController {

    //注入Dao层
    @Autowired
    private UserDao userDao;

    /**
     * 获取分页数据
     *
     * @param currentPage 当前页
     * @param pageSize    获取多少条
     * @return
     */

    @GetMapping("/getPagingData")
    public PageBean getPagingData(Integer currentPage, Integer pageSize) {
        System.err.println("当前页:" + currentPage + ",获取" + pageSize + "条数据");
        return userDao.getPaging(currentPage, pageSize);
    }

}


3. Service层

本文不写service层,按需自写。


4. Dao数据访问层

获取分页数据关键部分在此处,注意看步骤就行。

/**
 * Dao层
 *
 * @Author 黄柏茗
 * @Date 2021-11-14
 */

@Repository
public class UserDao {

    //注入mapper
    @Autowired
    private UserMapper userMapper;

    /**
     * 获取总记录条数
     *
     * @return 总记录条数
     */

    public Integer getTotalCount() {
        QueryWrapper wrapper = new QueryWrapper<>();
        //获取总记录条数
        Integer count = userMapper.selectCount(wrapper);
        return count;
    }

    /**
     * 获取分页数据
     *
     * @param currentPage 当前页
     * @param pageSize    显示条数
     * @return
     */

    public PageBean getPaging(Integer currentPage, Integer pageSize) {
        //1.创建空PageBean对象
        PageBean pageBean = new PageBean<>();

        //2.查询总记录数
        Integer totalCount = getTotalCount();

        //3.计算总页数
        //总记录数量/每页数量=总页数
        double total = (double)totalCount / pageSize;
        //向上取整  如23/10=2.3  取整为3页
        total = Math.ceil(total);

        //4.设置从哪开始获取数据
        Integer start = (currentPage - 1) * pageSize;

        //5.获取分页数据列表
        List list = userMapper.getPagingMapper(start, pageSize);
        //要返回的数据
        pageBean.setTotalCount(totalCount);//总记录数
        pageBean.setCurrentPage(currentPage);//当前页
        pageBean.setPageSize(pageSize);//取多少条数据
        pageBean.setTotalPage((int) total);//总页数
        pageBean.setList(list);//分页数据

        //6.返回PageBean分页对象
        return pageBean;
    }
}


5. Mapper层

操作数据库,使用的是Mybats Plus,如不是Mybatis可忽略mapper,在Dao层直接获取数据,在此为了方便获取数据,使用MP进行测试。


/**
 * Mapper层
 * 使用的 Mybatis Plus
 * @Author 黄柏茗
 * @Date 2021-11-14
 */

@Mapper
public interface UserMapper extends BaseMapper<User{

    /**
     * 获取分页数据列表
     *
     * @param start 开始位置
     * @param pageSize 获取条数
     * @return
     */

    @Select("select * from tb_User limit ${start},${pageSize}")
    public List getPagingMapper(@Param("start") Integer start, @Param("pageSize") Integer pageSize);
}

注意:此处传入的 start  和 pageSize 参数在表字段中是没有的,在mybatis中需要使用 @Param("start")  标注,才可正常传入数据,如果不是mybatis,则可以不使用。


测试:


页面数据展示:

页面数据渲染在此不做测试,可自行获取到数据进行渲染。



总结:

核心部分在Dao,注意看嗷,分页功能已实现,开熏。


浏览 133
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报