JSP之分页

对查询出来的记录进行分页显示
1.对查询结果进行分布显示的原因:
如果查询出来的结果一共有上百万条,那么一次性将所有的记录存放在一个list集合中,
这么导致系统内存不足。

2.解决上述问题的方法:
a.对数据库中的记录进行分页查询,MySQL数据库的分布查询语句为:
select * from table_name limit startIndex,length;
注意:对于分页查询,所有的记录的编号是从0开始编号的,length表示
一次查询要显示的结果数。
示例:select * from customer limit 0,10;表示查询前10条记录,即:取查询结果
记录的0-9号记录。

b.从数据库能够分布查询可以看出,要对查询结果达到分页查询,可以根据用户点击的页号来只
查询出这一段的记录即可,而不用一次性将所有的记录都存储起来。这样就可以达到分批的将记录
装载到list集合中,分页显示的目的。

3.具体实现
准备工作:
假设我们有一个Student类,在mysql数据库中我们储存了许多条学生记录:
a.有以下两个实体类
Class Student{
		private Sring name;
		private int age;
		//两个属性的get/set方法
	}

设计一个Page对象类: 这个页面类是用于封装一个页面对象

Class Page{
	private int totalRecord;//表示查询后一共得到多少条结果记录
	private int pageSize; //表示页面一次要显示多少条记录
	private int totalPage;//表示将所有的记录进行分页后,一共有多少页
	private int startIndex;//表示从所有的结果记录中的哪一个编号开始分页查询
	private int pageNum;//表示用户想看的页数
	private int List<Student> list;//list集合是用来装载一个页面中的所有记录的
	
	public Page(int pageNum,int totalRecord)
		this.pageNum=pageNum;
		this.totalRecord=totalRecord;
		
		this.pageSize=10;//设置一页默认显示10条查询记录
		this.startInex=(this.pageNum-1)*this.pageSize;//至于为什么this.page要减1,
		//是因为mysql数据库对于分页查询时,得到的所有的查询记录,第一条记录的编号是从0开始。
		
		if(this.totalRecord%this.pageSize==0){
			this.totalPage=this.totalRecord/this.pageSize;
		}else{
			this.totalPage=this.totalRecord/this.pageSize+1;
		}
		
	  }
	  
	  //每个属性的get/set方法
	
	}
b.在数据访问层DaoImpl类中设计两个方法

/**
	*这个方法用于根据查询条件计算出所有符合条件的记录总数
	*/
	public int getTotalRecord(){
		//连接数据库,获取连接,创建语句,此处省略
		//select count(*) from student;
		//得到的结果集,取出数据
		//int totalRecord=.........;
		return 	totalRecord;	
	}
	
	
	/**这个方法用于根据用户点击的页面号码来具体查询到这一页中的所有记录
	*并将所有的记录封装到Page对象中,交给service层,service层再将结果给上层显示
	*/
	public Page getPage(int pageNum){
		//连接数据库,获取连接,创建语句,此处省略
		Page page=new Page(pageNum,this.getTotalRecord());
		String sql="select * from student limit ?,?;
		PreparedStatemet ps=connection.preparedStatement(sql);
		ps.setInt(1,page.getStartIndex());
		ps.setInt(2,page.getPageSize());
		
		Result rs=ps.executeQuery();
		List<Student>list=new ArrayList<Student>():
		while(rs.next()){
			Student s=new Student();
			s.setName(rs.getString("name"));
			s.setAge(rs.getInt("age"));
			list.add(s);
		}
		
		return page.setList(list);
	}
c.在ServiceImpl业务逻辑处理层
Class ServiceImpl{
/**
*这个方法用于先过滤一些无用的数据后,
*再向DaoImpl类的getPage方法获取到Page对象
*/
			
public Page getPage(String pageNum){
	DaoImpl dao=new DaoImpl();
	if(pageNum==null){
	//用户点击查询所有学生记录时,这时候是没有
	//传过来页码的,所有我为默认显示第一页
	return dao.getPage(1);
	}else{
		return dao.getPage(Integer.parseInt(pageNum));
		}
			
	}
}

