分页实现——分页的dao实现

发表时间:2017-05-15 16:29:04 浏览量( 25 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

有了数据库分页的基础后,java代码实现分页就只是调用这个sql语句就可以了,但是为了更好的支持分页的算法,我们需要在dao层把分页的算法封装一下,这样模型层调用和页面展示的时候才能更加方便。

一、封装一个分页对象

新建一个Page类,把分页的算法封装到这个类里面。

   public class Page {        private int itemCount;//总条数    private int pageCount;//总页数    private int pageSize;//每页显示条数    private int currentPage;//当前页    private int itemStart;//开始位    private int itemEnd;//结束位            public Page(){        currentPage=1;        pageSize=10;    }    public int getItemCount() {        return itemCount;    }    public void setItemCount(int itemCount) {        this.itemCount = itemCount;    }    public int getPageSize() {        return pageSize;    }    public void setPageSize(int pageSize) {        this.pageSize = pageSize;    }    public int getCurrentPage() {        return currentPage;    }    public void setCurrentPage(int currentPage) {        this.currentPage = currentPage;    }    public int getItemStart() {        return (currentPage-1)*pageSize;    }    public int getItemEnd() {        return getItemStart()+pageSize;    }    //101  10  100/10  总条数/每页显示条数    public int getPageCount() {        return itemCount%pageSize==0?itemCount/pageSize:(itemCount/pageSize+1);    }}

二、dao层的分页查询

这里我们除了要查询出数据之外,我们还需要获得一些分页的信息,比如总页数和总条数等等,所有在查询的时候我们还需要查询出总条数出来,这里也是使用数据库统计函数统计出来,由于mysql和oracle的sql代码和需要传递的参数是不同的,所以需要根据你当前连接数据库决定你如何写这个代码,下面先先看看mysql的具体代码:

   public List<User> getUserForPage(Page page) {		List<User> users = new ArrayList<User>();		try {			getCon();			//统计数据			String sqlcount="select count(*) from tb_user" ;			preExe(sqlcount, null);			ResultSet rscount=preparedStatement.executeQuery();			if(rscount.next()){				int count=rscount.getInt(1);				page.setItemCount(count);			}									String sql = "select * from tb_user  limit ?,?";			preExe(sql, new Object[]{page.getItemStart(),page.getPageSize()}); //oracle实现//String sql//=" select *  from(select t.* , rownum rn  from ( select * from tb_user) t where rownum<=?)  where rn >?;//preExe(sql, new Object[]{page.getItemStart(),page.getItemEnd()});									resultSet = preparedStatement.executeQuery();			while (resultSet.next()) {				User user = new User();				user.setPass(resultSet.getString("pass"));				user.setUid(resultSet.getInt("uid"));				user.setUname(resultSet.getString("username"));				users.add(user);			}		} catch (ClassNotFoundException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} catch (SQLException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return users;		// 信息		// 共有 95 条数据,每页显示10条    当前是第 5 页 ,共有 10 页	}

三、测试

我们现在这里写一个main方法测试一下是否能成功,代码如下:

public static void main(String[] args) {
    UserDao userDao = new UserDao();
    Page page=new Page();
    page.setCurrentPage(10);
    List<User> users=userDao.getUserForPage(page);
    for(User user:users){
        System.out.println(user.getUname());
    }
    System.out.println("共有 "+page.getItemCount()+" 条数据,每页显示"+page.getPageSize()+"条
    当前是第 "+page.getCurrentPage()+" 页 ,共有 "+page.getPageCount()+"页");
}