面向对象的分页封装操作

本文详细阐述了分页操作的面向对象封装方法,包括分页参数、类初始化及查询当前页信息的实现。通过实例展示了如何利用类封装分页逻辑,简化分页处理过程,提高代码可读性和复用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象的分页封装操作

在写分页之前我们要知道分页需要的几个参数值,分别为总页数,总记录数,每页显示的记录数

因为是一个类的封装,所以要封装一个每页显示的信息,并用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>

其实这样的分页也和以前没有什么区别,不同点就是它更加的面向对象了,运用的操作其实都一样。今天讲了一下,就分享一下吧!也是有收获滴!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值