hibenate 와 struts 2 를 사용 하여 페이지 기능 을 실현 하 는 예제

매일 새로운 것 을 배 울 수 있 을 거 라 고 생각 하여 오늘 이 hibenate+struts 2 를 준비 하여 페이지 의 페이지 기능 을 실현 하 였 습 니 다.다음은 소스 코드 입 니 다.
1.DAO 층 인터페이스의 디자인 은 PersonDAO 인 터 페 이 스 를 정의 하고 그 안에 두 가지 방법 을 설명 했다.

public interface PersonDAO
{
  public List<Person> queryByPage(String hql, int offset, int pageSize);
  
  public int getAllRowCount(String hql);
}
2.DAO 층 인터페이스의 실현 류 PersonDAOImpl 류 는 그 두 가지 방법 을 실현 한다.

public class PersonDAOImpl implements PersonDAO
{
  /**
   *   hql            
   */
  @Override
  public int getAllRowCount(String hql)
  {
    Session session = HibernateUtil.openSession();
    Transaction tx = null;
    int allRows = 0;
    try
    {
      tx = session.beginTransaction();
      
      Query query = session.createQuery(hql);
      
      allRows = query.list().size();
      
      tx.commit();
      
    }
    catch (Exception e)
    {
      if(tx != null)
      {
        tx.rollback();
      }
      
      e.printStackTrace();
    }
    finally
    {
      HibernateUtil.closeSession(session);
    }
    
    return allRows;
  }
  /**
   *   hibernate       ,         
   */
  @SuppressWarnings("unchecked")
  @Override
  public List<Person> queryByPage(String hql, int offset, int pageSize)
  {
    Session session = HibernateUtil.openSession();
    Transaction tx = null;
    List<Person> list = null;
    
    try
    {
      tx = session.beginTransaction();
      
      Query query = session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize);
      
      list = query.list();
      
      tx.commit();
      
    }
    catch (Exception e)
    {
      if(tx != null)
      {
        tx.rollback();
      }
      
      e.printStackTrace();
    }
    finally
    {
      HibernateUtil.closeSession(session);
    }
    
    
    return list;
  }
}

3.페이지 마다 표시 되 는 내용 을 저장 하기 위해 페이지 빈(페이지 마다 필요 한 내용 을 이 페이지 빈 에 저장)을 정의 합 니 다.

public class PageBean
{
  private List<Person> list; //  hql           list  
  
  private int allRows; //    
  
  private int totalPage; //   
  
  private int currentPage; //   

  public List<Person> getList()
  {
    return list;
  }

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

  public int getAllRows()
  {
    return allRows;
  }

  public void setAllRows(int allRows)
  {
    this.allRows = allRows;
  }

  public int getTotalPage()
  {
    return totalPage;
  }

  public void setTotalPage(int totalPage)
  {
    this.totalPage = totalPage;
  }

  public int getCurrentPage()
  {
    return currentPage;
  }

  public void setCurrentPage(int currentPage)
  {
    this.currentPage = currentPage;
  }
  
  /**
   *      
   * @param pageSize      
   * @param allRows     
   * @return    
   */
  public int getTotalPages(int pageSize, int allRows)
  {
    int totalPage = (allRows % pageSize == 0)? (allRows / pageSize): (allRows / pageSize) + 1;
    
    return totalPage;
  }
  
  /**
   *          
   * @param pageSize      
   * @param currentPage    
   * @return
   */
  public int getCurrentPageOffset(int pageSize, int currentPage)
  {
    int offset = pageSize * (currentPage - 1);
    
    return offset;
  }
  
  /**
   *      ,    0       ,      
   * @param page
   * @return
   */
  public int getCurPage(int page)
  {
    int currentPage = (page == 0)? 1: page;
    
    return currentPage;
  }
  
}

4.Service 계층 인터페이스 디자인,PersonService 인 터 페 이 스 를 정의 합 니 다.그 안에 하나의 방법 을 설명 하고 PageBean 을 되 돌려 줍 니 다.

public interface PersonService
{
  public PageBean getPageBean(int pageSize, int page);
}
5.Service 계층 인터페이스 구현 클래스 PersonServiceImpl 클래스,유일한 방법:

public class PersonServiceImpl implements PersonService
{
  private PersonDAO personDAO = new PersonDAOImpl();
  
