商品情報をページングする

5367 ワード

もし私たちがページングを行うなら、ページには必ずこれらのデータが表示されます.商品情報、総ページ数、現在のページにはもちろんトップページ、末尾ページ、前ページ、次ページもページに表示されます.もちろん、エンティティに商品の総個数を書いて、全部で何ページあるかを計算します.そのため、これらのデータをエンティティPageBeanにカプセル化するだけでいいです.ここではMVC 3階層アーキテクチャを使用して呼び出し、最終的にデータを取得してカプセル化し、ページに表示します.
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層の作成を開始します.私たちが知っているときはサービス層を徐々に呼び出し、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:サービス層メソッドを呼び出してサービス層を作成します(エンティティ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;
	}
}

サービスで合計何個のデータがあるか負の値はまだ分からないので、データベースを検索し、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のリストをカプセル化する価値がある場合は、データベースから検索する必要があります.例えば、最初のページで10個のデータを検索するには、sql文はselect*from tbl_である必要があります.book limit 0,10;limitの後に書かれたデータについては、次のように理解できます.
第1ページ:limit 0,10第2ページ:limit 10,10第3ページ:limit 20,10第4ページ: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 ,