目录
2.在持久化层(dao)实现获取所有用户数据和每页显示数据条数的方法
1.分页就是让页面可以显示指定条数的数据,可以更容易查看数据。
2.使阅读结果变得更方便
3.减轻服务器查询的压力
二、分页功能具体实现
1.封装一个分页所需的数据的中间类Page
public class Page implements Serializable{
private int pageNum;//当前页码(前台提交)
private int totalNum;//数据库查询
private int pageSize = 10;//自定义
private int totalPageNum;//=totalNum/pagesize
private int startIndex;//(pageNum)*10+1
private int startPage;//开始页码
private int endPage;//结束页码
private List<?> list = null;
//计算多少页码
public Page(int pageNum, int totalNum){
this.pageNum = pageNum;
this.totalNum = totalNum;
if (totalNum%pageSize==0){
totalPageNum = totalNum/pageSize;
}else {
totalPageNum = totalNum/pageSize+1;
}
startIndex = (pageNum-1)*pageSize;
//算出控制页面切换按钮的数据
if (totalPageNum<5){
startPage = 1;
endPage = totalPageNum;
}else {
if (pageNum<3){
startPage = 1;
endPage = 5;
}else {
if (pageNum>(totalPageNum-3)){
startPage = totalPageNum-4;
endPage = totalPageNum;
}else {
startPage = pageNum - 2;
endPage = pageNum + 2;
}
}
}
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getTotalNum() {
return totalNum;
}
public void setTotalNum(int totalNum) {
this.totalNum = totalNum;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPageNum() {
return totalPageNum;
}
public void setTotalPageNum(int totalPageNum) {
this.totalPageNum = totalPageNum;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
startIndex = startIndex;
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public List<?> getList() {
return list;
}
public void setList(List<?> list) {
this.list = list;
}
}
2.在持久化层(dao)实现获取所有用户数据和每页显示数据条数的方法
定义一个接口
import java.util.List;
public interface TeacherDao {
public List<Teacher> findTeacherLimit(int startIndex,int pageSize);
public int findTotalNum();
}
实现接口中的方法
public class TeacherDaoImpl implements TeacherDao{
/**
* 获得所有教师数据
*/
@Override
public int findTotalNum() {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
int totalNum = 0;
try {
conn = DButils.getConnection();//连接数据库,这里是我自己封装了一个连接数据库的工具类的方法
String sql = "select count(*) from teacher";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()){
totalNum = rs.getInt(1);
}
DButils.closeDB(conn,ps,rs);
}catch (Exception e){
e.printStackTrace();
}
return totalNum;
}
/**
* 每页显示数据条数
*/
@Override
public List<Teacher> findTeacherLimit(int startIndex,int pageSize) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<Teacher> list= new ArrayList<Teacher>();
try {
conn = DButils.getConnection();//连接数据库
String sql ="SELECT id,name,password,gender,email,remark FROM teacher limit ?,?";//使用limit对数据库指定数据查询
ps = conn.prepareStatement(sql);
ps.setInt(1,startIndex);
ps.setInt(2,pageSize);
rs = ps.executeQuery();
while (rs.next()){
Teacher teacher=new Teacher();
teacher.setId(rs.getInt(1));
teacher.setName(rs.getString(2));
teacher.setPassword(rs.getString(3));
teacher.setGender(rs.getString(4));
teacher.setEmail(rs.getString(5));
teacher.setRemark(rs.getString(6));
list.add(teacher);
}
DButils.closeDB(conn,ps,rs);
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
}
3.在service层实现分页方法
定义一个接口
import com.school.domain.Page;
import java.util.List;
public interface TeacherService {
public Page showPageDate(int pageIndex);
}
实现接口中的方法
public class TeacherServiceImpl implements TeacherService{
/**
* 分页
* @param pageIndex
* @return
*/
@Override
public Page showPageDate(int pageIndex) {
TeacherDao teacherDao = new TeacherDaoImpl();
int totalNum = teacherDao.findTotalNum();
Page page = new Page(pageIndex,totalNum);
List<Teacher> teachers = teacherDao.findTeacherLimit(page.getStartIndex(),page.getPageSize());
page.setList(teachers);
return page;
}
}
4.controller层中创建一个Servlet
@WebServlet("/TeacherController")
public class TeacherController extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
/**
* 分页
*/
if ("splitPage".equals(action)) {
int pageNum = Integer.parseInt(req.getParameter("pageNum"));
TeacherService teacherService = new TeacherServiceImpl();
teacherService.showPageDate(pageNum);
Page page = teacherService.showPageDate(pageNum);
req.setAttribute("page",page);
req.getRequestDispatcher("/pages/admin_teacher.jsp").forward(req,resp);
}
}
}
5.前台网页获取数据
<html>
<head>
<!-- 页面meta -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>校园信息管理系统</title>
<meta name="description" content="校园信息管理系统">
<meta name="keywords" content="校园信息管理系统">
</head>
<body class="hold-transition skin-purple sidebar-mini">
<i class="fa fa-pie-chart"></i> <span>教师管理</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li id="charts-chartjs">
<a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=1">
<i class="fa fa-circle-o"></i>教师信息
</a>
</li>
</ul>
//利用forEach循环取得数据
<tbody>
<c:forEach items="${page.list}" var="teacher">
<tr>
<td><input name="ids" type="checkbox"></td>
<td>${teacher.id}</td>
<td>${teacher.name}</td>
<td>${teacher.password}</td>
<td>${teacher.gender}</td>
<td>${teacher.email}</td>
<td class="text-center">${teacher.remark}</td>
<td class="text-center">
<a href="#"><button type="button" class="btn bg-olive btn-xs">编辑</button></a>
<a href="#"><button type="button" class="btn bg-olive btn-xs">删除</button></a>
</td>
</tr>
</c:forEach>
</tbody>
//把取得数据和条数传给按钮
<div class="box-footer">
<div class="pull-left">
<div class="form-group form-inline">
第${page.pageNum}页,总共${page.totalPageNum} 页,共${page.totalNum} 条数据。 每页
<select class="form-control">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select> 条
</div>
</div>
<div class="box-tools pull-right">
<ul class="pagination">
<li>
<a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=1" aria-label="Previous">首页</a>
</li>
<li>
<c:if test="${page.pageNum>1}">
<a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=${page.pageNum-1}">上一页</a>
</c:if>
</li>
<c:forEach begin="${page.startPage}" end="${page.endPage}" var="pageNum">
<li><a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=${pageNum}">${pageNum}</a> </li>
</c:forEach>
<li>
<c:if test="${page.pageNum<page.endPage}">
<a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=${page.pageNum+1}">下一页</a>
</c:if>
</li>
<li>
<a href="${pageContext.request.contextPath}/TeacherController?action=splitPage&pageNum=${page.totalPageNum}" aria-label="Next">尾页</a>
</li>
</ul>
</div>
</div>