学习目标:
1、掌握Java端的分页算法
2、根据业务灵活的使用分页算法
学习过程:
有了数据库分页的基础后,java代码实现分页就只是调用这个sql语句就可以了,但是为了更好的支持分页的算法,我们需要在dao层把分页的算法封装一下,这样模型层调用和页面展示的时候才能更加方便。
一、封装一个分页对象
新建一个Page类,把分页的算法封装到这个类里面。
public class Page {
private int currentPage;
private int startItem;//起始位
private int endItem;//起始位
private int pageSize;//每页显示的数量
private int pageCount;//总页数
private int itemCount;//总条数
public Page(){
this.currentPage=1;
this.pageSize=10;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
if(currentPage<1){
currentPage=1;
}
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getItemCount() {
return itemCount;
}
public void setItemCount(int itemCount) {
this.itemCount = itemCount;
}
public int getStartItem() {
return (currentPage-1)*pageSize;
}
public int getEndItem() {
return getStartItem()+pageSize;
}
public int getPageCount() {
return itemCount%pageSize==0?itemCount/pageSize:(itemCount/pageSize+1);
//100/10=10
//99/10=9....1
/*if(itemCount%pageSize==0){
return itemCount/pageSize;
}else{
return itemCount/pageSize+1;
}*/
}
}
二、dao层的分页查询
这里我们除了要查询出数据之外,我们还需要获得一些分页的信息,比如总页数和总条数等等,所有在查询的时候我们还需要查询出总条数出来,这里也是使用数据库统计函数统计出来,由于mysql和oracle的sql代码和需要传递的参数是不同的,所以需要根据你当前连接数据库决定你如何写这个代码,下面先先看看mysql的具体代码:我们现在这里写一个main方法测试一下是否能成功,代码如下:
public List<User> getUserForPage(Page page){
List<User> users = new ArrayList<User>();
try {
getCon();
//计算总条数
String sqlcount="select count(*) from tb_user";
preExe(sqlcount);
ResultSet rscount=ps.executeQuery();
if(rscount.next()){
page.setItemCount(rscount.getInt(1));
}
rscount.close();
//mysql
String sql = "select * from tb_user limit ?,?";
//oracle
//String sql=" select * from (select t.*,rownum rn from (select * from tb_user order by user_id) t where rownum<=?) where rn>?";
preExe(sql,page.getStartItem(),page.getPageSize());
rs = ps.executeQuery();
while (rs.next()) {
User user = new User();
user.setUsername(rs.getString("username"));
user.setSex(rs.getInt("sex"));
user.setUserId(rs.getInt("user_id"));
users.add(user);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
closeAll();
}
return users;
}
public static void main(String[] args) {
UserDao userDao = new UserDao();
Page page=new Page();
page.setCurrentPage(1);
List<User> users=userDao.getUserForPage(page);
for(User user:users){
System.out.println(user.getUserId()+":"+user.getUsername());
}
System.out.println("共有 "+page.getItemCount()+" 条数据,每页显示"+page.getPageSize()+"条 当前是第 "+page.getCurrentPage()+" 页 ,共有 "+page.getPageCount()+" 页");
}