java-SSH2实现数据库和界面的分页

作者:liuchangqing123 时间:2024-01-27 16:17:19 

分页应该是在我们开发web应用时经常要做的工作,能够比较简洁的实现数据库和视图层的分页十分重要。

在数据库层利用hibernate进行数据库的分页,将从数据库中查询出的数据封装为javabean;在视图层就可以方便的实现分页。

创建PageBean


package com.fishing.common.bean;

import java.util.List;
@SuppressWarnings("unchecked")
public class PageBean {

private List list; // 要返回的某一页的记录列表

private int allRow; // 总记录数
 private int totalPage; // 总页数
 private int currentPage; // 当前页
 private int pageSize; // 每页记录数

private boolean isFirstPage; // 是否为第一页
 private boolean isLastPage; // 是否为最后一页
 private boolean hasPreviousPage; // 是否有前一页
 private boolean hasNextPage; // 是否有下一页

public List getList() {
   return list;
 }

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

public int getAllRow() {
   return allRow;
 }

public void setAllRow(int allRow) {
   this.allRow = allRow;
 }

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;
 }

public int getPageSize() {
   return pageSize;
 }

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

/** */
 /**
  * 初始化分页信息
  */
 public void init() {
   this.isFirstPage = isFirstPage();
   this.isLastPage = isLastPage();
   this.hasPreviousPage = isHasPreviousPage();
   this.hasNextPage = isHasNextPage();
 }

/** */
 /**
  * 以下判断页的信息,只需getter方法(is方法)即可
  *
  * @return
  */

public boolean isFirstPage() {  
   return (currentPage == 1);// 如是当前页是第1页  
 }  
 public boolean isLastPage() {  
return currentPage == totalPage; //如果当前页是最后一页  
}  
 public boolean isHasPreviousPage() {  
return currentPage != 1; //只要当前页不是第1页  
}  
 public boolean isHasNextPage() {  
return currentPage != totalPage; //只要当前页不是最后1页  
}  
 /** */
 /**
  * 计算总页数,静态方法,供外部直接通过类名调用
  *
  * @param pageSize
  *      每页记录数
  * @param allRow
  *      总记录数
  * @return 总页数
  */
 public static int countTotalPage(final int pageSize, final int allRow) {
   int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
       / pageSize + 1;
   return totalPage;
 }

/** */
 /**
  * 计算当前页开始记录
  *
  * @param pageSize
  *      每页记录数
  * @param currentPage
  *      当前第几页
  * @return 当前页开始记录号
  */
 public static int countOffset(final int pageSize, final int currentPage) {
   final int offset = pageSize * (currentPage - 1);
   return offset;
 }

/** */
 /**
  * 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
  *
  * @param page
  *      传入的参数(可能为空,即0,则返回1)
  * @return 当前页
  */
 public static int countCurrentPage(int page) {
   final int curPage = (page == 0 ? 1 : page);
   return curPage;
 }
}

在Dao的抽象接口BaseDao中添加方法:


public List queryForPage(final String hql, final int offset,
     final int length);
在Dao的实现类JianSheDWDaoImpl中实现方法
public List queryForPage(final String hql, final int offset,
     final int length) {
   List list = getHibernateTemplate().executeFind(new HibernateCallback() {

public Object doInHibernate(Session session)
         throws HibernateException, SQLException {
       Query query = session.createQuery(hql);
       query.setFirstResult(offset);
       query.setMaxResults(length);
       List list = query.list();
       return list;

}
   });

return list;
 }

在service抽象层接口JianSheDWService中添加方法:


public PageBean queryForPage(int pageSize,int currentPage);  

在service实现类中实现方法:


public PageBean queryForPage(int pageSize, int page) {
   final String hql = "from JianSheDWBean"; // 查询语句
   int allRow = this.baseDao.getAllRowCount(hql); // 总记录数
   int totalPage = PageBean.countTotalPage(pageSize, allRow); // 总页数
   final int offset = PageBean.countOffset(pageSize, page); // 当前页开始记录
   final int length = pageSize; // 每页记录数
   final int currentPage = PageBean.countCurrentPage(page);
   List<JianSheDWBean> list = this.baseDao.queryForPage(hql, offset, length); // "一页"的记录

// 把分页信息保存到Bean中
   PageBean pageBean = new PageBean();
   pageBean.setPageSize(pageSize);
   pageBean.setCurrentPage(currentPage);
   pageBean.setAllRow(allRow);
   pageBean.setTotalPage(totalPage);
   pageBean.setList(list);
   pageBean.init();
   return pageBean;

}

在视图层action中建立分页模型


