美文网首页程序员
对查询出来的数据数据进行分页

对查询出来的数据数据进行分页

作者: 孙浩j | 来源:发表于2017-12-03 16:04 被阅读27次

采用DAO层设计模式
详解
1.dao包:1.通用Dao类(实现增删改查)2.EmpDao(实现Emp的一些操作)3.EmpDaoImpl(具体操作Emp操作的类)
2.pojo具体类包1.Emp类
3.工具类包 1.JDBCTools 2.Page
4.测试类包

思想:用面向对象的思维进行思考,进行分页就要建立一个页码类

1.页码类应该有当前页码的属性
2.上一页下一页也就是对当前页码的操作,因此建立两个对当前页码操作的方法
3.而首页可以让当前页等于1,尾页需要等于总页数
4.因此我们需要一个总页数属性
5.总页数就等于数据库数据的条数%每一页的数据
6.这样每一页就可以对应一定数量数量的数据,这是我们要建立一个集合装每一页的数据。
7.如何通过页码对应数据库的数据呢?,这样我们就可以用到limit这个方法了

public class Page <T>{
    private int pageNo;  //当前页
    private int pageSize;  //每一页的数据个数
    private int totalNum;   //总数据
    private List<T> list=new ArrayList<>();  //装数据的集合
//这里可以通过get或者set方法控制当前页是合法
    public int getPageNo() {  
        if(pageNo<1){ //当前页小于1,返回1
            return 1;
        }
        if(pageNo>getTotalPageNum()){  //大于总页数,返回总后一页
            return getTotalPageNum();
        }   
        return pageNo;
    }
    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public int getTotalNum() {
        return totalNum;
    }
    public void setTotalNum(int totalNum) {
        this.totalNum = totalNum;
    }
    
    public int getTotalPageNum(){  //得到总页数
        
        if(totalNum%pageSize==0){  //总数据除以每页的数据条数
            return totalNum%pageSize;
        }else{
            return totalNum%pageSize+1;
        }
    }
    
    //获取上一页  
    
    public int getPrePage()
    {
        if(getPageNo() > 1)
            return getPageNo() - 1;
        return getPageNo();
    }
    
    
    //获取下一页  
    
    public int getNextPage()
    {
        if(getPageNo() < getTotalPageNum())
            return getPageNo() + 1;
        return getPageNo();
    }
    public Page(int pageNo, int pageSize, int totalNum, List<T> list) {
        super();
        this.pageNo = pageNo;
        this.pageSize = pageSize;
        this.totalNum = totalNum;
        this.list = list;
    }
    public List<T> getList() {
        return list;
    }
    public void setList(List<T> list) {
        this.list = list;
    }
}

具体实现类里包括分页操作

public class EmpDAOImpl extends DAO<Emp> implements EmpDAO{ 

    @Override
    public int getCount() throws Exception {    //用于获取分页的总数据是多少
        Connection conn = JDBCTools.getConnection();
        String sql = "SELECT count(*) from emp";
        Long in =  queryForColumn(conn, sql);
        int ins=Integer.parseInt(""+in);
        return ins;
    }

    @Override
    public Page<Emp> findAll(int pageNo) throws Exception {  //获取当前页码的数据
        Connection conn=JDBCTools.getConnection();
        int begin=(pageNo-1)*3;            
        String sql="select * from emp Limit ?,3";
        List<Emp> list=queryForList(conn, sql,begin);
        Page page=new Page<>(pageNo, 3, (int)getCount(), list);
        return page;
    }
}

测试类中上一页,下一页调用page里的方法获取当前页数就可以,首页,尾页,只需要把当前页数设置为1和最后一页就可以了

相关文章

  • 对查询出来的数据数据进行分页

    采用DAO层设计模式详解1.dao包:1.通用Dao类(实现增删改查)2.EmpDao(实现Emp的一些操作)3....

  • sql常见问题

    一对多分页 查询数量时可以使用去重 limit分页时可以用group by 这样就不会将重复的数据进行分页 导致丢失数据

  • JPA Specification禁用总数查询

    背景 JPA specification查询使用Pageable进行分页查询,返回的Page对象会查询数据的总数用...

  • MySQL百万级数据量分页查询方法及其优化建议

    通常我们使用offset+limit的方式进行分页查询,然而随着数据表数据量越来越大,这种分页查询的方式性能也会随...

  • 11 分页,链接查询

    --分页 -- limit start ,count -- 限制查询出来的数据个数 select * from s...

  • 使用`limit`和`offset`进行数据分页

    问题 当使用数据库查询数据,并且返回的数据行数很多时,往往需要对数据进行分页(pagination),以便UI或者...

  • MySQL03

    DQL查询语句 分页查询 分组函数 分组查询 子查询 多表连接查询 1、分页查询 当数据库中数据过多时,不能一次全...

  • Mybatis分页的自我理解

    mybatis分页思想: 当查询的数据量很大时需要分页显示,然而不同的数据库分页查询也不同;mybatis采取的策...

  • mybatis 一对多分页查询数据条数不匹配解决的全部内容

    问题:当使用一对多对数据进行分页查询的时候,数据条数与数据库查询的条数不一致的问题,在页面上展示的时候,原本一条数...

  • 大数据量分页

    1,大数据量分页查询 limit 换成 2,对每条记录添加一列页码字段 对大量数据旧的分页数据,实际上是固定的,变...

网友评论

    本文标题:对查询出来的数据数据进行分页

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