一个相当好的自定义标签---分页(二)

本文详细介绍了一种基于SQL查询的分页逻辑实现方法,包括如何设置查询条件、获取数据集及转换为前台展示所需的DTO对象。

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

导读:
  在上一个介绍里面主要讲到了分页标签的配置,逻辑处理,引用。
  我们在action中:
  //JSP中引用此attribute分页处理request.setAttribute("page",page);
  然后在JSP中引用此page。
  这次主要看如何能过对DB操作实现此page。
  处理逻辑:
  1:根据SQL语句,当前页面,页面大小等参数,得到一系统data。
  2:根据得到的data,再加上当前页面,页面大小可以实例化一个page类实体。
  3:将此实体转换成便于到前台显示的DTO。
  具体如下:
   首先,我们根据查询语句从DB中得到一系列相关数据
  ......
  Query?query?=?getSession().createQuery(sql);
  setParams(query,?paramNames,?params);
  if?(pageSize?>?-1)?{
  query.setFirstResult(PageManager.getStartIndex(pageNumber,
  totalCount,?pageSize));
  query.setMaxResults(pageSize);
  }????????????List?data?=?doQuery(query);
  
  if?(pageSize?
  totalCount?=?data.size();
  }
  ......
  可以看到其中除了createQuery,setFirstResult,setMaxResults外其实都是用户自定义的一些函数。
  其它函数,顾名思义应该知道它想实现一个什么功能,象doQuery(query)就是得到一个结果集也许是得到一个按列表方式抽取结果集?query.list(),or 按迭代方式抽取结果集query.iterate().函数getStartIndex(args[])返回数据第一条记录的起点位置。其它的也都差不多!
   其次得到一个page的实体类(entity),或者说得到其DAO对象。
  其实得到一个DTO的page对象比较简单。前面列出了page,而上面已经从DB中得到了一系列数据(data),再加上页面的相关信息就可以实例化一个page实体了:
  .public?DefaultPage(int?pageSize,?int?pagesCount,?int?pageNumber,?Collection?data,
  int?totalSize)?{
  this.pageSize?=?pageSize;
  this.pagesCount?=?pagesCount;
  this.pageNumber?=?pageNumber;
  this.totalSize?=?totalSize;
  this.data?=?data;
  }.
  当然在此前,对面页数据得处理一下,象pageNumber可能如下:
  /**?????*?@param?pageNumber
  *?@param?pageSize
  *?@param?totalCount
  *?Return?PageNumber
  */????protected?static?int?calcPageNumber(int?pageNumber,?int?pageSize,?int?totalCount)?{
  int?maxPageNumber?=?calcMaxPageNumber(pageSize,?totalCount);
  
  pageNumber?=?pageNumber>maxPageNumber?maxPageNumber:pageNumber;
  
  if(pageNumber<=0)
  pageNumber=1????????
  return?pageNumber;
  }
  easy吧!
   最后将此实体转换成适合前台显示的DTO对象。
  这个侧是依据不同的需求去做相应的转换了,一般来说从DB取出来的实体(DAO)直接与DB中的数据对应。而在DTO中我们可以提供许多更加符合实际的字段与方法,使得我们的JSP页面显示更加得心应手!同时也避免了直与DB交互。它们之间的关系,我乱七八糟写过些东西(欢迎指正!)。
  “一般人的标签我不看,高手写的东西真的值得借鉴,学习!”

本文转自
http://www.blogjava.net/Jkallen/archive/2006/03/17/35890.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值