栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

分页的实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分页的实现

1.分页是什么?

分页(Paging):即有很多数据,我们就需要分页来分割数据,可提高整体运行性能,增强用户使用体验需求等

不使用分页将遇到的问题:

        客户端问题:数据太多影响用户的体验感且也不方便操作查找,甚至出现加载太慢的问题。

       服务器问题:数据太多会造成内存溢出,且对服务器的性能也不友好。

2.如何实现分页?

2.1:分页的实现方式

利用Oracle数据库自带的rownum关键字来实现分页:

select * from (select a.*,rownum myid from 表名) b where myid between ? and ?;

2.2:所需变量

totalCount:总数据条数,因数据库的数据可以变化,因此该数据需要从后台获取。totalPage:总页数,因总数据是从数据库中查询出来的,因此每页多少条数据都知道,所以要从后台获取。list: 每页数据,从后台获取的。currentPage:当前页,从前台获取,因每次用户需要点击不同的页数,传递过来的数据都是不一样的rows:每页放多少条数据,前后台都可获取,建议从后台获取start:首页end:末页

2.3:设计变量

总页数 = 总条数 % 页面大小 == 0 ? 总条数 / 页面大小 : 总条数 / 页面大小 + 1

首页:start = (pageIndex - 1) * pageSize + 1;

末页:end = pageIndex * pageSize; || 尾页 = 总条数 % 页面大小 == 0 ? 总条数 - 页面大小 : 总条数 - 总条数 % 页面大小

上一页 = 当前页 - 1 > = 1 ? 当前页 - 1 : 1

下一页 = 当前页 + 1 <= 总页? 当前页 + 1 : 总页

2.4:编写dao包里面的分页方法
	public List query(int pageIndex,String str) throws Exception{
		int pageSize=5;//页大小
		int start=(pageIndex-1)*pageSize+1;//每页开始数据条数
		int end=pageIndex* pageSize;//每页结束的数据条数
		listNews=new ArrayList<>();
		con=DBhelper.getCon();
		sql="select * from (select a.*,rownum myid from news a where a.sid like '%"+str+"%') b where myid between ? and ?";
		ps=con.prepareStatement(sql);
		ps.setInt(1, start);
		ps.setInt(2, end);
		rs=ps.executeQuery();
		while(rs.next()) {
			news=new News(rs.getInt("nid"),rs.getInt("sid"),rs.getString("title"),rs.getString("author"),
			rs.getString("summary"),rs.getString("content"),null);
		listNews.add(news);
		}
		DBhelper.closeObj(con, ps, rs);
		return listNews;
	}


	
	public int getMaxPage(String str) throws Exception{
		con =DBhelper.getCon();
		sql="select count(0) from news where sid like '%"+str+"%'";
		ps=con.prepareStatement(sql);
		rs=ps.executeQuery();
		if(rs.next()){
			maxPage=rs.getInt(1)/5;
			if(rs.getInt(1)%5!=0) {
				maxPage++;
			}
		}
		DBhelper.closeObj(con, ps, rs);
		return maxPage;
	}
2.5:设计Servlet包里面的加载数据页面
public class LoaDataServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		try {
		// 1.设置编码
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		
		//定义当前页码变量
		int pageIndex=1;//默认展示第一页的数据
		
		//获取前台传来的页码变量
		String myPageIndex= req.getParameter("pageIndex");
		
		// 2.获取out内置对象
		PrintWriter out = resp.getWriter();
		HttpSession session=req.getSession();
		
		NewsDao nd = new NewsDao();
		
		//把从前台获取的页码myPageIndex赋给当前页码pageIndex
		if(null!=myPageIndex) {
			pageIndex=Integer.parseInt(myPageIndex);
		}
		
		//获取前台传来的模糊查询关键字
		String str=req.getParameter("str");
		if(null==str) {
			str="";
		}
		//调用分页方法
			List listNews = nd.query(pageIndex,str);
			//把获取到的数据集合listNews,保存到request作用域里面
			req.setAttribute("listNews", listNews);
			//把当前页码pageIndex保存到
			req.setAttribute("pageIndex", pageIndex);
			//把模糊查询关键字保存到request作用域里面
			req.setAttribute("str", str);
			
			//通过转发跳转到admin页面request作用域里面
			req.getRequestDispatcher("/admin/admin.jsp").forward(req, resp);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
2.6:界面代码
<%
		NewsDao nd = new NewsDao();
		request.setCharacterEncoding("utf-8");

		//获取request作用域里面的模糊查询关键字
		String str=request.getAttribute("str").toString();
		
		//获取news表里面数据可以展示的总页码
		int maxPage = nd.getMaxPage(str);
	
		//获取request作用域里面的listNews数据
		List listNews = (List) request.getAttribute("listNews");

		//获取request作用域里面把偶才能的当前页码变量
		int pageIndex = Integer.parseInt(request.getAttribute("pageIndex").toString());
	%>

-----------------------------------------------------------------------------------------


					/loaDataServlet.do?str=<%=str %>&pageIndex=1">首页
					/loaDataServlet.do?str=<%=str %>&pageIndex=<%=pageIndex > 1 ? pageIndex - 1 : 1%>">前一页
					当前页数:[<%=pageIndex%>/<%=maxPage%>] 
					/loaDataServlet.do?str=<%=str %>&pageIndex=<%=pageIndex < maxPage ? pageIndex + 1 : maxPage%>">下一页
					/loaDataServlet.do?str=<%=str %>&pageIndex=<%=maxPage%>">末页

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755984.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号