分页

分页

    一个系统,由于数据量都会比较多,所以开发的时候都会做分页功能的
    真分页(limit)与假分页(内存中)
        真分页:匀速,用户体验还可以,用得多一点
        假分页:每一次非常慢(后面就快),还会占内存

1 创建分页对象 PageList

    把分页的所有数据封装给传给前端
    哪些属性(当前页,每页条数,首页,尾页,上一下,下一页,总页数,总条数,当前页数据)
    当前页,每页条数 -> 前台传过来
    总条数,当前页数据 -> 数据库中查出来
    上一页,下一页,总页数 -> 计算出来的

/**
 * 分页对象
 * @author Administrator
 *
 */
public class PageList<T> {

    //当前页 -> 前台传过来
    private int currentPage = 1;
    //每页条数 -> 前台传过来/自己定义
    private int pageSize = 10;
    //首页(第一页)
    private int firstPage = 1;
    //上一页 计算出来  currentPage>1?currentPage-1:1
    private int prevPage;
    //下一页 计算出来 currentPage<lastPage?currentPage+1:lastPage
    private int nextPage;
    //尾页 == 总页数
    private int lastPage;
    //总页数 计算出来 totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1
    private int totalPage;
    //总条数 -> 数据库中查询出来
    private int totalCount;
    //当前页的数据 -> 数据库中查询出来
    private List<T> data = new ArrayList<>();
    
    
    public PageList(){}
    /**
     * @param currentPage:前台传过来
     * @param pageSize:前台传过来
     * @param totalCount:数据库中查询
     * @param data:数据库中查询
     */
    public PageList(int currentPage, int pageSize, int totalCount, List<T> data) {
        this.currentPage = currentPage;
        this.pageSize = pageSize;
        this.totalCount = totalCount;
        this.data = data;
        //计算上一页  当前页>1 ? 当前页-1 : 1
        this.prevPage = this.currentPage>1 ? this.currentPage-1 : 1;
        //计算总页数 总条数%每页条数==0? 总条数/每页条数:总条数/每页条数+1
        this.totalPage = this.totalCount%this.pageSize==0?this.totalCount/this.pageSize:this.totalCount/this.pageSize+1;
        this.lastPage = this.totalPage; //最后一页就是总页数
        //计算下一页 当前页<总页数?当前页+1:总页数;
        this.nextPage = this.currentPage<this.totalPage?this.currentPage+1:this.totalPage;
    }
    //getter,setter省略
    
}
2 创建SQL条件对象 SqlCondition

    接收前台传过来的分页条件(currentPage,pageSize)

public class SqlCondition {
    //当前页
    private int currentPage = 1;
    //每页条数
    private int pageSize = 10;
    //getter,setter省略
}    

3 在dao中添加了相应的方法

    根据条件查询到数据,封装成PageList对象 返回

/**
 * 最后返回的是PageList对象,里面都要有值
 *          PageList(int currentPage, int pageSize, int totalCount, List<T> data)
 */
@Override
public PageList<Images> queryAll(SqlCondition condition) {
    //①.拿到当前页与每页条数
    int currentPage = condition.getCurrentPage();
    int pageSize = condition.getPageSize();
    //一.查询总条数
    //1.1 准备查询总条数的sql
    String sql = "select count(*) from t_image";
    //1.2执行sql拿到总条数
    Integer totalCount = jdbcTemplate.queryForObject(sql, Integer.class);
    //二.查询当前页的数据
    //2.1 计算当前页是从第几条数据开始的
    int beginIndex = (currentPage-1) * pageSize;
    //2.2 准备相应的SQL
    String dataSql = "select * from t_image limit "+beginIndex+","+pageSize;
    //2.3 执行查询功能
    List<Images> data= jdbcTemplate.query(dataSql, new BeanPropertyRowMapper<>(Images.class));
    
    //三.创建PageList对象并且返回
    PageList pageList = new PageList(currentPage,pageSize,totalCount,data);
    return pageList;
}

4 前端展示数据

    controller中的修改

@RequestMapping("/query")
public String query(SqlCondition condition,Model model){
    model.addAttribute("pageList",imageService.queryAll(condition));
    return "main";
}

    页面中的展示(循环的是pageList.data)

<c:forEach items="${pageList.data}" var="img">
...
</c:forEash>

    分页条把值加上 -> ?currentPage=1

<!--分页-->
<nav class="navbar-right">
    <ul class="pagination" id="paging">
        <li>
            <span>当前第${pageList.currentPage}页</span>
        </li>
        <li>
            <a href="/images/query?currentPage=1">
                <span aria-hidden="true">首页</span>
            </a>
        </li>
        <li>
            <a href="/images/query?currentPage=${pageList.prevPage}" aria-label="上一页">
                <span aria-hidden="true">上一页</span>
            </a>
        </li>
        <li>

        </li>
        <li>
            <a href="/images/query?currentPage=${pageList.nextPage}" aria-label="下一页">
                <span aria-hidden="true">下一页</span>
            </a>
        </li>
        <li>
            <a href="/images/query?currentPage=${pageList.lastPage}" aria-label="尾页">
                <span aria-hidden="true">尾页</span>
            </a>
        </li>
        <li>
            <span>总页数:共${pageList.totalPage}页</span>
            <span>总数据:共${pageList.totalCount}条</span>
        </li>
    </ul>
</nav>

转载于:https://www.cnblogs.com/Joezx/p/10965720.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值