分页的第三种方式

优点:
1.通用性更好,给为页码写一个类,更符合面向对象的思维
2.代码十分简洁
缺点:
1.不能及使获取数据库中数据的变化

封装进Dao对象,通过一个方法返回一个map,map里有一个页码对象,还有一个页面数据对象
public class FenyeService {
private HibernateDao dao;
public FenyeService() {
dao = new HibernateDao();
}
public Map getPageData(int page) {
List products = null;
try {
products = dao.getProducts(page);
} catch (Exception ex) {
ex.printStackTrace();
}
PageArgs pageArgs = dao.getPageArgs();
pageArgs.setPageNum(page);
Map model = new HashMap();
model.put("list", products);
model.put("pageArgs", pageArgs);
return model;
}
}

//页码类,省略了get/set方法
public class PageArgs {
private int pageNum;
private int pageSize;
private long maxPage;
private int prePage;
private int nextPage;

public void setPageNum(int pageNum) {
this.pageNum = pageNum;
prePage=pageNum-1<=1?1:pageNum-1;
nextPage=(int) (pageNum + 1 >= maxPage ? maxPage : pageNum + 1);
}
}

Servlet中封装了service对象。
@WebServlet("/PageServlet")
public class PageServlet extends HttpServlet {
private FenyeService fenyeService;
public PageServlet() {
fenyeService = new FenyeService();
}
//处理get或post请求
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
int page = ServletRequestUtils.getIntParameter(request, "page", 1);
Map model = fenyeService.getPageData(page);
request.setAttribute("model", model);
request.getRequestDispatcher("page.jsp").forward(request, response);
}
}

一个工具类
ublic class ServletRequestUtils {
public static double getDoubleParameter(HttpServletRequest request, String param, double defVal) {
String val = request.getParameter(param);
try {
double num = Double.parseDouble(val);
return num;
} catch (NumberFormatException Exception) {
return defVal;
}
}
public static int getIntParameter(HttpServletRequest request, String param, int defVal) {
String val = request.getParameter(param);
try {
int num = Integer.parseInt(val);
return num;
} catch (NumberFormatException Exception) {
return defVal;
}
}
}

JSP页面
<!--页面数据显示-->
<c:forEach items="${model['list']}" var="rec">
<tr>
<td height="27">${rec.id}</td>
<td>${rec.productName}</td>
<td>${rec.price}</td>
<td>${rec.unit}</td>
<td>${rec.num}</td>
<td>${rec.inDate}</td>
<td>${rec.baozhiTime}</td>
</tr>
</c:forEach>
<!--页码显示-->
<a href="PageServlet?page=1">第一页</a>
<a href="PageServlet?page=${model['pageArgs'].prePage}">上一页</a>
&nbsp;${model['pageArgs'].pageNum}/${model['pageArgs'].maxPage}&nbsp;
<a href="PageServlet?page=${model['pageArgs'].nextPage}">下一页</a> <a
href="PageServlet?page=${model['pageArgs'].maxPage}">尾页</a>








MySQL数据库有多种分页方式,以下是其中三种常用的分页方式: 1. 使用LIMIT和OFFSET:这是最常见的分页方式之一。使用LIMIT来指定每页显示的记录数,使用OFFSET来指定从哪条记录开始取数据。例如,如果想要获取第一页的记录,可以使用LIMIT 10 OFFSET 0,表示从第一条记录开始取10条数据。如果想要获取第二页的记录,可以使用LIMIT 10 OFFSET 10,表示从第11条记录开始取10条数据。 2. 使用LIMIT和ROW_NUMBER():这种方式使用ROW_NUMBER()函数来为每条记录分配一个序号,然后使用LIMIT来限制返回的记录数。通过在查询中嵌套子查询,可以在外部查询中使用LIMIT来指定每页显示的记录数。例如,可以使用以下查询获取第一页的记录: SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY column_name) AS row_num FROM table_name ) AS sub_query WHERE row_num BETWEEN 1 AND 10; 3. 使用游标(Cursor):游标是一种在数据库中用于遍历结果集的机制。通过定义一个游标并使用FETCH语句来获取指定数量的记录,可以实现分页效果。首先,需要声明一个游标并将查询结果集赋给它,然后使用FETCH语句来获取指定数量的记录。例如,可以使用以下代码获取第一页的记录: DECLARE cur CURSOR FOR SELECT * FROM table_name; OPEN cur; FETCH NEXT 10 FROM cur; 以上是MySQL数据库的三种常用分页方式。具体使用哪种方式,可以根据实际需求和性能考虑进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值