springmvc 4+hibenate 4 페이지 조회 기능 구현

Springmvc+hibenate 는 현재 많은 사람들 이 사용 하 는 프레임 워 크 통합 이 되 었 습 니 다.최근 에 자신 도 모색 을 배우 고 있 습 니 다.우 리 는 개발 프로젝트 에서 많은 프로젝트 들 이 목록 페이지 기능 을 사용 하기 때문에 인터넷 의 일부 자 료 를 참고 하여 springmvc 4+hibenate 4 를 배우 면서 페이지 기능 코드 를 얻 었 습 니 다.반드시 통용 되 지 는 않 지만 초보 자 에 게 참고 가치 가 있 습 니 다.
페이지 별 실현 의 기본 과정:
1.페이지 도구 류
생각:
 1.페이지 클래스 를 작성 하고 속성 을 정의 합 니 다.조회 결과 집합,조회 기록 총수,각 페이지 에 기록 수,현재 몇 페이지 등 속성 을 포함해 야 합 니 다.
 2.페이지 클래스 를 작성 하고 정의 하 는 방법 은 총 페이지 수,현재 페이지 시작 기록,첫 페이지,다음 페이지,이전 페이지,마지막 페이지 등 방법 을 포함해 야 합 니 다.
코드 는 다음 과 같 습 니 다:

package cn.myic.model;

import java.util.List;

public class Page<E> {
  //    
  private List<E> list;

  //       
  private int totalRecords;

  //        
  private int pageSize;

  //    
  private int pageNo;
  
  /**
   * @return    
   * */
  public int getTotalPages(){
    return (totalRecords+pageSize-1)/pageSize;
  }
  
  /**
   *          
   * @param pageSize      
   * @param currentPage      
   * @return         
   */
  public int countOffset(int currentPage,int pageSize){
    int offset = pageSize*(currentPage-1);
    return offset;
  }
  
  /**
   * @return   
   * */
  public int getTopPageNo(){
    return 1;
  }
  
  /**
   * @return    
   * */
  public int getPreviousPageNo(){
    if(pageNo<=1){
      return 1;
    }
    return pageNo-1;
  }
  
  /**
   * @return    
   * */
  public int getNextPageNo(){
    if(pageNo>=getBottomPageNo()){
      return getBottomPageNo();
    }
    return pageNo+1;
  }
  
  /**
   * @return   
   * */
  public int getBottomPageNo(){
    return getTotalPages();
  }
  
  
  public List<E> getList() {
    return list;
  }

  public void setList(List<E> list) {
    this.list = list;
  }

  public int getTotalRecords() {
    return totalRecords;
  }

  public void setTotalRecords(int totalRecords) {
    this.totalRecords = totalRecords;
  }

  public int getPageSize() {
    return pageSize;
  }

  public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
  }

  public int getPageNo() {
    return pageNo;
  }

  public void setPageNo(int pageNo) {
    this.pageNo = pageNo;
  }

}

2.Dao 층 방법
사고방식:페이지 별로 조회 하 는 방법 을 정의 하고 파 라미 터 를 설정 합 니 다.페이지 번호 와 페이지 마다 몇 개의 기록 을 표시 합 니까?
코드 는 다음 과 같 습 니 다:

/**
   *     
   * @param hql      
   * @param offset     
   * @param length         
   * @return         
   */
  @SuppressWarnings("unchecked")
  @Override
  public List<Course> queryForPage(int offset, int length) {
    // TODO Auto-generated method stub
    List<Course> entitylist=null;
    try{
      Query query = getSession().createQuery("from Course");
      query.setFirstResult(offset);
      query.setMaxResults(length);
      entitylist = query.list();
      
    }catch(RuntimeException re){
      throw re;
    }
    
    return entitylist;
  }
 3.서비스 층 방법
생각:
 1.페이지 별로 조회 하 는 방법 을 정의 하고 파 라 메 터 를 설정 합 니 다.페이지 번호 와 페이지 마다 몇 개의 기록 을 표시 하고 조회 결과 의 페이지 별 대상(Page)을 되 돌려 줍 니 다.
 2.Dao 층 을 통 해 실 체 를 조회 하 는 총 기록 수 를 가 져 옵 니 다.
 3.현재 페이지 시작 기록 수 가 져 오기
 4.Dao 층 을 통 해 페이지 별 조회 결과 집합 가 져 오기
 5.페이지 대상 설정
코드 는 다음 과 같 습 니 다:

/**
   *      
   * @param currentPage     :       
   * @param pageSize          
   * @return        (     list) Bean
   * */
  @SuppressWarnings("unchecked")
  @Override
  public Page queryForPage(int currentPage,int pageSize) {
    // TODO Auto-generated method stub

    Page page = new Page();    
    //    
    int allRow = courseDao.getAllRowCount();
    //       
    int offset = page.countOffset(currentPage,pageSize); 
    //       
    List<Course> list = courseDao.queryForPage(offset, pageSize); 

    page.setPageNo(currentPage);
    page.setPageSize(pageSize);
    page.setTotalRecords(allRow);
    page.setList(list);
    
    return page;
  }

 4.Controller 층 방법
Controller 층 의 디자인 은 페이지 넘 기 조 회 를 조작 할 때 현재 페이지 번호 파라미터 만 전달 하면 됩 니 다.
코드 는 다음 과 같 습 니 다:

@RequestMapping(value = "/showAll.do")
  public String findAllCourse(HttpServletRequest request,
      HttpServletResponse response) {
    try {
      String pageNo = request.getParameter("pageNo");
      if (pageNo == null) {
        pageNo = "1";
      }
      Page page = courseService.queryForPage(Integer.valueOf(pageNo), 10);
      request.setAttribute("page", page);
      List<Course> course = page.getList();
      request.setAttribute("courses", course);
    } catch (Exception e) {
      e.printStackTrace();
    }
    return "course/course_list";
  }
 5.View 층 jsp 전시
jsp 페이지 페이지 의 몇 개의 단 추 는 현재 페이지 번호 의 판단 에 따라 표 시 됩 니 다.
코드 는 다음 과 같 습 니 다:

<tr>
      <td colspan="6" align="center" bgcolor="#5BA8DE"> ${page.totalRecords}     ${page.totalPages}     ${page.pageNo} <br>
        
        <a href="${path}/course/showAll.do?pageNo=${page.topPageNo }"><input type="button" name="fristPage" value="  " /></a>
        <c:choose>
         <c:when test="${page.pageNo!=1}">
          
           <a href="${path}/course/showAll.do?pageNo=${page.previousPageNo }"><input type="button" name="previousPage" value="   " /></a>
          
         </c:when>
         <c:otherwise>
          
           <input type="button" disabled="disabled" name="previousPage" value="   " />
          
         </c:otherwise>
        </c:choose>
        <c:choose>
         <c:when test="${page.pageNo != page.totalPages}">
          <a href="${path}/course/showAll.do?pageNo=${page.nextPageNo }"><input type="button" name="nextPage" value="   " /></a>
         </c:when>
         <c:otherwise>
          
           <input type="button" disabled="disabled" name="nextPage" value="   " />
          
         </c:otherwise>
        </c:choose>
        <a href="${path}/course/showAll.do?pageNo=${page.bottomPageNo }"><input type="button" name="lastPage" value="  " /></a>
      </td>
    </tr>
페이지 효과:

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기