分页查询的总结
来源:互联网 发布:java打印99乘法表 编辑:程序博客网 时间:2024/05/05 16:46
最近刚把前端的基础学完,做了一个简单的客户管理系统巩固一下前面的基础知识,设计的知识之前已有各种小结,再次主要是总结一下分页查询相关的知识。
1.首先需要顶一个两个实体类 Customer和Pagenation用来封装客户信息,和分页查询的信息;
主体思想还是jsp前段页面提交数据到web层servlet,servlet对数据做简单的判断和封装,再调用业务层相关的方法进行数据查询,具体调用业务层的哪些方法,需要根据实际情况需要。
关于实体类的封装,customer实体类主要是封装一些客户的信息,比如姓名,年龄,种类等等;JDBCUtil可以根据相应的setXXX()方法,把数据往里面注入;
public class Customer { private String id;// id private String name;// 姓名 private String gender;// 性别 private String birthday;// 生日 private String phone;// 电话 private String email;// 邮箱 非空不可以重复 private String hobby;// 爱好 private String type;// 客户类型 private String description;// 客户描述}
注意:对于多选框到后台的是一个字符数组,jdbcutil默认只会封装第一元素,所以需要我们手动
Pagenation类的封装是封装了分页查询需要的信息,同时把每页需要显示的数据加入一个集合中,把集合本身当做一个属性定义;在pageNation中根据已知的一些参数可以直接算出一些相关的参数,在前段做了封装,这样到业务层就会变得非常简单方便。
说明:最根本的是调用mysql中的分页查询语句:
select * from customers limit ? ,?;
第一个问号:起始页 pageNum
第二个问号:每页的长度pageSize
前面的工作都是为了把这两个参数简单合理的传递到dao层,数据库的查询不是一次查出所有数据的,是根据jsp页面每次提交的pageNum再去查询,查询后pageNation里面的属性也不是全部都注入值得,一些可以通过计算得到的值,在jsp显示页面调用的时候才会去计算。
<a href="javascript:void(0)" onclick="go(${pageNation.beforePage})">上一页</a><a href="javascript:void(0)" onclick="go(${pageNation.nextPage})">下一页</a><a href="javascript:void(0)" onclick="go(${pageNation.totalPages})">尾页</a>
通过jsp传递参数pageNum,到后台处理
function go(pageNum){ /* //非数字 负数,但是小数搞不定 if(isNaN(pageNum)||parseInt(pageNum)<=0){ } */ if(parseInt(pageNum)!=pageNum||parseInt(pageNum<=0)){ alert("请输入有效的数值"); return ; } //如果输入的数值超出最大页码 js去获取request里面的数据 //在这里不可以用el表达式,那比较麻烦 //javaScript使用le表达式获取数据,加个双引号就可以了,别的不可以直接拿 if(parseInt(pageNum)>parseInt("${pageNation.totalPages}")){ alert("超出最大页码"+parseInt("${pageNation.totalPages}")); //document.getElementById("num").value="${pageNation.totalPages}";//最大页码 //document.getElementById("num").value="${pageNation.pageNum}";//当前页码 return ; } location.href="${pageContext.request.contextPath}/listAllCustomerServlet?pageNum="+pageNum;}
如何在JSP代码中利用el表达式,加双引号不加是不可以用的!!!
alert("超出最大页码"+parseInt("${pageNation.totalPages}")); //document.getElementById("num").value="${pageNation.totalPages}";//最大页码 //document.getElementById("num").value="${pageNation.pageNum}";//当前页码
public class Pagenation { private int pageNum = 1;// 当前页码,默认从第一页开始 private int pageSize = 10;// 每页显示的数目,默认是10,模仿百度 private int totalPages;// 一共多少页 private int beforePage;// 上一页 private int nextPage;// 下一页 private int pageBar[];// 每次查询分页栏显示的页码 private List<Customer> customers;// 每页查询的分页记录的数据 private long totalCount;// 总工多少条数据//来自数据查询,业务层封装 private int startIndex;// 起始页 public int getStartIndex() { this.startIndex = (this.pageNum - 1) * this.pageSize; return this.startIndex; } public int getPageNum() { return pageNum; } public void setPageNum(int pageNum) { this.pageNum = pageNum; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } // 总页数可以计算出来的,这样就不要再业务层计算,比较简单 public int getTotalPages() { this.totalPages = ((int) this.totalCount + this.pageSize - 1) / this.pageSize; return totalPages; } /** * 上一页 * * * @return */ public int getBeforePage() { this.beforePage = this.pageNum - 1; // 如果当前页已经是第一页,那么上一页也是第一页本身 if (this.pageNum == 1) { this.beforePage = 1; } return this.beforePage; } /** * 下一页 * * @return */ public int getNextPage() { this.nextPage = this.pageNum + 1; // 如果当前页已经是最后一页,那么下一页就是它本身 if (this.nextPage >= this.totalPages) { this.nextPage = this.totalPages; } return this.nextPage; } public int[] getPageBar() { int beginPage;// 起始页码 int endPage;// 结束页码 // 如果总页数少于10页 if (this.totalPages <= 10) { beginPage = 1; endPage = this.totalPages; } else { beginPage = this.pageNum - 5; endPage = this.pageNum + 4; } // 如果起始页小于0 if (beginPage <= 0) { beginPage = 1; endPage = beginPage + 9; } // 如果结束页 大于总页数 if (endPage >= this.totalPages) { endPage = this.totalPages; beginPage = this.totalPages - 9; } this.pageBar = new int[endPage - beginPage + 1]; int index = 0; for (int i = beginPage; i <= endPage; i++) { this.pageBar[index++] = i; } return this.pageBar; } public List<Customer> getCustomers() { return customers; } public void setCustomers(List<Customer> customers) { this.customers = customers; } public long getTotalCount() { return totalCount; } public void setTotalCount(long totalCount) { this.totalCount = totalCount; }}
业务层的方法解析:业务层知识查询了总的记录数,和分页查询,其他的都是进行计算的!!!
public void pageQueryCustomers(Pagenation pageNation) {//查询所有的数据条数 pageNation.setTotalCount(customerDao.getTotalCounts());// select * from Customers limit ?,? ;//pageNation.setCustomers(customerDao.pageQuery(pageNation.getPageNum(),// pageNation.getPageSize()));//根据当前页码,和每页大小进行分页查询 pageNation.setCustomers(customerDao.pageQuery(pageNation.getStartIndex(), pageNation.getPageSize())); }
关于页码最后的跳转框
1.默认情况下是显示当前的页码
2.当有输入的时候根据输入的页码传递给后台进行查询
<input type="text" value="${ pageNation.pageNum}" id="num" style="width: 30px "> <input type="button" value="确认" onclick="go(document.getElementById('num').value);">
function go(pageNum){ /* //非数字 负数,但是小数搞不定 if(isNaN(pageNum)||parseInt(pageNum)<=0){ } */ if(parseInt(pageNum)!=pageNum||parseInt(pageNum<=0)){ alert("请输入有效的数值"); return ; } //如果输入的数值超出最大页码 js去获取request里面的数据 //在这里不可以用el表达式,那比较麻烦 //javaScript使用le表达式获取数据,加个双引号就可以了,别的不可以直接拿 if(parseInt(pageNum)>parseInt("${pageNation.totalPages}")){ alert("超出最大页码"+parseInt("${pageNation.totalPages}")); //document.getElementById("num").value="${pageNation.totalPages}";//最大页码 //document.getElementById("num").value="${pageNation.pageNum}";//当前页码 return ; }
0 0
- 分页查询的总结
- 关于Oracle分页查询的问题总结
- 数据库分页查询总结
- sqlserver 分页查询总结
- SQL分页查询总结
- ORACLE分页查询总结
- sqlserver 分页查询总结
- 总结Oracle,MySql,SQLServer的分页查询总结
- Oracle学习总结-----分页查询
- oracle高效分页查询总结
- oracle高效分页查询总结
- 不同数据库的分页查询实现方法总结
- Java分页查询中分页的分页
- 总结 分页查询 与 普通查询
- jive的分页查询
- Oracle的分页查询
- Oracle的分页查询
- SQL的分页查询
- 整合了刷新、加载更多、滑动删除功能的XListview
- UESTC 1262 Memory 暴力法
- Cannot generate texture from bitmap异常的解决方案
- 验证码倒计时帮助类CountDownButtonHelper的实现
- Java基础之异常
- 分页查询的总结
- LeetCode 217:Contains Duplicate
- Android编程规范V1.0
- 带有指示器的自定义底部导航栏的实现
- Android移动UI设计经验总结
- 使用tableView时的3个注意事项(只适合初学者)
- 叶正盛:再次写给我们这些浮躁的程序员
- 如何查看android-support-v4支持包中的源码
- poj 2649 Factovisors 对n!进行因数分解