java实现数据分页展示

您所在的位置:网站首页 接口数据分页 java实现数据分页展示

java实现数据分页展示

#java实现数据分页展示| 来源: 网络整理| 查看: 265

java实现分页显示数据 分页分页分类分页实现大体流程实现

分页

在开发中我们经常需要从后端查询数据到前端页面展示,当我们的数据很多的时候就可以使用到分页技术,会使得我们的数据显示更加美观合理。

分页分类

有两种分页方式:

“假分页” 其实就是采用前端技术对数据进行分页。当前端页面请求后台时将所有符合条件数据全部查询出来响应给前端,在前端通过一些技术对查询出来的数据进行分页。这种方式在数据量较小时效率还行,但是如果当数据量很大时就比较力不从心了,响应会比较慢“真分页” 当前端请求后台查询数据时,后台根据前端传入的分页依据使用SQL的分页查询查询对应条数的数据。这种方式就大大的减少了数据量。 分页实现

当前分页实现的项目环境是Spring+SpringMVC 在这里插入图片描述 为了便于操作并且不仅仅在一个项目中能够使用分页技术,创建一个分页对象,其中包含的字段如图中所示。 其中,我们需要从前端传入的数据有当前页(如果想随时更改每一页的数据显示数量就还要传入每页要显示的数据条数)。其他的数据: 首页:恒为1; 总页数:根据通过dao层操作数据库查询而得到的总数据量/每页显示数据量得到

lastPage=totalData%pageSize==0?totalData/pageSize:totalData/pageSize+1

尾页:等于总页数 上一页:这里需要判断当前页是否=lastPage?totalPage:currentPage+1

大体流程

前端访问页面发送请求->被SpringMVC核心DispatcherServlet拦截并且匹配到对应的Controller处理器中进行处理->在处理器中获取到当前页(如果是第一次访问则置当前页为1)->通过Service访问对应的Dao层操作方法->在dao方法中根据传入的当前页首先操作数据库查询出总数据数并封装到对象中->我是在分页实体类的有参构造方法中进行的其他元素的值的计算->分页对象数据封装完成之后就可以进行分页查询了->使用SQL的分页查询语句查询出符合条件的数据(SELECT * FROM … LIMIT 起始,每页数据量);其中的起始位置是可以通过 (当前页-1)*每页的数据量算出的->将查询出的数据list封装到分页对象中传递回Controller->响应给前端,前端使用jstl+el解析展示

实现

定义分页对象实体类:

import java.util.List; public class PageList { private Integer currentpage = 1; // 当前页,初始值也为第一页 private Integer firstPage = 1;// 首页为第一页 private Integer prePage; // 上一页 private Integer nextPage; // 下一页 private Integer lastPage; // 最后一页 private Integer totalPage; // 总页数 private Integer totalData; // 总数据 private Integer pageSize; // private List list; // list集合用来装查出的数据 public PageList() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "PageList [currentpage=" + currentpage + ", firstPage=" + firstPage + ", prePage=" + prePage + ", nextPage=" + nextPage + ", lastPage=" + lastPage + ", totalPage=" + totalPage + ", totalData=" + totalData + ", pageSize=" + pageSize + ", list=" + list + "]"; } public Integer getCurrentpage() { return currentpage; } public void setCurrentpage(Integer currentpage) { this.currentpage = currentpage; } public Integer getFirstPage() { return firstPage; } public void setFirstPage(Integer firstPage) { this.firstPage = firstPage; } public Integer getPrePage() { return prePage; } public void setPrePage(Integer prePage) { this.prePage = prePage; } public Integer getNextPage() { return nextPage; } public void setNextPage(Integer nextPage) { this.nextPage = nextPage; } public Integer getLastPage() { return lastPage; } public void setLastPage(Integer lastPage) { this.lastPage = lastPage; } public Integer getTotalPage() { return totalPage; } public void setTotalPage(Integer totalPage) { this.totalPage = totalPage; } public Integer getTotalData() { return totalData; } public void setTotalData(Integer totalData) { this.totalData = totalData; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public List getList() { return list; } public void setList(List list) { this.list = list; } public PageList(Integer currentpage, Integer totalData, Integer pageSize) { this.currentpage = currentpage; this.totalData = totalData; this.pageSize = pageSize; /** * 为页面中的尾页、上一页、下一页、总页数赋值 */ // 总页数:总数据/每页数据 。 如果除不尽则向上取整 this.totalPage = this.totalData % this.pageSize == 0 ? this.totalData / this.pageSize : this.totalData / this.pageSize + 1; //尾页:等于总页数 this.lastPage = this.totalPage; // 上一页:如果传入当前页页码小于等于1则直接赋值为1 this.prePage = this.currentpage = this.totalPage ? this.totalPage : this.currentpage + 1; } }

Controller处理实现:

@Controller @RequestMapping("/system") public class CMSController { @Autowired private ImageServiceImpl servic; @RequestMapping("/main") public String main(Integer currentPage, Integer pageSize, HttpSession session) { if (currentPage == null) { currentPage = 1; } if(pageSize == null) { pageSize = 5; } PageList list = servic.queryAll(currentPage,pageSize); session.setAttribute("page_list", list); //在SpringMVC中配置了视图解析器,所以只用返回关键字,完整路径会在视图解析器中自动拼接 return "main"; } }

视图解析器:

Service方法:

@Service public class ImageServiceImpl implements IImageService { @Autowired private ImageDaoImpl dao; @Override public PageList queryAll(Integer currentPage, Integer pageSize) { return dao.queryAll(currentPage,pageSize); } }

Dao方法:

@Repository public class ImageDaoImpl implements IImageDao { @Autowired private JdbcTemplate jt; //在Spring中自动注入了连接池对象,可以操作数据库 @Override public PageList queryAll(Integer currentPage, Integer pageSize) { /** * 要根据传入的当前页计算出上一页、下一页 * 在这里还要计算出数据总条数,和数据总页数 */ //先查询出总数据条数 String sql = "SELECT COUNT(imgid) FROM images"; Integer totalData = jt.queryForObject(sql, Integer.class); //封装到pageList对象中 PageList pageList = new PageList(currentPage,totalData, pageSize); //查询分页数据 sql = "SELECT * FROM images LIMIT ?, ?"; //起始位置= (当前页-1)*每页条数 List list = jt.query(sql, new BeanPropertyRowMapper(Images.class), (currentPage-1)*pageList.getPageSize(), pageList.getPageSize()); pageList.setList(list); return pageList; } }

Spring中为jt对象注入值:

到这里,后端的操作基本就完成了,热腾腾的分页对象已放入session,随时可以食用。 前端获取:

${main.imgid } ${main.storepath } ${main.storename } ${main.intro } ${main.date } 修改 删除 当前第${sessionScope.page_list.currentpage }页 首页 上一页 下一页 尾页 总页数:共${sessionScope.page_list.totalPage }页 总数据:共${sessionScope.page_list.totalData }条 每页显示: ${sessionScope.page_list.pageSize } 5 8 10 条

在需要展示的地方食用jstl+el就可以获取到数据了。 当然还有其他方式能过拿到数据,例如,使用ajax请求后台,在Controller中直接返回一个分页数据对象的json数据,在前端解析使用即可。具体实现就不展示了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3