sql 문장 조회를 통해 페이지 나누기

8197 단어 sql 문장
sql 문장을 통해 페이지를 나눈다. 예를 들어 SELECT * FROM users limit 3, 2는 제4조 기록부터 두 줄을 후속적으로 표시한다. 인덱스는 0부터 (서버 메커니즘) 이 방식의 장단점은 다음과 같다. 장점: 조작이 간편하고 (서버 메모리를 이용) 빅데이터 양의 조작에 적합하며 베이스 데이터베이스 서버에 보호 역할을 한다.단점: 데이터베이스와 상호작용하는 횟수가 증가하여 접근 속도가 느리다.
코드는 다음과 같습니다.
  • 우선 페이지별 정보를 정의하는 페이지빈을 정의합니다.포함: 페이지Size 페이지마다 표시되는 항목수, nowPage 현재 페이지번호, rowCount 본점수 즉 총결산과집, 페이지Count 총 페이지수, rowDate는list 집합으로 페이지마다 표시되는 결과집을 저장합니다
    public class PageBean {
    	//  
    	private int pageSize = 0;//  
    	private int nowPage = 0;//  
    	private int rowCount = 0;//  
    	private int pageCount = 0;//  
    	private List<?> rowDate = null;
    
    	//  
    	public int getPageSize() {
    		return pageSize;
    	}
    
    	public void setPageSize(int pageSize) {
    		this.pageSize = pageSize;
    	}
    
    	public int getNowPage() {
    		return nowPage;
    	}
    
    	public void setNowPage(int nowPage) {
    		this.nowPage = nowPage;
    	}
    
    	public int getRowCount() {
    		return rowCount;
    	}
    
    	public void setRowCount(int rowCount) {
    		this.rowCount = rowCount;
    	}
    
    	public int getPageCount() {
    		this.pageCount = rowCount % pageSize == 0 ? rowCount / pageSize
    				: rowCount / pageSize + 1;
    		return pageCount;
    	}
    
    	public List<?> getRowDate() {
    		return rowDate;
    	}
    
    	public void setRowDate(List<?> rowDate) {
    		this.rowDate = rowDate;
    	}
    
    	public PageBean(int pageSize, int nowPage, int rowCount, int pageCount,
    			List<?> rowDate) {
    		super();
    		this.pageSize = pageSize;
    		this.nowPage = nowPage;
    		this.rowCount = rowCount;
    		this.pageCount = pageCount;
    		this.rowDate = rowDate;
    	}
    
    	public PageBean() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    }
    
     
  • 시스템의 각 실체에 대한 DAO층에서 페이지를 나눈다.이 함수에는 pageSize, nowPage 두 개의 매개 변수가 필요합니다.food InfoCount()는 전체 과일 세트의 행 수를 가져오는 데 사용됩니다.이 함수는 페이지빈 대상을 되돌려줍니다
    public PageBean foodInfoByPage(int pageSize, int nowPage) {
    		PageBean pb = new PageBean();
    		pb.setPageSize(pageSize);
    		pb.setNowPage(nowPage);
    		pb.setRowCount(foodInfoCount());
    		//step1:sql
    		String sql ="select food_id,food_name,food_price,food_img,food_desc from tb_foodinfo limit "+(nowPage-1)*pageSize +", "+pageSize;// ?;? where
    		//step2: sql
    		ResultSet rs = dbconn.exeStmtS(sql);
    		//step3: 
    		List<FoodInfo> list = new ArrayList<FoodInfo>();
    		try {
    			while(rs.next())
    			{
    				System.out.println(rs.getString(2));
    				FoodInfo finfo = new FoodInfo();
    				finfo.setFood_id(rs.getInt(1));
    				finfo.setFood_name(rs.getString(2));
    				finfo.setFood_price(rs.getFloat(3));
    				finfo.setFood_img(rs.getString(4));
    				finfo.setFood_desc(rs.getString(5));
    				list.add(finfo);
    			}
    		pb.setRowDate(list);
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		 return pb;
    	}
     
  • 업무층에서 DAO층의 페이지를 호출하여 페이지를 나누는 업무 논리를 완성한다
    public class FoodInfoBizImpl implements FoodInfoBiz {
    	// foodInfoDao 
    	private  FoodInfoDao fid = null;
    	public FoodInfoBizImpl(){
    		fid = new FoodInfoDaoImpl();
    	}
    	public List<FoodInfo> foodInfoAll() {
    		return fid.foodInfoAll();
    		
    	}
    	public PageBean foodInfoByPage(int pageSize, int nowPage) {
    		return fid.foodInfoByPage(pageSize, nowPage);
    	}
    
    }
     
  • servlet의doPost () 방법에서 페이지를 제어합니다.페이지마다 표시되는 항목의 수는 웹을 통과합니다.xml 파일에서 파라미터를 설정하면 현재 페이지 수는 jsp 보기 인터페이스에서 가져온 다음 되돌아오는 페이지빈을 리퀘스트에 넣습니다
    int pageSize = Integer.parseInt(this.getServletConfig().getInitParameter("pageSize"));
      int nowPage = 1;
      if(request.getParameter("np")!=null)
      {
       nowPage = Integer.parseInt(request.getParameter("np"));
      }
      //step2: biz 
      
      FoodInfoBiz fbiz = new FoodInfoBizImpl();
      PageBean pb = fbiz.foodInfoByPage(pageSize, nowPage);// 
      //step3: 【session、request】  request
     
      request.setAttribute("pageBean", pb);   
      //step4: index.jsp [response.sendRedirect - request ]
      request.getRequestDispatcher("index.jsp").forward(request,response);//request 
  • jsp 페이지의 구현은 request에서 페이지빈을 가져와 그 중의 rowDate를 반복해서 순환하면 현재 페이지의 표시를 실현할 수 있습니다
    <c:forEach items="${pageBean.rowDate}" var="fInfo">
    		<td style="background-color:#E3EAEB;">
                <table style="width: 100%">
                    <tr>
                        <td style="width: 300px">                       
                            <a href="FoodDetail?foodsid=11">
                            <img  style="border:0px" src="UpFile/foodImage/${fInfo.food_img}" alt="" height="150" width="200"/></a></td>
                        <td style="width: 550px; color: #000000; text-align: left">
    
                             : &nbsp;&nbsp; &nbsp;${fInfo.food_name }<br />
                             : &nbsp; &nbsp;${fInfo.food_price}<br />
                             : &nbsp; &nbsp; <br/>
    
                             : &nbsp; &nbsp; ${fInfo.food_desc}<br />
                            <a  href="OnePro.htm?pid=1"> </a>
                            <form action="AddCart" method="post" name="form1">
                            <input name="txtCount" type="text"   style="width:27px;" />
                            <input type="hidden" name="foodid" value="${fInfo.food_id }"/>
                            <input type="hidden" name="foodname" value="${fInfo.food_name }"/>
                            <input type="hidden" name="foodprice" value="${fInfo.food_price }"/>                        
                            <input type="submit" name="ok" value=" "/>
                            </form>
                           </td>
                    </tr>
                </table>
            </td>	
         </c:forEach>
     
  • 현재 페이지의 실현을 완성하면 이전 페이지의 다음 페이지의 기능 실현은 현재 페이지의 수를 전달하기만 하면 된다
    <table style="width: 100%">
            <tr>
                <td>
                     <span  style="color:Red;">${pageBean.pageCount }</span> </td>
    
                <td>
                     <span  style="color:Red;">${pageBean.pageSize }</span> </td>
                <td>  <span  style="color:Red;">${pageBean.nowPage }</span> </td>
                <td>  <span  style="color:Red;">${pageBean.rowCount}</span> </td>
                <td>
                	<c:if test="${pageBean.nowPage !=1 }">
                    <a href="IndexServlet?np=${pageBean.nowPage-1}"><img src="images/prev.gif" style="border-width:0px;" /></a>
                    </c:if>
    				<c:if test="${pageBean.nowPage !=pageBean.pageCount }">
                    <a href="IndexServlet?np=${pageBean.nowPage+1}"> <img src="images/next.gif" style="border-width:0px;" /></a>
                      </c:if>
                    </td>
            </tr>
        </table>
    상기 단계를 완성했고 일반적인 페이지 나누기 도구가 기본적으로 완성되었습니다..
  • 좋은 웹페이지 즐겨찾기