MySql実装ページング

3838 ワード

(1)ページングモデルpageBeanを作成します.3つの値が入っています.現在のページpage、1ページあたりのレコード数pageSize、開始ページstart=(page-1)*pageSize
(2)dao層でデータベースからのクエリーとレコード数の取得を実現する方法:sql.append("limit "+pagebean.getStart()+","+pagebean.getPageSize());
(3)servlet層にページングコードを実装し,ここで伝達される値は現在のページpage,総記録数total,propertiesから取得したpageSize値である.
(4)jsp表示ページでel式を用いてpageCode値を取得し,この値は生成されたページングのhtmlコード,Stringタイプである.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		
		String page=request.getParameter("page");
		if(StringUtil.isEmpty(page)){
			page="1";
		}
		
		Connection con=null;
		PageBean pb=new PageBean(Integer.parseInt(page),Integer.parseInt(PropertiesUtil.getValue("pageSize")));    //     properties      
		try {
			con=DBUtil.geCon();
			int total=DiaryDao.diaryCount(con);    //      
			String pageCode=this.genPagation(total, Integer.parseInt(page), Integer.parseInt(PropertiesUtil.getValue("pageSize")));
			request.setAttribute("pageCode", pageCode);
			request.getRequestDispatcher("mainTemp.jsp").forward(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 *       
	 * @param totalNum
	 * @param currentPage
	 * @param pageSize
	 * @return
	 */
	private String genPagation(int totalNum,int currentPage,int pageSize){
		int totalPage=totalNum%pageSize==0?totalNum/pageSize:totalNum/pageSize+1;    //     
		StringBuffer pageCode=new StringBuffer();
		pageCode.append("
トップページ";//現在のページif(currentPage==1){pageCode.append("前のページ");}Else{pageCode.append("前のページ");}for(int i=currentPage-2;itotalPage){ continue; } if(i==currentPage){ pageCode.append(""+i+""); }else{ pageCode.append(""+i+""); } } if(currentPage=totalPage){pageCode.append("次のページ");Else{pageCode.append("次のページ");}pageCode.append(「末尾ページ」);return pageCode.toString(); } public static List diaryList(Connection con,PageBean pb) throws Exception{ List diaryList=new ArrayList(); StringBuffer sb=new StringBuffer("select * from t_diary t1,t_diarytype t2 where t1.typeId=t2.diaryTypeId"); sb.append("order by t1.releaseDate desc"); if(pb!=null){ sb.append("limit "+pb.getStart()+","+pb.getPageSize()); } PreparedStatement pstmt=con.prepareStatement(sb.toString()); ResultSet rs=pstmt.executeQuery(); while(rs.next()){ Diary diary=new Diary(); diary.setDiaryId(rs.getInt("diaryId")); diary.setTitle(rs.getString("title")); diary.setContent(rs.getString("content")); diary.setReleaseDate(DateUtil.formatString(rs.getString("releaseDate"), "yyyy-MM-dd HH:mm:ss")); diaryList.add(diary); } return diaryList; }/** * 取得レコード総数*@param con*@return*@throws Exception*/public static int diaryCount(Connection con)throws Exception{StringBuffer sb=new StringBuffer("selectcount(*)as total from t_diary t 1,t_diarytype t 2 whert 1.typeId=t 2.diaryTypeId");PreparedStatementpstt=con.prepareStatement(sb.toString();Resultt Seultt Seultt Seultt(Seultt)rs=pstmt.executeQuery(); if(rs.next()){ return rs.getInt("total"); }else{ return 0; } } package com.diary.model; public class PageBean{private int page;//何ページ目private int pageSize;//1ページあたりのレコード数private int start;//開始ページpublic PageBean(int page,int pageSize){super();this.page=page;this.pageSize=page;}public int getPage() { return page; } public void setPage(int page) { this.page = page; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getStart() { return (page-1)*pageSize; } public void setStart(int start) { this.start = start; } }