Pensando em aprender algo novo todos os dias, hoje preparei esse hibernate+struts2 para implementar a função de paginação da página. A seguir, o código -fonte.
1. Design da interface da camada DAO, defina uma interface Persondao e declara dois métodos:
interface pública persondao {list public <sessoy> querybypage (string hql, int offset, int pagesize); public int getallrowCount (String HQL);}2. A implementação da interface da camada DAO é a classe Persondaoimpl e dois métodos são implementados:
classe pública PersondaoImpl implementa Persondao { / *** Obtenha o número total de registros no banco de dados por meio da instrução HQL* / @Override public int getallRowCount (String HQL) {sessão session = HibernateUtil.openssession (); Transação tx = nulo; int allRows = 0; tente {tx = session.begIntransaction (); Query Query = Session.CreateQuery (HQL); allRows = query.list (). size (); tx.Commit (); } catch (Exceção e) {if (tx! = null) {tx.rollback (); } E.PrintStackTrace (); } finalmente {HibernateUtil.Clossession (sessão); } retornar allRows; } / *** Use a função de paginação fornecida pelo Hibernate para exibir os dados exibidos pela paginação* / @suppresswarnings ("desmarcados") @Override Public List <S Pessoa> Querybypage (String HQL, Int Offset, Int PagageSize) {Session = HibernateUtil.Otensession (); Transação tx = nulo; List <Pesso> list = null; tente {tx = session.begIntransaction (); Query Query = session.CreateQuery (HQL) .SetFirstResult (Offset) .SetMaxResults (PageSize); list = query.list (); tx.Commit (); } catch (Exceção e) {if (tx! = null) {tx.rollback (); } E.PrintStackTrace (); } finalmente {HibernateUtil.Clossession (sessão); } Lista de retorno; }}3. Defina um PageBean (o conteúdo necessário para cada página é armazenado nesta página), que é usado para armazenar o conteúdo exibido em cada página da página da web:
classe pública PageBean {List Private <Soper> List; // Lista de consulta de coleta do banco de dados Paging através do HQL Private int AllRows; // Total Registros Private int totalpage; // Total de páginas privado int CurrentPage; // A página atual da página Public List <Pesso> getList () {Lista de retorno; } public void Setlist (List <Soper> 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; } / *** Obtenha o número total de páginas* @param PageSize número de registros por página* @param allRows Total registros* @return Páginas totais* / public int getToTalPages (int PageSize, int allRows) {int totalpage = (allRows % Pagesize == 0)? (AllRows / PageSize): (AllRows / PagageSize) + 1; retornar totalpage; } / *** Obtenha o número atual de registro de início* @param Pagesize Número de registros por página* @Param CurrentPage Página atual* @return* / public int getCurrentPageOffSet (int PAGESize, int currentPage) {int offset = PageSize* (CurrentPage - 1); retornar deslocamento; } / ** * Obtenha a página atual, se for 0, a primeira página será iniciada, caso contrário, é a página atual * @param página * @return * / public int getCurPage (int página) {int currentPage = (página == 0)? 1: página; Retornar CurrentPage; }}4. Design da interface da camada de serviço, defina uma interface de service, declare um método e retorne um PageBean:
Public Interface PersonService {public PageBean getPageBean (int PageSize, int página);}5. A interface da camada de serviço implementa a classe PersenserviceImpl, implementando o único método:
classe pública PersenserviceImpl implementa o persevice {private persondao persondao = new persondao impl (); / *** PageSize é o número de registros exibidos por página* A página é a página da web atualmente exibida*/ @Override Public PageBean getPageBean (int PageSize, int página) {PageBean PageBean = new PageBean (); String hql = "da pessoa"; int allRows = persondao.getAllRowCount (HQL); int totalpage = PageBean.getTotalPages (PageSize, AllRows); int currentpage = PageBean.getCurPage (página); int offset = PageBean.getCurrentPageOffset (PageSize, CurrentPage); List <Soper> list = persondao.QueryBypage (HQL, deslocamento, PageSize); PageBean.SetList (List); PageBean.SetallRows (AllRows); PageBean.SetCurrentPage (CurrentPage); PageBean.SetTotalPage (TotalPage); Return PageBean; }}6. Design da camada de ação, defina uma personação:
classe pública Personaction estende o ACTIONSUPPORT {PERSONSERVICE PRIVADO PERSONSERVICE = NOVO PERSONSERVICEIMPL (); private int página; public int getPage () {Return Page; } public void setPage (int página) {this.page = página; } @Override public string Execute () lança Exceção {// significa que 5 registros são exibidos por página, página significa a página atual da página da web PageBean = PersOnservice.getPageBean (5, página); HttpServletRequest request = servletActionContext.getRequest (); request.setattribute ("PageBean", PageBean); sucesso de sucesso; }}7. Design Auxiliar, Hibernateutil:
classe pública HibernateUtil {Sessão estática privada FactoryFactory; static {sessionFactory = new Configuration (). Configure (). BuildSessionFactory (); } public static session openSession () {session = sessionFactory.opensession (); sessão de retorno; } public static void CloseSession (sessão de sessão) {if (session! = null) {session.close (); }}}8. Finalmente, a página páginaperson.jsp é exibida na página de paginação:
<%@ Page Language = "Java" import = "java.util. http-equiv = "PRAGMA" content = "no-cache"> <meta http-equiv = "cache-control" content = "no-cache"> <meta http-equiv = "expires" content = "0"> <meta http-equiv = "palavra-chave" = "key11, key3, key3, keypword-keyt-keyt-keypword-ke-ke-ke-ke-ke-ke-ke-ke-ke-ke-ke-ke-ke-ke-keyt /" Content = "Esta é a minha página"> <script type = "text/javascript"> function valid () {var page = document.getElementsByName ("página") [0] .Value; if (página> <s: Property value = "#request.pagebean.totalpage"/>) {alert ("O número de páginas que você entra é maior que o número máximo de páginas, e a página saltará para a página inicial!"); window.document.location.href = "Personaction"; retornar falso; } retornar true; } </script> </ad Head> <body> <h1> <font color = "blue"> Query de paginação </font> </h1> <hr> <tabela align = "central" borderColor = "Yellow"> <tr> <th> Número de série </th> <er)###"#" </th> id = "Person"> <tr> <th> <s: propriedade value = "#pessoa.id"/> </th> <th> <s: propriedade value = "#pessoa.age"/> </th> </tr> </s: iterator> </tabela> <Center> <FONT size = "5"> total <Font color = "Red"> <s: fertion> fertion) Páginas </font> <font size = "5"> total <font color = "Red"> <S: Property Value = "#request.pageBean.allrows"/> </font> Registros </font> <br> <br> <s: se test = "#request.pagean.currentpage == 1"> home anterior href = "Personaction.action"> home </a> <a href = "Personaction.action? Page = <S: Property Value ="#request.pageBean.currentPage - 1 "/>"> página anterior </a> </s: else> <s: se test = "#request.pageBean.currentPageBean.CurntPage! href = "Personaction.action? Page = <S: Property Value ="#request.pageBean.currentPage + 1 "/>"> Próxima página </a> <a href = "Personaction.action? </Center> <br> <Center> <formato de forma = "Personaction" onsubMit = "return validate ();"> <font size = "4"> Pule para </font> <input type = "text" size = "2" name = "Page"> página <input Type = "submit" = ""> </form> </Center> </Center> </Centro ">Neste ponto, a parte do código da página da página da web implementação do Hibernate+Struts2 é concluída. Os arquivos de configuração do Hibernate e Struts não estão listados, e esses não são os pontos -chave!
O efeito da página é o seguinte:
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.