web中翻页功能的实现

您所在的位置:网站首页 前端翻页的实现 web中翻页功能的实现

web中翻页功能的实现

#web中翻页功能的实现| 来源: 网络整理| 查看: 265

 

  我是一名Java初学者,这段时间需要在自己的小程序中添加翻页功能,折腾了几天,终于搞定。所以在这儿想把它记录下来,作为自己的一个小小的总结。

 

这个分页是:仅仅用jsp和servlet实现的。没有使用任何架构~~

 

我使用的数据库是MySQL,而MySQL中的分页的sql语句是:

select [*] from [table_name]  order by [id]  limit  a,b。

[*]是指的你需要查找的字段,[table_name]是你的表名。而 limit a,b 的意思就是:从a 为开始索引,查找b个数据。 例如:limit 0,3 即为 从索引0个开始,查找三个数据。

 

下面的例子就是一个简单的JSP界面的分页功能。

 

 

 

//这儿是引用了一个javaBean。 翻页功能的实现 totlePages){ currentPage=totlePages; }else if(currentPage 页码: //实现了点击跳转的作用 总的记录数目: 总的totlePages

 

 

 

 

这儿就是getBooksAllEntity()方法的定义

 

public ResultSet getBooksAllEntity(int p,int e){ Connection conn=null; Statement stat=null; ResultSet rs=null; String sql="select * from books order by bookID limit "+p+","+e; try{ conn=getConnection(); stat=conn.createStatement(); rs=stat.executeQuery(sql); }catch(Exception m){ m.printStackTrace(); } return rs; }

 

 

 

 

翻页的实现基本上的就是这样了。比较简单。还有在Oracle数据库中使用的SQL语句是不同的。

 

 

/**************************************************************/

 

上面的是针对MySQL数据库进行的。后来在慢慢的学习中渐渐的感到,1是你不可能什么架构都不使用,而仅仅是使用jsp和servlet的。 第二点就是:现在应用架构进行翻页功能的实现,能够更加方便和通用。

 

记录时间:2011年7月14日17:21:19

 

用的架构是struts2, spring  2.5 和hibernate 3.2

 

在这儿使用的hibernate本身提供的翻页方法。

 

第一步: 首先先写一个分页类

 

import java.util.List; public class Pager { private int totalRows;//记录总数 private int pageSize = 10;//设置一页显示的记录数 private int currentPage;//当前页码 private int totalPages;//总页数 private int startRow;//当前页码开始记录数 private List elements;//记录列表 public Pager() { } //构造pager对象 /** * 初始化Pager,在构造器中初始化变量 */ public Pager(int _totalRows) { totalRows = _totalRows; totalPages=totalRows/pageSize; int mod=totalRows%pageSize; if(mod>0){ totalPages++; //这个就是 totalPages = totalPages +1; } // currentPage = 1; startRow = 0; } //首页 public void first() { currentPage = 1; startRow = 0; } //上一页 public void previous() { if (currentPage == 1) { return; } currentPage--; startRow = (currentPage - 1) * pageSize; } //下一页 public void next() { if (currentPage < totalPages) { currentPage++; } startRow = (currentPage - 1) * pageSize; } //尾页 public void last() { currentPage = totalPages; startRow = (currentPage - 1) * pageSize; } //刷新pager对象 public void refresh(int _currentPage) { currentPage = _currentPage; if (currentPage > totalPages) { last(); } } public int getStartRow() { return startRow; } public int getTotalPages() { return totalPages; } public int getCurrentPage() { return currentPage; } public int getPageSize() { return pageSize; } public void setTotalRows(int totalRows) { this.totalRows = totalRows; } public void setStartRow(int startRow) { this.startRow = startRow; } public void setTotalPages(int totalPages) { this.totalPages = totalPages; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalRows() { return totalRows; } public List getList() { return elements; } public void setList(List elements) { this.elements=elements; } }  

 

    第二步:

声明一个IDAO(public interface IBaseDao)

并且写一个Pager方法接口。

 

import java.util.List; import org.hibernate.Session; import com.kemp.util.page.Pager; public interface IBaseDao { // 根据给定的持久化对象,添加记录 public void save(Object object); // 根据给定的持久化对象,删除记录 public void delete(Object object); // 根据给定的持久化对象,更新记录 public void update(Object object); // 执行HQL查询,返回查询的结果 public List find(String where); // 通过主键ID返回一个数据对象 public void saveOrUpdate(Object object); // 根据给定的对象,保存或更新对象 public Object findById(Class cla,Integer id); // 获得Hibernate中的一个session public Session openSession(); // 获取分页对象 public Pager getPager(String hsql,String currentPage,String pagerMethod); }  

第三步:写一个DAO的实现类

 

public Pager getPager(String hsql, String currentPage, String pagerMethod) {

// 定义pager对象,用于传到页面 int totalRows = 0; List items = new ArrayList(); Pager pager = null; Session session = this.openSession(); Query query = session.createQuery(hsql); totalRows = (query.list()).size(); //取得总计录数 pager = new Pager(totalRows); // 如果当前页号为空,表示为首次查询该页 // 如果不为空,则刷新pager对象,输入当前页号等信息 if (currentPage != null) { pager.refresh(Integer.parseInt(currentPage)); } // 获取当前执行的方法,首页,前一页,后一页,尾页。 if (pagerMethod != null) { if (pagerMethod.equals("first")) { pager.first(); } else if (pagerMethod.equals("previous")) { pager.previous(); } else if (pagerMethod.equals("next")) { pager.next(); } else if (pagerMethod.equals("last")) { pager.last(); } } //从当前页记录数开始 query.setFirstResult(pager.getStartRow()); //取出pageSize个记录 query.setMaxResults(pager.getPageSize()); items = query.list(); pager.setList(items); return pager; }  

第三步:在具体的service中编写对于特定业务的方法。

 

第四步:在Action中引用相对应service的方法。通过界面和Action的之间值的传递,完成翻页功能的实现

 

在Action中继承了一个AbstractAction

 

其代码如下:

 

import com.kemp.util.page.Pager; import com.opensymphony.xwork2.ActionSupport; public abstract class AbstractAction extends ActionSupport { protected String where = ""; //分页需要属性 protected Pager pager; protected String currentPage; protected String pagerMethod; public Pager getPager() { return pager; } public void setPager(Pager pager) { this.pager = pager; } public String getPagerMethod() { return pagerMethod; } public void setPagerMethod(String pagerMethod) { this.pagerMethod = pagerMethod; } public String getWhere() { return where; } public void setWhere(String where) { this.where = where; } public String getCurrentPage() { return currentPage; } public void setCurrentPage(String currentPage) { this.currentPage = currentPage; } }  

 

【注意】:有一点有点疑问,通过hibernate实现的分页功能,其功能和效率不知道怎么样?在大型的系统中性能是如何的。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3