美文网首页
一、分页查询的后台实现

一、分页查询的后台实现

作者: lifeline张 | 来源:发表于2018-07-15 13:19 被阅读0次

一、新闻列表实现分页查询

1.1问题引入

如果不用分页的话,第一,在一个页面上显示很多新闻,客户体验极差;第二,对于数据库来说,一次性查询成千上万条新闻,要死啊?
有没有一种现实方式,既能显示多条信息,又不需要拖动页面呢?
可以使用分页查询来解决这个问题。
使用分页查询:
1、可以在不拖动页面的情况下显示多条信息
2、并且不是在数据库里面直接去查上万条数据,而是根据分页显示的数据的容量去数据库拿相应容量的数据。

1.2学习方法

先编写分页查询sql语句,再编写分页查询方法,将分页查询分步实现。(分页查询所依赖的核心就是sql语句)

二、后台

首先要知道新闻总条数(第一个方法),浏览器界面每页显示条数,总页数(第二个方法),去数据库中分页查询数据(第三个方法)。
并且这些方法都是写在NewsDao层,在NewsDaoImpl层中实现,在Service层调用。第一、三个方法写在NewsDao中,第二个方法写在一个工具类中(因为计算总页数在好多地方都有应用,比如评论分页等)。

2.1NewsDao里面的方法及其实现类

分页查询这个方法的sql语句如下:

#分页显示新闻数据,每页显示两条,这里显示第一页
SELECT id,title,author,createdate FROM news_detail LIMIT 0,2
#分页显示新闻数据,每页显示两条,这里显示第二页
SELECT id,title,author,createdate FROM news_detail LIMIT 2,2
#分页显示新闻数据,每页显示两条,这里显示第三页
SELECT id,title,author,createdate FROM news_detail LIMIT 4,2
#公用的分页sql
#第二个数:分页后每页显示几条新闻(页面容量) pageSize
#第一个数:从第几条数据开始显示(当前页码pageNo-1)*pageSize
SELECT id,title,author,createdate FROM news_detail 
LIMIT (pageNo-1)*pageSize,pageSize

NewsDao里面的方法及其实现类:

    // 查询新闻总数量
    public int getTotalCount();
    // 分页查询数据
    public List<News> getPageNewsList(int pageNo, int pageSize);
// 查询新闻总数量
    public int getTotalCount() {
        int total = 0;
        String sql = "SELECT COUNT(1) FROM news_detail";
        Object[] params = {};
        ResultSet rs = this.executeSQL(sql, params);
        try {
            while (rs.next()) {
                total = rs.getInt(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return total;
    }
    // 分页查询新闻数据:pageNo页面代码;pageSize是页面容量
    public List<News> getPageNewsList(int pageNo, int pageSize) {
        List<News> list = new ArrayList<News>();
        String sql = "SELECT id,title,author,createdate FROM news_detail order by createdate desc LIMIT ?,?";
        Object[] params = {(pageNo-1)*pageSize,pageSize};
        ResultSet rs = this.executeSQL(sql, params);
        try {
            while (rs.next()) {
                News news = new News();
                int id = rs.getInt("id");
                String newsTitle = rs.getString("title");
                String author = rs.getString("author");
                Timestamp createDate = rs.getTimestamp("createDate");
                news.setId(id);
                news.setTitle(newsTitle);
                news.setAuthor(author);
                news.setCreateDate(createDate);
                list.add(news);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

2.2Service层的实现类和方法

代码如下:

 // 查询新闻总数量
    public int getTotalCount();
    
    // 分页查询数据
    public List<News> getPageNewsList(int pageNo, int pageSize);`
    public int getTotalCount() {
        return newsdao.getTotalCount();
    }

    public List<News> getPageNewsList(int pageNo, int pageSize) {
        return newsdao.getPageNewsList(pageNo, pageSize);
    }

2.3在util包中写第二个方法:在知道页面容量和新闻总数的情况下计算总页数

package cn.kgc.util;

// 分页工具类:计算总页数(新闻总条数/页面容量)
public class PageSupport {
    // 当前页面
    private int currentPageNo = 1;
    // 新闻总数量
    private int totalCount = 0;
    // 页面容量
    private int pageSize = 0;
    // 总页数
    private int totalPageCount = 0;
    public int getCurrentPageNo() {
        return currentPageNo;
    }
    public void setCurrentPageNo(int currentPageNo) {
        if (currentPageNo > 0) {
            this.currentPageNo = currentPageNo;
        }
    }
    public int getTotalCount() {
        return totalCount;
    }
    // 计算总页数的方法
    public void setTotalPageCountByRS() {
        if (this.totalCount % this.pageSize == 0) {
            this.totalPageCount = this.totalCount / this.pageSize;
        } else {
            this.totalPageCount = this.totalCount / this.pageSize + 1;
        }
    }
    // 总数量:设置总数量时,计算出来总页数
    public void setTotalCount(int totalCount) {
        if (totalCount >= 0) {
            this.totalCount = totalCount;
            // 设置总页数
            this.setTotalPageCountByRS();
        }
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        if (pageSize > 0) {
            this.pageSize = pageSize;
        }
    }
    public int getTotalPageCount() {
        return totalPageCount;
    }
    public void setTotalPageCount(int totalPageCount) {
        this.totalPageCount = totalPageCount;
    }
    
    // 流程:首先去数据库查询新闻总数量—设置新闻总数量同时计算总页数
    //  —getTotalPageCount获得总页数
}

相关文章

网友评论

      本文标题:一、分页查询的后台实现

      本文链接:https://www.haomeiwen.com/subject/qgrppftx.html