package com.fishing.action.lcq;  
import com.fishing.common.bean.JianSheDWBean;
import com.fishing.common.bean.PageBean;
import com.fishing.service.lcq.JianSheDWService;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class GetInfoJSDWListAction extends ActionSupport {

private int page; // 第几页

private PageBean pageBean; // 包含分布信息的bean

private JianSheDWBean jianSheDWBean;
 // private PageBean page;
 private JianSheDWService jianSheDWService;

public int getPage() {
   return page;
 }

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

public PageBean getPageBean() {
   return pageBean;
 }

public void setPageBean(PageBean pageBean) {
   this.pageBean = pageBean;
 }

public JianSheDWBean getJianSheDWBean() {
   return jianSheDWBean;
 }

public void setJianSheDWBean(JianSheDWBean jianSheDWBean) {
   this.jianSheDWBean = jianSheDWBean;
 }

public JianSheDWService getJianSheDWService() {
   return jianSheDWService;
 }

public void setJianSheDWService(JianSheDWService jianSheDWService) {
   this.jianSheDWService = jianSheDWService;
 }

@Override  
  public String execute() throws Exception {  

//分页的pageBean,参数pageSize表示每页显示记录数,page为当前页  
  this.pageBean = jianSheDWService.queryForPage(10, page);  
  return SUCCESS;
 }
}

在jsp中编写分页


<tr class="odd">
                         <td>

</td>
                         <td>
                           <s:if test="%{pageBean.currentPage == 1}">  
                    首页   上一页
                     </s:if>
                           <s:else>
                             <a href="jianguan/getJSDWInfos.action?page=1">首页</a>
                             <a
                               href="jianguan/getJSDWInfos.action?page=<s:property value="%{pageBean.currentPage-1}"/>" />上一页</a>

</s:else>
                         </td>
                         <td>
                           <s:if test="%{pageBean.currentPage != pageBean.totalPage}">

<a
                               href="jianguan/getJSDWInfos.action?page=<s:property value="%{pageBean.currentPage+1}"/>">下一页</a>
                             <a
                               href="jianguan/getJSDWInfos.action?page=<s:property value="pageBean.totalPage"/>">尾页
                             </a>
                           </s:if>
                           <s:else>  
                    下一页 尾页  
                     </s:else>
                         </td>

<td>
                           <div align="center">
                             页次
                             <s:property value="pageBean.currentPage" />
                             /
                             <s:property value="pageBean.totalPage" />
                               共
                             <s:property value="pageBean.allRow" />
                             记录
                           </div>
                           <div align="center"></div>
                         </td>
                       </tr>

 上面只是代码的实现,没有说明配置文件的配置,读者根据情况配置。

希望本文所述对你有所帮助,SSH2实现数据库和界面的分页内容就给大家介绍到这里了。希望大家继续关注我们的网站!想要学习java可以继续关注本站。

标签:java,ssh2,分页
0
投稿

猜你喜欢

  • vue2.0 可折叠列表 v-for循环展示的实例

    2024-04-28 09:32:22
  • 详解Django 中是否使用时区的区别

    2023-08-28 04:29:48
  • 浅谈开启magic_quote_gpc后的sql注入攻击与防范

    2024-01-13 01:12:11
  • python namedtuple函数的使用

    2021-09-27 08:18:30
  • Go语言提升开发效率的语法糖技巧分享

    2024-05-21 10:22:39
  • Python list sort方法的具体使用

    2023-01-14 22:27:46
  • Win下PyInstaller 安装和使用教程

    2022-08-14 21:29:53
  • MySQL存储引擎简介及MyISAM和InnoDB的区别

    2024-01-26 23:53:17
  • python实现逐个读取txt字符并修改

    2021-03-11 21:25:53
  • Python利用os模块实现自动删除磁盘文件

    2023-04-06 17:04:37
  • Python编程中的文件操作攻略

    2022-12-08 10:49:54
  • python中MethodType方法介绍与使用示例

    2022-09-08 03:28:50
  • pandas.dataframe按行索引表达式选取方法

    2021-10-28 20:26:32
  • Python下的Softmax回归函数的实现方法(推荐)

    2022-02-13 10:42:17
  • asp如何实现网络打印?

    2010-05-24 18:31:00
  • asp 实现检测字符串是否为纯字母和数字组合的函数

    2009-10-04 20:39:00
  • Python @property原理解析和用法实例

    2023-05-19 00:59:41
  • 微信昵称带符号导致插入MySQL数据库时出错的解决方案

    2024-01-20 23:40:20
  • vue模仿网易云音乐的单页面应用

    2024-04-10 13:48:23
  • Pandas:DataFrame对象的基础操作方法

    2023-07-20 16:13:19
  • asp之家 网络编程 m.aspxhome.com