web中翻页功能的实现
来源:互联网 发布:sybase数据库win7 编辑:程序博客网 时间:2024/05/01 13:07
我是一名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界面的分页功能。
<%@ page contentType="text/html; charset=GB2312"%><%@page import="java.sql.ResultSet"%><%@ include file="common.jsp" %> //这儿是引用了一个javaBean。<html><head><title>翻页功能的实现</title></head><%final int e=5; //一页中显示的数量int totlePages=0; //页面总数int currentPage=1; //当前页面数int totleCounts; //数据库中的数据总量int firstIndex=0; //当前页面的开始索引ResultSet rs=null;String tempStr=request.getParameter("currentPage");if(tempStr!=null&&!tempStr.equals("")){currentPage=Integer.parseInt(tempStr);}totleCounts=bookDB.getNumberOfBooks(); //获得数据库中总的数量totlePages=(totleCounts%e==0)?(totleCounts/e):(totleCounts/e+1); //得到总的页面数目if(totlePages==0){totlePages=1;}if(currentPage>totlePages){currentPage=totlePages;}else if(currentPage<1){currentPage=1;}firstIndex=(currentPage-1)*e; //这儿就是当前索引的定义。rs=bookDB.getBooksAllEntity(firstIndex,e); //这儿我自己写的一个小的方法,可以进行查询limit的查询,在下面说明了它while(rs.next()){String bookID=rs.getString(1);String bookTitle=rs.getString(2);String bookAuthor=rs.getString(3);String bookPrice=rs.getString(4);String bookPublishYear=rs.getString(5);String bookDescription=rs.getString(6);String bookSaleAmount=rs.getString(7);String bookISBN=rs.getString(8);%><body><br><table><tr><%=bookID %></tr><tr><%=bookTitle %></tr><tr><%=bookAuthor %></tr><tr><%=bookPrice %></tr><tr><%=bookPublishYear %></tr><tr><%=bookDescription %></tr><tr><%=bookSaleAmount %></tr><tr><%=bookISBN %></tr></table><%}%>页码:<% for(int i=1;i<=totlePages;i++){ if(i==currentPage){%><%=i%><% }else{%><a href="turnPage.jsp?currentPage=<%=i%>"><%=i%></a> //实现了点击跳转的作用<%}} %>总的记录数目:<%=totleCounts%>总的totlePages<%=totlePages%></body></html>
这儿就是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实现的分页功能,其功能和效率不知道怎么样?在大型的系统中性能是如何的。
- web中翻页功能的实现
- 翻页功能的实现
- 翻页功能的实现
- 翻页功能的实现
- Jsp中翻页功能实现
- java中简单的翻页功能的实现(PageManager)
- extjs实现自动翻页的功能
- (转)翻页功能的实现
- 门户diy实现翻页功能的方法
- Vue实现表格的翻页显示功能
- QML 实现简单的翻页功能
- Jquery实现的翻页功能(在mvc中实现的)
- UIWebView 实现翻页功能
- UIWebView 实现翻页功能
- UIWebView 实现翻页功能
- JavaScript实现翻页功能
- 实现小说翻页功能
- 在DBGRID或者STRINGGRID中实现用滚轮进行翻页的功能
- Java反射详解
- QT 实现上下文菜单
- Java 执行对象构造函数理解
- 电脑常识
- 二进制注册表数据应该怎样读取?
- web中翻页功能的实现
- MyEclipse中几个小的技巧
- Oracle中的几个问题记录
- jfreechart学习
- 传智播客学习日记]ADO.Net连接与增删改查
- jfreechart学习心得
- 与数据库连接的封装
- 数据库的一些操作方法
- struts 入门时的错误