面向对象的分页封装操作
来源:互联网 发布:江苏运时数据 杨平良 编辑:程序博客网 时间:2024/05/21 14:52
面向对象的分页封装操作
在写分页之前我们要知道分页需要的几个参数值,分别为总页数,总记录数,每页显示的记录数
因为是一个类的封装,所以要封装一个每页显示的信息,并用list集合显示,类名为Page.java,封装的属性分别为:
public static final Integer PAGESIZE = 5;
private Integer countPage;// 总页数
private Integer countSize;// 总记录数
private List list;// 每页显示的信息
我们可以在此类中类初始化的时候计算出总页数,并判断当前页,因为是封装的一个工具类,所以在使用的时候要根据不同的类查询出所对应的记录的总条数,这就要传一个参数,为表名。并在构造方法中算出总页数和总记录数。
// 封装分页的相关信息
public static final Integer PAGESIZE = 5;
private Integer countPage;// 总页数
private Integer countSize;// 总记录数
private List list;// 每页显示的信息
// 封装当前页信息
private Integer nowPage;
// 表名做参数
public Page(Integer nowPage, String tableName, String where) {
this.where = where;
Connection conn = (Connection) JdbcUtil.getConn();
String sql = "select count(*) c from " + tableName + " " + where;
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
this.countSize = rs.getInt("c");
this.countPage = this.countSize %this.PAGESIZE == 0 ? this.countSize
/ this.PAGESIZE
: this.countSize / this.PAGESIZE + 1;
if (nowPage <= 1) {
this.nowPage = 1;
} else if (nowPage >= this.countPage) {
this.nowPage = this.countPage;
} else {
this.nowPage = nowPage;
}
}
JdbcUtil.realese(rs, pstmt);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
剩下的私有变量要生成get和set方法。
注:在拼接的时候要注意有空格,比如:
tableName + " " + where;之间必须有空格
最终的目的是查询出当前页的信息并显示,在dao的超接口中添加一个方法,为:
//查询当前页信息的方法
List<T> findNowPageInfo(int nowPage,int pageSize);
并在AdminsDaoImpl中实现,实现的是查询当前页的信息:
public List<Admins> findNowPageInfo(int nowPage,int pageSize) {
List<Admins> entities = new ArrayList<Admins>();
conn = JdbcUtil.getConn();
String sql = "select id,name,pass from admins limit ?,?";
try {
pstmt = conn.prepareStatement(sql);
int index = 1;
pstmt.setObject(index++, (nowPage - 1) * pageSize);
pstmt.setObject(index++, pageSize);
rs = pstmt.executeQuery();
while (rs.next()) {
Admins entity = new Admins();
entity.setId(rs.getInt("id"));
entity.setName(rs.getString("name"));
entity.setPass(rs.getString("pass"));
entities.add(entity);
}
JdbcUtil.realese(rs, pstmt);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return entities;
}
下面来分析如何使用上面的方法了,当在点击查看管理员的事件时,会跳转到servlet层去处理,当第一次点击时,可以先设一个参数为1,通过给Page.java的类赋值,来调用查询某一页的记录并到到Page中的list集合中,并放到作用域中,代码如下:
public void findAll(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取当前页的信息
String npage = request.getParameter("nowPage");
int nowPage = 1;
if ("".equals(npage) || npage == null) {
} else {
nowPage = Integer.parseInt(npage);
}
Page page = new Page(nowPage, "admins", where);
List<Admins> entities = adminsService.findNowPageInfo(
page.getNowPage(), Page.PAGESIZE, where);
page.setList(entities);
request.setAttribute("page", page);
request.getRequestDispatcher("/WEB-INF/admin/listAdmins.jsp").forward(request, response);
}
当单击上一页、下一页,末页的时候,会传个参数到上面的servlet中并从数据库中查询出来,在jsp的页面中的代码为:
<div>
<span> <a
href="${pageContext.request.contextPath}/adminsServlet.do?oper=all&nowPage=1">首页</a>
</span>
<span> <a
href="${pageContext.request.contextPath}/adminsServlet.do?oper=all&nowPage=${page.nowPage-1}">上一页</a>
</span>
<span> <a
href="${pageContext.request.contextPath}/adminsServlet.do?oper=all&nowPage=${page.nowPage+1}">下一页</a>
</span>
<span> <a
href="${pageContext.request.contextPath}/adminsServlet.do?oper=all&nowPage=${page.countPage}">末页</a>
</span>
<span style="color: red;">
当前页是第${page.nowPage}页,总共${page.countSize}记录 </span>
</div>
其实这样的分页也和以前没有什么区别,不同点就是它更加的面向对象了,运用的操作其实都一样。今天讲了一下,就分享一下吧!也是有收获滴!
- 面向对象的分页封装操作
- OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)
- 面向对象的封装
- 面向对象的封装
- JavaScript面向对象:分页器类封装
- 谈面向对象的封装
- 面向对象的Javascript:封装
- 面向对象的特性:封装
- Lua的面向对象封装
- 面向对象封装的特性
- js面向对象的封装
- 面向对象的特征 封装
- 面向对象的特征--封装
- C#分页面向对象封装[支持多表连接查询分页]-教学示范版--分页实现
- 面向对象之封装的成本价值
- 面向对象 之 封装带来的好处
- 面向对象的封装和继承
- 1.面向对象的封装,构造函数!
- VIM起步
- CentOS 5 服务器 Nginx 环境推荐教程
- 计算世纪秒的算法(基于1970-1-1)
- 怎么样把百度搜索引入自己的网站JS实现(附源代码)
- 嵌入式C语言中的Doxygen注释模板
- 面向对象的分页封装操作
- VC_ActiveX_修改项目名称后,找不到tlb文件
- INI配置文件的格式
- container_of()
- 重装系统
- JVM垃圾回收面临的问题
- (七)努力投入到工作中。
- oracle中execute immediate的使用(select/insert/update/delete)(
- JVM分代垃圾回收策略的基础概念