  /**
   * pageSize         
   * page        
   */
  @Override
  public PageBean getPageBean(int pageSize, int page)
  {
    PageBean pageBean = new PageBean();
    
    String hql = "from Person";
    
    int allRows = personDAO.getAllRowCount(hql);
    
    int totalPage = pageBean.getTotalPages(pageSize, allRows);
    
    int currentPage = pageBean.getCurPage(page);
    
    int offset = pageBean.getCurrentPageOffset(pageSize, currentPage);
    
    List<Person> list = personDAO.queryByPage(hql, offset, pageSize);
    
    pageBean.setList(list);
    pageBean.setAllRows(allRows);
    pageBean.setCurrentPage(currentPage);
    pageBean.setTotalPage(totalPage);
    
    return pageBean;
  }
}

6.Action 계층 디자인,PersonAction 정의:

public class PersonAction extends ActionSupport
{
  private PersonService personService = new PersonServiceImpl();
  
  private int page;
  
  public int getPage()
  {
    return page;
  }

  public void setPage(int page)
  {
    this.page = page;
  }

  @Override
  public String execute() throws Exception
  {
    //      5   ,page      
    PageBean pageBean = personService.getPageBean(5, page);
    
    HttpServletRequest request = ServletActionContext.getRequest();
    
    request.setAttribute("pageBean", pageBean);
    
    return SUCCESS;
  }
}

7.보조 류 디자인,HibernateUtil:

public class HibernateUtil
{
  private static SessionFactory sessionFactory;
  
  static
  {
    sessionFactory = new Configuration().configure().buildSessionFactory();
  }
  
  public static Session openSession()
  {
    Session session = sessionFactory.openSession();
    
    return session;
  }
  
  public static void closeSession(Session session)
  {
    if(session != null)
    {
      session.close();
    }
  }
  
}

8.마지막 으로 페이지 를 나 누 어 pagePerson.jsp 를 표시 합 니 다.

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<html>
 <head>
  <base href="<%=basePath%>">
  
  <title>My JSP 'pagePerson.jsp' starting page</title>
  
  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">  
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">

  <script type="text/javascript">
  
    function validate()
    {
      var page = document.getElementsByName("page")[0].value;
        
      if(page > <s:property value="#request.pageBean.totalPage"/>)
      {
        alert("            ,        !");
        
        window.document.location.href = "personAction";
        
        return false;
      }
      
      return true;
    }
  
  </script>

 </head>
 
 <body>

  <h1><font color="blue">    </font></h1><hr>
  
  <table border="1" align="center" bordercolor="yellow" width="50%">
  
    <tr>
      <th>  </th>
      <th>  </th>
      <th>  </th>
    </tr>
  
  
  <s:iterator value="#request.pageBean.list" id="person">
  
    <tr>
      <th><s:property value="#person.id"/></th>
      <th><s:property value="#person.name"/></th>
      <th><s:property value="#person.age"/></th>    
    </tr>
  
  </s:iterator>
  
  </table>
  
  <center>
  
    <font size="5"> <font color="red"><s:property value="#request.pageBean.totalPage"/></font>  </font>&nbsp;&nbsp;
    <font size="5"> <font color="red"><s:property value="#request.pageBean.allRows"/></font>   </font><br><br>
    
    <s:if test="#request.pageBean.currentPage == 1">
        &nbsp;&nbsp;&nbsp;   
    </s:if>
    
    <s:else>
      <a href="personAction.action">  </a>
      &nbsp;&nbsp;&nbsp;
      <a href="personAction.action?page=<s:property value="#request.pageBean.currentPage - 1"/>">   </a>
    </s:else>
    
    <s:if test="#request.pageBean.currentPage != #request.pageBean.totalPage">
      <a href="personAction.action?page=<s:property value="#request.pageBean.currentPage + 1"/>">   </a>
      &nbsp;&nbsp;&nbsp;
      <a href="personAction.action?page=<s:property value="#request.pageBean.totalPage"/>">  </a>
    </s:if>
    
    <s:else>
         &nbsp;&nbsp;&nbsp;  
    </s:else>
  
  </center><br>
  
  <center>
    
    <form action="personAction" onsubmit="return validate();">
      <font size="4">   </font>
      <input type="text" size="2" name="page"> 
      <input type="submit" value="  ">
    </form>
    
  </center>
  
 </body>
</html>

이로써 hibenate+struts 2 는 웹 페이지 분할 기능 코드 부분 을 실현 하 는 것 이 끝 났 습 니 다.hibenate 와 struts 의 프로필 은 열거 되 지 않 습 니 다.그것 은 중요 한 것 이 아 닙 니 다!
페이지 효 과 는 다음 과 같 습 니 다:

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

좋은 웹페이지 즐겨찾기