d.web控制层 ShowAllStudentServlet类
Class ShowAllStudentServlet{
			public doGet(....){
				ServiceImpl service=new ServiceImpl();
				String pageNum=request.getParameter("pageNum");//获取到用户点击的页码
				Page page=service.getPage(pageNum);
				request.setAttribute("page",page);//将page对象存入request域中
				request.getRequestDispatcher("/showAllStudent.jsp").forward(request,response);
				//将页面转发给数据显示页面
			}
		}
e.数据显示层  showAllStudent.jsp
<h1>显示所有学生信息</h1>
	<table frame="border">
		<tr>
			<td>姓名</td>
			<td>年龄</td>
		</tr>
		
		<c:forEach var="stu" items="${requestScope.page.list}">
			<tr>
			<td>${stu.name}</td>
			<td>${stu.age}</td>
		</tr>
		
		</c:forEach>
	</table>
	<!--分查询结果进行分页-->
	<c:forEach var="i" begin="1" end="${requestScope.page.totalPage}">
		<a href="${pageContext.request.contextPath}/servlet/ShowAllStudentServlet?${i}">${i}</a>
	</c:forEach>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Springboot+Vue的智慧养老服务管理系统源码+项目使用说明(优秀毕业设计).zip 该项目属于个人毕业设计,经导师的精心指导与严格评审获得高分通过的设计项目。主要针对计算机相关专业的教师、正在做毕设、课设的学生使用,也可作为项目实战演练,可直接作为课程设计、期末大作业、毕设等。 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通。 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 介绍 随着人口老龄化趋势的加剧,老年人口比例不断增加,传统的养老服务模式已经难以满足现代老年人的多元化需求。因此,如何高效、精准地提供养老服务,成为了社会关注的焦点。信息化与智能化的发展为养老服务带来了新的机遇。智慧养老作为新兴的养老服务模式,正逐步改变传统的养老服务格局。 #### 安装教程 1. 运行环境准备mysql8+java8+npm14.16.1 2. 配置maven路径,加载依赖 3. 运行sql文件,确保application.yml的数据库名称和账号密码是数据库所在主机的账号密码 #### 使用说明 1. 登入 账号:admin 密码:admin 账号:user 密码:123456 2.运行流程 前端初始化指令: > npm install 前端运行指令(有两个端,一个是管理端,一个是用户端): > npm run serve #### 项目演示 + 普通用户 访问者可以在最顶端看到系统的导航栏,根据自己的需求点击需要去到的页面。用户可以单击“入院指南”,在入院指南界面的输入框中输入标题并进行搜索,就可以查看标题、发布时间、注意事项、发布人、封面等其他信息,在个人中心界面中,可以看见家属的账号、密码和性别等基本信息,还可以对这些信息进行更新操作。 ![GIF 2024-6-17 19-49-40](GIF 2024-6-17 19-49-40-1718630421956.gif) + 管理员 管理员单击家属管理,在家属管理页面中输入家属的各项信息后,在页面中进行查询、新增或删除家属信息等操作。管理员点击护工管理,在护工管理页面中输入护工的所有信息,然后在页面上可以点击详情来查看护工的详细情况,点击修改来修改护工的信息,点击删除来删除护工的信息。管理员单击房间资料管理,在这个页面中可以对房间资料的信息进行管理。管理员单击床位管理,可以查看房间号、楼房名称等各项信息,还可以点击修改来修改床位信息,点击删除来删除床位信息。管理员还可以对老人入住进行管理,在这个界面中可以查看像入住编号、老人年龄等老人入住的详细信息,可以在界面顶端输入具体信息来查找,还可以点击删除来进行删除操作。管理员单击外出报备管理,在外出报备管理界面中可以查看老人的外出报备情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值