分页
概念:在页面中展示数据,如果数据较多的情况下,不采取分页的形式就会发现数据查询较慢,如果过多,则页面展示就会出现很长的滚动条,会打乱页面的整体布局。展示效率比较低,用户的客观性较差。为了解决这些问题,通过以分页的形式来展示数据。
内容:
使用limit关键字,从数据库中查询数据
select * from 表名 limit 开始下标(startInde) , 每页显示数据数(pageNum)
开始下标 startIndex (pageNum-1)*pageSize
每页展示数据条数 pageSize 自定义
访问的页码 pageNum 前端发送
总数据条数 count select count(1) from 表名
总页数 pageCount 计算出来
计算公式:(count%pageSize==0)?(count/pageSize):(count/pageSize+1)
代码实现
Servlet
@WebServlet("/studentPageServlet")
public class StudentPageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1 获取访问的页码
String num = request.getParameter("pageNum");
int pageNum = Integer.parseInt(num); // 1 -10 3 5
// 2 定义每页展示的条数
int pageSize = 4;
// 3 获取总条数
StudentDao studentDao = new StudentDaoImpl();
int count = studentDao.selectStudentsCount();
// 4 计算总页数
int pageCount = (count%pageSize==0)?(count/pageSize):(count/pageSize+1);
// 5 判断要访问的页码
if(pageNum > pageCount) {
pageNum = pageCount;
}
if(pageNum <=0) {
pageNum = 1;
}
// 6 计算查询的开始下标
int startIndex = (pageNum-1)*pageSize;
// 7 分页查询
List<Student> list = studentDao.selectStudentsByPage(startIndex, pageSize);
// 8 给响应
request.setAttribute("count", count);
request.setAttribute("pageCount", pageCount);
request.setAttribute("pageNum", pageNum);
request.setAttribute("list", list);
request.getRequestDispatcher("listpage.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
前端jsp
<body>
<div class="container">
<h3 style="text-align: center">用户信息列表</h3>
<br/>
<div style="color: red;">${mess }</div>
<table border="1" class="table table-bordered table-hover">
<tr class="success">
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>出生日期</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>图片</th>
<th>操作</th>
</tr>
<c:forEach items="${list }" var="stu">
<tr>
<td>${stu.id }</td>
<td>${stu.name }</td>
<td>${stu.sex }</td>
<td>${stu.age }</td>
<td>${stu.birthday }</td>
<td>${stu.address }</td>
<td>${stu.qq }</td>
<td>${stu.email }</td>
<td style="padding: 5px;">
<c:forTokens items="${stu.img }" delims=";" var="im" begin="0" end="0">
<a href="studentServlet?action=down&fname=${im }">
<img alt="" src="file/${im }" style="width: 70px;">
</a>
</c:forTokens>
</td>
<td>
<a class="btn btn-default btn-sm" href="studentServlet?action=selectStudentById&id=${stu.id }">修改</a>
<a class="btn btn-default btn-sm" href="">删除</a>
</td>
</tr>
</c:forEach>
<tr>
<td colspan="10" align="center"><a class="btn btn-primary" href="add.jsp">添加联系人</a></td>
</tr>
<tr>
<td colspan="10" align="center">
共${count }条 ${pageCount }页 当前${pageNum }页
<a href="studentPageServlet?pageNum=1">首页</a>
<a href="studentPageServlet?pageNum=${pageNum-1 }">上一页</a>
<a href="studentPageServlet?pageNum=${pageNum+1 }">下一页</a>
<a href="studentPageServlet?pageNum=${pageCount }">尾页</a>
</a></td>
</tr>
</table>
</div>
</body>
dao层:数据处理
public class StudentDaoImpl implements StudentDao {
@Override
public int addStudent(Student stu) {
String sql = "insert into student values(null,?,?,?,?,?,?,?,?)";
Object obj[] = {stu.getName(),stu.getSex(),stu.getAge(),stu.getBirthday(),stu.getAddress(),stu.getQq(),stu.getEmail(),stu.getImg()};
return JDBCUtil.update(sql, obj);
}
@Override
public int delStudent(int id) {
String sql = "delete from student where id=?";
Object obj[] = {id};
return JDBCUtil.update(sql, obj);
}
@Override
public int updateStudent(Student stu) {
String sql = "update student set name=?,sex=?,age=?,birthday=?,address=?,qq=?,email=?,img=? where id=?";
Object obj[] = {stu.getName(),stu.getSex(),stu.getAge(),stu.getBirthday(),stu.getAddress(),stu.getQq(),stu.getEmail(),stu.getImg(),stu.getId()};
return JDBCUtil.update(sql, obj);
}
@Override
public Student selectStudentById(int id) {
Student stu = new Student();
String sql = "select * from student where id=?";
Object obj[] = {id};
ResultSet res = JDBCUtil.query(sql, obj);
try {
if(res.next()) {
stu = new Student(res.getInt(1), res.getString(2), res.getString(3), res.getInt(4), res.getDate(5), res.getString(6), res.getString(7), res.getString(8), res.getString(9));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JDBCUtil.close();
return stu;
}
@Override
public List<Student> selectStudents() {
List<Student> list = new ArrayList<Student>();
String sql = "select * from student";
Object obj[] = {};
ResultSet res = JDBCUtil.query(sql, obj);
try {
while(res.next()) {
Student stu = new Student(res.getInt(1), res.getString(2), res.getString(3), res.getInt(4), res.getDate(5), res.getString(6), res.getString(7), res.getString(8), res.getString(9));
list.add(stu);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JDBCUtil.close();
return list;
}
@Override
public List<Student> selectStudentsByPage(int startIndex, int pageSize) {
List<Student> list = new ArrayList<Student>();
String sql = "select * from student limit ?,?";
Object obj[] = {startIndex,pageSize};
ResultSet res = JDBCUtil.query(sql, obj);
try {
while(res.next()) {
Student stu = new Student(res.getInt(1), res.getString(2), res.getString(3), res.getInt(4), res.getDate(5), res.getString(6), res.getString(7), res.getString(8), res.getString(9));
list.add(stu);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JDBCUtil.close();
return list;
}
@Override
public int selectStudentsCount() {
int count = 0;
String sql = "select count(1) from student";
Object obj[] = {};
ResultSet res = JDBCUtil.query(sql, obj);
try {
if(res.next()) {
count = res.getInt(1);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JDBCUtil.close();
return count;
}
}