`
wokong
  • 浏览: 1261 次
  • 性别: Icon_minigender_1
  • 来自: 河南
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

直接对数据库查询结果进行 分页 的通用类

阅读更多


 做本人用jsp+hibernate 设计了一个小的论坛,完全只是把基本的功能搭建尝试下。

下图为本人的数据库关系图。one2many or many2one 相比都不用说了,一看就了解。



 lt_fl表:就是论坛的模块表

lt_tz表:就是论特帖子表

lt_user表:就是论坛的用户表

lt_rep表就是论坛的回复表

 

这里做查看帖子详细内容时候我是这样做的:

 

1.我是根据tz_id把这个帖子类Tz session.get()出来的。

2.然后显示本帖的详细内容:tz.getTitle()......tz.getContent()....

3.然后我就得到了本帖的所有回帖的Set    tz.getReps();

我现在想分页,但是用hibernate的分页我查的时候就没有分页查询而且我不想从多端再查。。。怎么办里。。干脆自己写个吧。(效率不高,仅供交流)

 

我的基本思想是:如果你想分页,直接把你查询的list传过来,在把你想每页显示几条pageSize传进来 这个分页类计算总页数 里面的getInfoByCurrentPage方法根据前台传入的page(当前页)得到当前页应该的list段放入scope:request里传到view层。在显示。

 

Fenye.java

 

package com.svse.utils;

import java.util.ArrayList;
import java.util.List;

public class Fenye {
	
	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getPageSize() {
		return pageSize;
	}

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

	public List getList() {
		return list;
	}

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

	/*
	 * @param totalCount集合总记录数
	 * @param totalPage要显示的总页数
	 * @param pageSize每页显示几条
	 */
	private int totalCount=0;
	private int totalPage=0;
	private int pageSize=0;
	private List list=new ArrayList();

	/*
	 * @list 集合
	 * @pageSize 每页显示几条
	 */
	public Fenye(List list,int pageSize)
	{
		this.totalCount=list.size();
		
		this.totalPage=(totalCount+pageSize-1)/pageSize;
		
		this.list=list;
		
		this.pageSize=pageSize;
	}
	
	/*
	 * 根据页码得到当前页的信息段 等于是吧list根据需要有几页分成几段
	 */
	public List getInfoByCurrentPage(int currentPage)
	{
		List currentPageInfo=new ArrayList();
		if(list.size()!=0 &&list.size()>pageSize)
		{
			for(int i=(currentPage*pageSize-pageSize);i<=(currentPage*pageSize-1);i++)
			{
				if(i>(this.list.size()-1))
					continue;
				currentPageInfo.add(list.get(i));
			}
			return currentPageInfo;
		}
		else
			return list;
		
		
	}
}

 

 

 

页是分出来了。

其中遇到一个问题:因为我从帖子(Tz)端查回复端(Rep)得到的是Set集合。我把Set用list.addAll()转成list后记录顺序是不断变化的 每次刷新都不一样。

因此要把转换后的list先按id倒序排列 相当于最新的回复放在最前---要用到比较接口Comparator下面有说明

 

CompareRep.java

 

package com.svse.utils;

import java.util.Comparator;

import com.svse.entity.Rep;

/**
 * 回复比较类
 * @author wokong
 *	
 */
public class CompareRep implements Comparator {

	public int compare(Object arg0, Object arg1) {
		Rep rep1=(Rep)arg0;
		Rep rep2=(Rep)arg1;
		if(rep1.getRep_id()>rep2.getRep_id())
			return 0;
		else
		return 1;
	}

}

 

 

 

 

然后在Fenye fenye = new Fenye(排序后的list, 每页显示几条数据);

 

具体在Servlet中的分页操作 排序哪个实体就只用写一个比较类可以了

 

	//分页操作
				
				List arrList = new ArrayList();
				arrList.addAll(arr);//把Set转换为List
				CompareTz sort=new CompareTz();//实例化比较类
				Collections.sort(arrList,sort);//把比较类排序
				Fenye fenye = new Fenye(arrList, 5);//实例化分页类,每页显示5条
				if(request.getParameter("page")==null)
					currentPage=1;
				else if(Integer.parseInt(request.getParameter("page"))<=0)
					currentPage=1;
				else if(Integer.parseInt(request.getParameter("page"))>fenye.getTotalPage())
					currentPage=fenye.getTotalPage();
				else
					currentPage=Integer.parseInt(request.getParameter("page"));
					
				List currenInfo = fenye.getInfoByCurrentPage(currentPage);//得到相应页的list
				request.setAttribute("pageList", currenInfo);
				request.setAttribute("totalPage",fenye.getTotalPage());
				request.setAttribute("currentPage",currentPage);
				request.setAttribute("fl_id",request.getParameter("fl_id"));				
				
				forward="tzinfo/fyshow_tz.jsp";//跳转到jsp页面分页显示

 

 回复分页显示jsp页面

 

fyshow_tz.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@page import="com.svse.entity.Tz"%>
<%@page import="com.svse.entity.Rep"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>


	<body>
		<%
			Tz tzInfo = (Tz) request.getAttribute("tzInfo");
		%>
		帖子信息<hr>
		<br>帖子标题:<%=tzInfo.getTz_title()%><br>
		帖子内容:<%=tzInfo.getTz_content()%><br>
		发帖人:<%=tzInfo.getUser().getUserName()%><br>
		发帖时间:<%=tzInfo.getTz_pubtime()%><br>
		<hr>
		回复信息
		<%	
					Set reps = tzInfo.getReps();
					out.println("回复总数:"+reps.size());
					List currentRep=(List)request.getAttribute("currentRep");
				for(int i=0;i<currentRep.size();i++)
				{
					Rep rep = (Rep)currentRep.get(i);
					out.print("<br>回复标题:"+rep.getRep_title());
					out.print("回复内容:"+rep.getRep_content());
					out.print("回复人:"+rep.getUser().getUserName());
					out.print("回复时间:"+rep.getRep_time()+"<br>");		
				}
		%>
		共${totalPage}页 当前第${currentPage}页   <a href="Ser?object=tz&action=getTzInfo&page=1&tz_id=${tz_id }">首页</a> <a href="Ser?object=tz&action=getTzInfo&page=${totalPage}&tz_id=${tz_id }">尾页</a> <a href="Ser?object=tz&action=getTzInfo&page=${currentPage-1}&tz_id=${tz_id}">上一页</a> <a href="Ser?object=tz&action=getTzInfo&page=${currentPage+1}&tz_id=${tz_id}">下一页</a>
		
		<hr>
		回复模块
		<form action="Ser?object=tz&action=tzRep&tz_id=<%=tzInfo.getTz_id()%>"
			method="post">
			回复标题:
			<input type="text" name="rep_title">
			<br>
			回复内容:
			<textarea rows="10" cols="20" name="rep_content"></textarea>
			<br>
			<input type="submit" value="回复" />
		</form>
	</body>
</html>

 

具体运行效果:



我是新人 希望大家多多指教

有什么建议早点告诉我啊学习。qq:6686496 邮箱:yuyifeifei@gmail.com.cn

 

  • 大小: 24.2 KB
  • 大小: 5.4 KB
1
0
分享到:
评论

相关推荐

    一个通用的数据库分页类

    这里提到的"一个通用的数据库分页类",很可能是PHP中设计的一个可复用的分页组件,用于简化数据库查询的分页逻辑。在PHP开发中,这样的类通常会包含一些核心功能,如计算总页数、获取当前页数据、设置和获取每页记录...

    TERADATA、ORACLE数据库分页

    1. `ReportUtil4Page.java`: 这可能是用于生成数据库分页查询的工具类,可能包含了与数据库交互的方法,如连接数据库、执行SQL、处理结果集等。 2. `Page.java`: 这个文件可能定义了一个`Page`类,用于封装分页查询...

    数据库分页查询语句

    ### 数据库分页查询语句 #### 概述 在处理大量数据时,为了提高用户体验并减轻服务器压力,我们通常采用分页的方式展示数据。不同的数据库管理系统(DBMS)提供了各自的方法来实现分页功能。本文将详细介绍Oracle...

    通用数据库查询器

    论文的贡献在于,通过通用查询器的设计,降低了对多类型数据库进行管理和维护的复杂性,提升了工作效率。同时,通过智能提示和图形化向导等功能,使得非专业用户也能更便捷地进行数据库操作,降低了使用门槛。这种...

    C#版Oracle数据库通用操作类

    `ConnForOracle` 类主要实现了对 Oracle 数据库的基本操作,包括但不限于连接数据库、执行 SQL 语句以及返回结果集等功能。通过此类可以有效地简化数据库操作代码,并提高开发效率。 #### 二、基本属性与构造函数 ...

    Oracle通用数据库存储过程代码--高效分页存储过程

    标题“Oracle通用数据库存储过程代码——高效分页存储过程”表明这是一个适用于Oracle数据库的存储过程,主要用于实现高效的分页查询功能。 #### 描述解析 描述部分简述了此存储过程的特点:“Oracle通用数据库存储...

    ASP分页通用类 asp分页

    最后,关于`asp分页通用类.txt`这个文件,它可能包含了具体的分页类实现代码,包括如何构造SQL语句、生成分页链接的逻辑,以及可能的优化策略,比如缓存页码和数据,以减少对数据库的多次访问。阅读和理解这个文件的...

    Oracle数据库中很实用的分页查询代码

    分页查询是Oracle数据库比较重要的一个知识点!希望这个对你有参照作用。

    asp.net通用分页类

    本教程将详细讲解如何创建一个通用的分页类,以便在多个页面中复用。 首先,我们需要理解分页的基本原理。分页主要是通过限制每次从数据库中取出的数据量来实现的。比如,每一页显示10条记录,当用户点击下一页时,...

    asp 记录集分页通用类

    综上所述,"asp 记录集分页通用类"是一个关于如何在ASP环境中构建一个能够处理数据库记录集分页的通用组件的教程或代码示例。通过学习和理解这一知识点,开发者可以有效地管理和呈现大量数据库数据,提升网站的性能...

    通用数据库分页 扩展dbutil (附代码下载)

    本主题将深入探讨“通用数据库分页”以及如何通过扩展dbutil工具来实现这一功能。我们将从以下几个方面展开讨论: 1. **数据库分页原理**: 数据库分页的基本思想是将数据分成若干个页,每次只返回用户请求的一页...

    PHP通用的数据库分页类

    本文将深入探讨如何使用PHP实现一个通用的数据库分页类,以适应不同的数据库查询需求。 首先,我们需要了解数据库分页的基本概念。分页是将大量结果集分为若干个较小的部分(页面),每次只加载一部分数据到用户...

    asp.net 通用分页类

    查询结果会被填充到`DataSet`中,然后传递给`Pagination`类进行处理。 分页类还可能包含其他辅助方法,如生成分页链接的HTML代码,这在视图层(如ASPX页面)中会被用到。这些链接通常会显示在页面底部,用户可以...

    jsp通用分页

    【jsp通用分页】是指在Java Web开发中,利用JSP技术实现数据库查询结果的分页展示。在处理大量数据时,为了提高用户体验和减轻服务器压力,通常会采用分页的方式来展示数据。JDBC(Java Database Connectivity)作为...

    数据库分页大全及示例

    本篇文章将详细介绍如何在不同的数据库系统中实现分页,包括JAVA、JSP环境下的数据库分页实现,以及Oracle、SQL Server、MySQL、DB2等数据库的分页查询方法。 在Java和JSP中,分页通常涉及到后端服务器和前端页面的...

    基于MVC模式的数据库分页显示

    【数据库分页显示】在开发WEB应用系统时,特别是面对大量数据时,分页显示是一项重要的优化技术。它避免一次性加载所有数据导致的性能下降和用户体验不佳。在MySQL数据库中,可以使用`LIMIT`关键字进行分页,例如`...

    php分页类(通用)

    - **数据查询**:在查询大量数据时,调用分页类的方法生成SQL限制条件,然后进行查询。 - **渲染视图**:将查询结果传递给视图,并利用分页类生成的HTML链接渲染分页导航。 5. 兼容性和扩展性 - **URL模式支持**...

    数据库分页通用(3种方式)

    在数据库中进行分页是开发过程中常见的需求,特别是当数据量较大时,一次查询显示所有数据会对性能产生影响,同时也会降低用户体验。分页能够有效地控制数据的输出,只展示一部分结果,通常是一页数据。本文将介绍三...

    C#通用数据库帮助类(MyDbHelper.cs)无需修改直接使用

    本篇将详细解析标题为"C#通用数据库帮助类(MyDbHelper.cs)无需修改直接使用"的知识点,以及相关文件内容。 首先,`MyDbHelper.cs`是一个C#源代码文件,通常它会包含一个静态类或实例类,用于封装数据库操作的通用...

Global site tag (gtag.js) - Google Analytics