分享一个通用数据库分页方案

subversion地址如下:
https://svn.sourceforge.net/svnroot/powerstone/ps_paging
技术架构:
web层可以是任意的MVC框架,目前只实现了SpringMVC和Struts的版本(Struts版已经在weblogic7下跑通,tomcat5还不行);
dao层也没有任何限制,只要按照范例中的模式来做既可;
最终页面上用一个标签来显示翻页按钮等。
btw:谁有兴趣想写个webwork版本的,可以和我联系,或直接发个patch给我
---------------------------------
工作原理:想法很简单,就是应用设计模式里的"模板方法模式",把分页计算的逻辑封装在一个抽象父类(PagingController)里面,留下三个抽象方法:doHandleRequest(处理请求)、getTotalRecordsNumber(计算总记录数)、makeSearchCriteria(构造查询条件,可选)供子类型重写,使得子类型尽量的简单,让我们可以专注于业务逻辑而不需要处理分页逻辑。示例如下:[code]public class UserPagingController extends PagingController {
private final Logger logger = Logger.getLogger(this.getClass());
private UserDAO userDAO;
protected ModelAndView doHandleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
Map map = super.getSearchCriteria(request);
int beginNo = super.computeRecordsBeginNo(request);
int recordsNumber = super.computeRecordsNumberToRead(request);
List usersList = userDAO.findUsers(map, beginNo, recordsNumber);
logger.debug(usersList);
return new ModelAndView("usersList", "usersList", usersList);
}
protected int getTotalRecordsNumber(HttpServletRequest request) {
int result = userDAO.countUsers(super.getSearchCriteria(request));
logger.debug("users number================:" + result);
return result;
}
protected Map makeSearchCriteria(HttpServletRequest request) {
HashMap map = new HashMap();
String firstName = request.getParameter("firstName");
if (firstName != null && firstName.trim().length() > 0) {
map.put("firstName", firstName);
}
logger.debug(map);
return map;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}[/code]
Struts版原理相同。
在页面显示翻页链接只需一行代码:
[code]<page:pagebar url="/user_query.html?" bordercolor="#F4F9FF" bgcolor="#F4F9FF"/>[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值