如何实现从数据库中取出的列表数据进行分页功能?
2018-02-10 17:12
627 查看
一、你需要先创建一个bean对象(也就是page对象)
创建出你需要的属性比如在我的项目中我需要用到的:有当前的页码currentPage当前的页显示的数量currentCount
你从数据库中查询得到的所有数据总和totalCount(这个你需要在dao层定义方法实现并把得到的数据返回给service层)
一共需要分多少页totalPage(这个需要你去计算通过查询所有的数据总和/currentCount,还用到了math.ceil()方法)
最后生成setter和getter方法
二、在servlet层去调用service层实现已经写好的方法
public void getCategoryList(HttpServletRequest request, HttpServletResponse response) throws SQLException, ServletException, IOException { //为了是实现分页功能,这里需要从前端页面得到两个参数currentPage,currentCount 然后转为int类型 int currentPage = Integer.parseInt(request.getParameter("currentPage")); int currentCount = Integer.parseInt(request.getParameter("currentCount")); //最后如果网页第一次没有给我们传入参数值的时候,我们需要自己设置默认值 if (currentPage==0){ currentPage=1; } if (currentCount==0){ currentCount=10; } // 1 调用service中的查询方法 CategoryService service = new CategoryService(); Page page= service.findPageCategory(currentPage,currentCount);//这个地方返回的也是一个page类 if (page!=null) { //这个部分肯定有问题 request.setAttribute("page",page); request.getRequestDispatcher("/category-list.jsp").forward(request,response); }else { request.getRequestDispatcher("/category-list.jsp").forward(request,response); } }
先创建一个service层的对象
然后在service层去创建一个方法 findPageCategory,这个方法就是为了获取到跟分页有关的所有的属性(也就是totalPage,totalCount)
(1)如何得到totalPage,totalCount这两个参数呢?(service层)
需要先创建一个dao层的categoryDao对象来从数据库中取出数据totalCount可以直接得到结果,而totalPage需要计算(用totalCount/currentCount)
把所得到的四个page属性都设置给page实体类(用setAttribute方法)
到这还需要重新定义一个startPosition(也就是在后面用SQL语句的limit中需要用到的那个参数,每次查询的起始位置)
规律就是规律就是:每次查询的起始位置=(当前的的页面-1)*每页固定显示的数据
public Page findPageCategory(int currentPage,int currentCount ) throws SQLException { Page page = new Page(); CategoryDao dao = new CategoryDao(); int totalCount = dao.queryCount(); /*也是为了根据总共数据的总数除以 当前显示的总页数,来得到一共的页码数 这里用到了一个math函数的一个方法,就是只要这个数是小数,就要让这个数往上加一,如1.2 就是2 0.8 就是1 * 总数 每页显示的数目 总页数 * 9 10 0.9 1 * 14 10 1.4 2 */ //要保证ceil跟的是一个double类型 int totalPage = (int) Math.ceil(1.0*totalCount / currentCount); //然后使用page的实体类,去把每一个属性设置进去 page.setCurrentCount(currentCount); page.setCurrentPage(currentPage); page.setTotalCount(totalCount); page.setTotalPage(totalPage); /* * 这里使用到了一个SELECT * FROM category LIMIT 1,3(1表示开始查询的位置从0开始,3表示要查询多少条数据) * 页数 每页显示的数据 查询的起始位置 * 1 10 0 * 2 10 10 * 3 10 20 * 规律就是(当前的的页面-1)*每页固定显示的数据 = 每次查询的起始位置 * (currentPage-1)*currentCount = 起始位置 * */ //计算出每次查询的起始位置 int startPosition = (currentPage-1)*currentCount; //分页查询数据,拿到DAO层的返回生鲜种类的集合,在service层进行调用,返回的也是一个生鲜的种类集合 List<Category> categories = dao.queryPageCategoryList(startPosition, currentCount); //把集合封装到page类中 page.setList(categories); return page; }
三、在Dao层去实现两个方法
是查询数据库中的所有数据总和public int queryCount() throws SQLException { ComboPooledDataSource dataSource = new ComboPooledDataSource(); QueryRunner queryRunner=new QueryRunner(dataSource); String sql = "select count(*) category "; //如果使用聚合函数的话,就必须new出来一个 ScalarHandler<>()来储存数据,最后返回的还是一个Long类型的值 Long query = queryRunner.query(sql, new ScalarHandler<>()); //还需要把Long类型转为int类型 return query.intValue(); }
分页查询数据(也就是使用SQL中聚合语句limit去查询数据limit数据后面的第一个数据是查询的起始位置,第二个参数表示每个分页查询多少条数据)
public List<Category> queryPageCategoryList(int startPosion, int currentCount) throws SQLException { ComboPooledDataSource dataSource= new ComboPooledDataSource(); QueryRunner queryRunner= new QueryRunner(dataSource); String sql = "select * from category limit ?,?"; //如果用到query的话 就需要把数据给封装到BeanListHandler中,返回的是一个生鲜种类的集合 //如果是SQL语句中需要参数的话,先用问号代替,然后在query方法中的新建的那个BeanListHandler后面加上参数 List<Category> categoryList = queryRunner.query(sql, new BeanListHandler<Category>(Category.class),startPosion,currentCount); return categoryList; }
相关文章推荐
- 对数据库中的数据进行分页处理的实现
- 如何实现对项目中的数据进行删除、修改的功能?
- SSM+mybatis数据库实现百万数据分页取出并分页插入Excel中
- 3.如何优化操作大数据量数据库(实现小数据量和海量数据的分页显示存储过程)
- MySQL中数据结果集分页功能的实现方法;数据库查询返回特定结果即分页查询
- SNF软件开发机器人-子系统-功能-数据列表分页与不分页-瀑布式分页-如何配置?
- JDBC实现数据库的几种基本操作(查询,分页查询,根据关键字进行查询以及插入数据)
- 使用MVCPager进行博客园首页列表数据的分页显示功能
- Android实现数据库中数据分页加载的功能
- 如何实现快速地从超大数据库中提取数据并进行相关的操作
- android:将数据库(SQLite)取出的数据ListView,并进行分页的简单记录(14)
- 如何优化操作大数据量数据库(几十万以上数据)(三。实现小数据量和海量数据的分页显示存储过程)
- asp.net 站内搜索功能的实现及利用datatable绑定数据并进行分页
- 3.如何优化操作大数据量数据库(实现小数据量和海量数据的分页显示存储过程)
- 润乾V4 报表设计时针对数据每7行进行一次分页,少于7行的补齐如何实现呢?
- 从数据库取出数据在jsp页面上以表格形式呈现,并对表格数据进行分页打印操作。
- Repeater 实现分页、自行绑定数据,对Repeater 进行镶嵌使用
- 如何实现表单一次上传多表数据并更新到数据库
- 数据库分页处理(取出数据表中从M-N的记录)
- 利用JQuery方便实现基于Ajax的数据查询、排序和分页功能