如果我们要进行分页展示的话页面上肯定要显示这些数据:商品信息,总页数,当前页当然了还有首页,尾页,上一页,下一页也可以出现在页面中,当然了我们还要在实体中写商品总个数,为了计算出一共有多少页,因此我们只需要将这些数据封装到实体PageBean中即可,在这里我使用MVC三层架构去进行调用,最终获得数据并进行封装,显示到页面上。
1:因此我们先编写实体PageBean(我就不生成get()和set()方法了)
package cn.itcast.domain;
import java.util.ArrayList;
import java.util.List;
public class PageBean {
//当前页
private int currentPage;
//当前页显示的商品个数
private int currentCount;
//总页数
private int totalPage;
//商品总个数
private int totalCount;
//每页显示的商品
private List bookList=new ArrayList();
}
2:我们为了方便起见,先开始编写Controller层,我们清楚的时我们我去逐步的调用service层,然后调用dao层去查找数据,然而我们查找的条件应该是要查询第几页的数据,所以我们要传过去当前页码数,我们最开始可以将代码简单编写为,因为我们还不知道时第几页,可以先设置为第1页:
@WebServlet("/bookList")
public class BookListServlet extends HttpServlet {
private static BookService bookService=new BookServiceImpl();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
PageBean pageBean=new PageBean();
int countPage=1;
int currentCount=10;
pageBean=bookService.bookPageBean(countPage,currentCount);
//System.out.println(pageBean);
if(pageBean!=null){
request.setAttribute("pageBean",pageBean);
request.getRequestDispatcher("showBooks.jsp").forward(request, response);
}else{
System.out.println("查询失败");
}
}
}
3:调用service层方法编写service层(将我们刚才的在实体PageBean所写的内容全部封装上数据):
public class BookServiceImpl implements BookService {
private BooksDao bookDao =new BooksDaoImpl();
private MessageDao messageDao=new MessageDaoImpl();
@Override
public PageBean bookPageBean(int countPage,int currentCount) {
// TODO Auto-generated method stub
PageBean pageBean=new PageBean();
//显示当前第几页
pageBean.setCurrentPage(countPage);
//显示一页的个数
pageBean.setCurrentCount(currentCount);
//总个数
int totalCount=bookDao.queryBookCount();
pageBean.setTotalCount(totalCount);
//总页数
int totalPage=(int)Math.ceil(1.0*totalCount/currentCount);
pageBean.setTotalPage(totalPage);
//商品信息
List listBook=bookDao.queryBookPageBean(countPage, currentCount);
pageBean.setBookList(listBook);
return pageBean;
}
}
在我们service中为一共有多少个数据时负值时,我们还不知道是多少,所以需要去查找数据库,调用dao层的方法,最后将查找到的数据返回即可
public class BooksDaoImpl extends DBUtils implements BooksDao {
@Override
public int queryBookCount() {
String sql="select count(*) as count from tbl_book";
int count=0;
try {
super.getConnection();
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()){
count=rs.getInt(1);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return count;
}
}
我们在去给PageBean的List
第一页:limit 0,10 第二页:limit 10,10 第三页:limit 20,10 第四页:limit 30,10
所以limit的第一个参数可以总结的公式就是(当前页-1)*(每页显示的数量)
所以我们的方法代码可以写为(在这里我自己封装了一个查询方法,后面我会给出来):
public List queryBookPageBean(int currentPage,int currentCount) {
// TODO Auto-generated method stub
String sql="select *from tbl_book limit ?,?";
int count=(currentPage-1)*currentCount;
Object[] obj={count,currentCount};
return super.executeQuery(sql, Book.class,obj);
}
现在可以编写代码去进行测试,成功后就可以在回响到页面,我呢是这样写的
代码大致是这样的,分页代码不难,只要能将PageBean编写出来,代码基本上就能完成一半了