目的
当数据很多时,采用分页的方式可以将数据,分页显示。既提高了运行速度,也便于查看。
实现思路
- 分页显示
采用数据库语句 “limit 偏移量 分页量” 方法,将数据分页。
- 选择页数
选择页数时,使用 “(页数-1)*分页量” 作为偏移量可以实现点击某页查看对应的数据
后端代码实现
- 分页显示操作数据库代码
@Override
public List<Student> selectPage(int offset, int pageSize) {
String sql = "select * from students limit ?,?";
BeanListHandler<Student> handler = new BeanListHandler(Student.class);
Integer[] args = {offset,pageSize};
return DBUtil.select(sql,handler,args);
}
- 选择页数代码实现
int currentPage = req.getParameter("p") == null ? 1 : Integer.parseInt(req.getParameter("p"));//当前页码值
int pageSize = 10;//分页量
List<Student> list = ssi.queryPage(currentPage,pageSize);//分页后的数据
@Override
public List<Student> queryPage(int currentPage,int pageSize) {
//偏移量: 起始位置,从0开始
int offset = (currentPage-1)*pageSize;
return sdi.selectPage(offset,pageSize);
}
- 显示总页数代码实现(使用sql语句查询到数据库数据的总数,除以分页数并向上取,则为总页数)
int total = ssi.queryTotal();//总条数
int pages = (int) Math.ceil(total*1.0 / pageSize);//总页数
前端代码实现
- 分页显示(使用forEach遍历将数据输出显示)
- 选择显示(判断点击页数是否和偏移量相等,相等则跳到相应的分页面)
<c:forEach begin="1" end="${pages}" var="i">
<li class="${i== currentPage ? 'active': ''}"><a href="?a=look&p=${i}" >${i}</a></li>
</c:forEach>
- 前一页后一页的点击实现(将页数+/-1可实现)
- 注意:+在EL中实现的时+运算,无法进行拼接字符串操作
<li>
<a href="?a=look&p=${currentPage+1 > pages ? pages : currentPage+1}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>