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

分页应该是在我们开发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可以继续关注本站。

(0)

相关推荐

  • Java框架SSH结合Easyui控件实现省市县三级联动示例解析

    Easyui调用数据库实现省市县区三级联动的效果如果下 1.首先要设计数据库,如图所示.一个有4个字段code,note,pycode.code:行政区划代码,note:中文注释,pycode:拼音缩写. 其中code是由6个字段组成.如果是省级最后4位是0000,如果是地级市最后2位是00,其他是县区. 我已经把相关数据库代码上传到我的csdn资源中,需要的同学自行下载. 2.我用的是java.SSH框架结合Easyui控件 3.html代码如下 <tr> <td class=&quo

  • Java的web开发中SSH框架的协作处理应用笔记

    相信SSH没人不知道了吧,struts2+spring+hibernate,企业开发的"基础"架构,为什么基础标上引号,因为这个基础只是很多人自以为的而已,最基础的是servlet,很多培训机构很多基础都不教,直接上来就三大框架了,SSH不然就SSI,搞得很多人以为JAVAWEB开发就一定要框架,没框架就跟没了手一个样.三大框架没有什么坏处,实用,很多公司都在用,直接上手开发.但毕业以为真的好久没用三大框架了,spring倒是有用,特别是springMVC,感觉用起来比struts2爽

  • Java实现SSH模式加密

    Java实现SSH模式加密的实现原理思路分享给大家. 一.SSH加密原理 SSH是先通过非对称加密告诉服务端一个对称加密口令,然后进行验证用户名和密码的时候,使用双方已经知道的加密口令进行加密和解密,见下图: 解释:SSH中为什么要使用非对称加密,又使用对称加密,到底有什么用处?到底安全不安全?既然后来又使用了对称加密,开始的时候为什么还要用非对称加密?反过来,既然用非对称加密,为什么又要使用对称加密呢? 非对称加密,是为了将客户端产生的256位随机的口令传递到服务端,那么在传递的过程中,使用公

  • SSH框架网上商城项目第25战之使用java email给用户发送邮件

    当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息,邮箱地址是从用户的基本信息中获取,好了,首先我们来看一下java中发送邮件的方法. 1. java中发送email的方法 在完善这个项目之前,先来回顾一下java中是如何发送邮件的,首先肯定需要发送邮件的jar包:mail.jar,导入到lib目录下,好了,下面我们先写一个普通的java程序来回顾一下java email的知识点: public class SendEmailDemo { public static vo

  • java通过ssh连接服务器执行shell命令详解及实例

    java通过ssh连接服务器执行shell命令详解 java通过ssh连接服务器执行shell命令:JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等.你可以将它的功能集成到你自己的 程序中.同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器. SSH是Secure Shell的缩写,一种建立在应用层和传输层基础上的安全协议.SSH在连接和传送过程中会加密所有数据,可以用来在不同系统或者服务器之间进行安全连接.SSH提

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

    分页应该是在我们开发web应用时经常要做的工作,能够比较简洁的实现数据库和视图层的分页十分重要. 在数据库层利用hibernate进行数据库的分页,将从数据库中查询出的数据封装为javabean:在视图层就可以方便的实现分页. 创建PageBean package com.fishing.common.bean; import java.util.List; @SuppressWarnings("unchecked") public class PageBean { private L

  • Java连接Mysql数据库详细代码实例

    这篇文章主要介绍了Java连接Mysql数据库详细代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 隔了一段时间没连过数据库,代码都忘记了,网上看了下挺乱的,还是自己记录下好.这里的代码主要是连接数据库和显示数据,没有具体的数据库操作. 首先第一步当然是导入mysql的jar包,在java文件中创一个新的文件夹,我这里命名为lib,然后把jar包复制进去 然后右键jar包,选择build path将包添加进库中 之后就是代码实现了 pac

  • Java实现在Word指定位置插入分页符

    目录 程序环境 插入分页符 1.在指定段落后插入分页符 2.在指定文本位置后插入分页符 在Word插入分页符可以在指定段落后插入,也可以在特定文本位置处插入.本文,将以Java代码来操作以上两种文档分页需求.下面是详细方法及步骤. 程序环境 在程序中导入jar,如下两种方法: 方法1:手动引入.将 Free Spire.Doc for Java 下载到本地,解压,找到lib文件夹下的Spire.Doc.jar文件.在IDEA中打开如下界面,将本地路径中的jar文件引入Java程序: 方法2(推荐

  • Java连接sqlserver2008数据库代码

    java连接sqlserver2008数据库代码如下所示: public class SqlServer { public static void main(String[] args) { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1

  • Java连接各种数据库的方法

    本文实例讲述了Java连接各种数据库的方法.分享给大家供大家参考.具体如下: 复制代码 代码如下: //MySQL:       String Driver="com.mysql.jdbc.Driver";   //驱动程序      String URL="jdbc:mysql://localhost:3306/db_name";    //连接的URL,db_name为数据库名       String Username="username"

  • java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMetaData dbmd = con.getMetaData(); 二. 方法getTables的用法 原型: ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type

  • java连接mysql数据库及测试是否连接成功的方法

    本文实例讲述了java连接mysql数据库及测试是否连接成功的方法.分享给大家供大家参考,具体如下: package com.test.tool; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement

  • Java实现从数据库导出大量数据记录并保存到文件的方法

    本文实例讲述了Java实现从数据库导出大量数据记录并保存到文件的方法.分享给大家供大家参考,具体如下: 数据库脚本: -- Table "t_test" DDL CREATE TABLE `t_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `createTime` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=I

  • C#基于数据库存储过程的AJAX分页实例

    本文实例讲述了C#基于数据库存储过程的AJAX分页实现方法.分享给大家供大家参考.具体如下: 首先我们在数据库(SQL Server)中声明定义存储过程 复制代码 代码如下: use sales    --指定数据库    if(exists(select * from sys.objects where name='proc_location_Paging')) --如果这个proc_location_paging存储过程存在则删除  drop proc proc_location_Pagin

  • Java连接Oracle数据库并查询

    下载ODBC Jar包驱动,网上百度下载或者去官网下载,导入到Eclipse 项目里面 建立连接 public class DbConn { private static String driver = "oracle.jdbc.driver.OracleDriver"; private static String url = "jdbc:oracle:thin:@localhost:1521:orcl"; private static String user =

随机推荐