商品信息进行分页展示(一看就会)

如果我们要进行分页展示的话页面上肯定要显示这些数据:商品信息,总页数,当前页当然了还有首页,尾页,上一页,下一页也可以出现在页面中,当然了我们还要在实体中写商品总个数,为了计算出一共有多少页,因此我们只需要将这些数据封装到实体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封装值得时候需要去从数据库中查找即可,比如我们第一页要查找10条数据,sql语句应该是:select *from tbl_book limit 0,10;  对于limit后面所写得数据可以这样理解:

第一页: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.totalPage }页/当前第${pageBean.currentPage }页

代码大致是这样的,分页代码不难,只要能将PageBean编写出来,代码基本上就能完成一半了

你可能感兴趣的:(java,javaweb)