一、为什么要分页?
- 客户端: 如果数据量太多,都显示在同一个页面的话,会因为页面太长严重影响到用户的体验,也不便于操作,也会出现加载太慢的问题。
- 服务端: 如果数据量太多,可能会造成内存溢出,而且一次请求携带的数据太多,对服务器的性能也是一个考验。
二、分页优点
- 数据清晰直观
- 不受数据量限制
- 页面不再冗长
三、分页如何实现?
- 分页前:返回全部的学生信息集合List,页面读取
select * from stu
- 分页后:按照要求的页面大小进行返回,每次翻页的时候只从数据库里检索出本页需要的数据
四、分页查询---limit关键字
- 语法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
- 例子
-- 查询展示前10条数据
SELECT * FROM employee LIMIT 10;
-- 查询第一页数据,展示10条
SELECT * FROM employee LIMIT 0, 10;
-- 查询第6-15条数据
SELECT * FROM employee LIMIT 5, 10; # Retrieve rows 6-15
分页规律:
-- 查询第一页数据,展示10条
SELECT * FROM employee LIMIT 0, 10;
-- 查询第二页,展示10条
SELECT * FROM employee LIMIT 10, 10;
-- 查询第三页,展示10条
SELECT * FROM employee LIMIT 20, 10;
-- 查询第N页,,展示10条
SELECT * FROM employee LIMIT (n-1)*10, 10;
SELECT * FROM employee LIMIT (pageNo-1)*pageSize , pageSize;
- 复习:MySql基础回顾
五、功能实现
1、获取指定大小的学生数据集合的方法---StudentDao
2、计算显示数据的总数量的方法---StudentDao
#count函数
select count(1) from stu;
count(id),count(1),count(*)
- 三者区别:点此链接
3、计算页数---单独声明一个工具类,便于复用
4、页面展示、超链接(丐中丐版本)
- 四个超链接
- 一个文本框
- 一个按钮
- 文字+三个变量
相关代码:
//分页获取学生信息列表
public List<Student> getPageList(int pageNo,int pageSize){
List<Student> stuList=new ArrayList<Student>();
//select * from tableName where 条件 limit (当前页码-1)*页码容量,页面容量
//limit用法:第一个参数指的是要开始的地方,第二个参数指每页显示多少条数据(注意:第一页要用0表示)
String sql="SELECT * FROM stu ORDER BY id LIMIT ?,?";
pageNo = (pageNo - 1) * pageSize;
Object[] params={pageNo,pageSize};
ResultSet rs=this.Select(sql, params);
try {
while(rs.next()){
int id1=rs.getInt("id");
String name=rs.getString("name");
String pic=rs.getString("pic");
int sex=rs.getInt("sex");
int age=rs.getInt("age");
int grade=rs.getInt("grade");
String introduce=rs.getString("introduce");
student =new Student(id1,name,pic,sex,age,grade,introduce);
stuList.add(student);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
this.close();
}
return stuList;
}
//获取学生信息总数量
public int getTotalCount(){
int totalCount=0;
String sql="select count(1) from stu";
Object[] params={};
ResultSet rs=this.Select(sql, params);
try {
while(rs.next()){
totalCount=rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
this.close();
}
return totalCount;
}
- 工具类PageSupport
public class PageSupport {
//当前页码-来自于用户输入
private int currentPageNo = 1;
//总数量(表)
private int totalCount = 0;
//页面容量
private int pageSize = 0;
//总页数-totalCount/pageSize(+1)
private int totalPageCount = 1;
public int getCurrentPageNo() {
return currentPageNo;
}
public void setCurrentPageNo(int currentPageNo) {
if(currentPageNo > 0){
this.currentPageNo = currentPageNo;
}
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
if(totalCount > 0){
this.totalCount = totalCount;
//设置总页数
this.setTotalPageCountByRs();
}
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
if(pageSize > 0){
this.pageSize = pageSize;
}
}
public int getTotalPageCount() {
return totalPageCount;
}
public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}
public void setTotalPageCountByRs(){
if(this.totalCount % this.pageSize == 0){
this.totalPageCount = this.totalCount / this.pageSize;
}else if(this.totalCount % this.pageSize > 0){
this.totalPageCount = this.totalCount / this.pageSize + 1;
}else{
this.totalPageCount = 0;
}
}
}
分页功能按钮
<div align="center">
共<%=totalCount %>条记录 <%=pageIndex %>/<%=totalPage %>页
<a href="List1.jsp?pageIndex=1">首页</a>
<a href="List1.jsp?pageIndex=<%=pageIndex-1%>">上一页</a>
<a href="List1.jsp?pageIndex=<%=pageIndex+1%>">下一页</a>
<a href="List1.jsp?pageIndex=<%=totalPage%>">最后一页</a>
跳转至 <input type="text" name="inputPage" id="inputPage" class="page-key" />页
<button type="button" class="page-btn" onClick="">GO</button>
</div>
六、JS和Java互相传值问题
1、js变量获取jsp页面中java代码的变量值
var JS变量名 = <%=JAVA变量名 %>
var num=<%=i%>;
2、java代码获取js变量的值。
- 在JSP中,Java部分是在服务器端执行的,js部分是在客户端的浏览器执行的,二者完全不相干,因此直接在JSP页面上是无法在js、java和HTML变量之间进行调用的。
- 解决方案:将js变量放到form中的一个隐藏域中,然后提交表单给要调用变量的页面,这个页面可以是本身,示例如下:
//list.jsp页面:
<script type="text/javascript">
var test1 = "111"; //定义js变量
document.form.test2.value = test1;
//将js变量的值放到form中的一个隐藏域中
var formObj = document.getElementById("passForm");
formObj.submit();
</script>
<form method="post" action="aa.jsp" id ="passForm">
<input id ="test2" type = "hidden" name="test2">
</form>
//list.jsp页面中的Java代码:
<%
request.setCharacterEncoding("utf-8");
String txtMsg = request.getParameter("test2");
out.println(txtMsg);
%>
注:也可以为不同页面