通用分页实现及其OO设计探讨(1)

3 分页辅助类
java 代码
  1. ViewPageHelper.java   
  2. /**  
  3. * 分页辅助类,用于减化Controller中的代码  
  4. */  
  5. public class ViewPageHelper {   
  6. private static final int FIRST_PAGE_VALUE = 1;   
  7.   
  8. private static final int PREVIOUS_PAGE_VALUE = 2;   
  9.   
  10. private static final int NEXT_PAGE_VALUE = 3;   
  11.   
  12. private static final int LAST_PAGE_VALUE = 4;   
  13.   
  14. private static final int SPECIAL_PAGE_VALUE = 5;   
  15.   
  16. public static final String FIRST_PAGE = "FIRST_PAGE";   
  17.   
  18. public static final String PREVIOUS_PAGE = "PREVIOUS_PAGE";   
  19.   
  20. public static final String NEXT_PAGE = "NEXT_PAGE";   
  21.   
  22. public static final String LAST_PAGE = "LAST_PAGE";   
  23.   
  24. public static final String SPECIAL_PAGE = "SPECIAL_PAGE";   
  25.   
  26. /**分页动作参数名**/  
  27. public static final String PAGE_ACTION = "page_action";   
  28.   
  29. /**分页对象属性名**/  
  30. public static final String SESSION_PAGE = "session_page";   
  31.   
  32. /**页号参数名**/  
  33. public static final String PAGE_NO = "page_no";   
  34.   
  35. private static Map actionMap = new HashMap();   
  36. static {   
  37. actionMap.put(FIRST_PAGE, new Integer(FIRST_PAGE_VALUE));   
  38. actionMap.put(PREVIOUS_PAGE, new Integer(PREVIOUS_PAGE_VALUE));   
  39. actionMap.put(NEXT_PAGE, new Integer(NEXT_PAGE_VALUE));   
  40. actionMap.put(LAST_PAGE, new Integer(LAST_PAGE_VALUE));   
  41. actionMap.put(SPECIAL_PAGE, new Integer(SPECIAL_PAGE_VALUE));   
  42. }   
  43. /**  
  44. * 执行分页动作  
  45. * @param page 分页对象  
  46. * @param action 分页动作参数  
  47. * @param pageIndex 页号  
  48. */  
  49. public static void doAction(ViewPage page, String action, int pageIndex) {   
  50. int actionIndex = 0;   
  51. if (page == null) {   
  52. throw new NullPointerException("Page对象null");   
  53. }   
  54. if (action == null || "".equals(action)) {   
  55. throw new IllegalArgumentException("无效的分页动作参数null");   
  56. }   
  57. action = action.toUpperCase();   
  58. if (!actionMap.containsKey(action)) {   
  59. throw new UnsupportedOperationException("不支持的分页动作参数:" + action);   
  60. }   
  61. Integer index = (Integer) actionMap.get(action);   
  62. actionIndex = index.intValue();   
  63. switch (actionIndex) {   
  64. case FIRST_PAGE_VALUE:   
  65. page.gotoFirstPage();   
  66. break;   
  67. case PREVIOUS_PAGE_VALUE:   
  68. page.gotoPreviousPage();   
  69. break;   
  70. case NEXT_PAGE_VALUE:   
  71. page.gotoNextPage();   
  72. break;   
  73. case LAST_PAGE_VALUE:   
  74. page.gotoLastPage();   
  75. break;   
  76. case SPECIAL_PAGE_VALUE:   
  77. page.gotoPage(pageIndex);   
  78. }   
  79. }   
  80.   
  81. public static void doAction(ViewPage page, String action){   
  82. doAction(page, action, 1);   
  83. }   
  84. }  
五、应用通用分页框架
1
.继承 AbstractViewPage 类,实现 queryPageList(int startRow, int endRow)
queryTotalRows()
方法。

protected int queryTotalRows() throws Exception
获得查询条件的总记录数

protected List queryPageList(int startRow, int rowCount)
用于查询指定范围的数据。 startRow 为开始记录号 , rowCount 为查询的记录数

queryPageList(0,20)
为查询从第一条开始的 20 条记录。

使用 Ibatis 可以由 queryPageList 调用 queryForList() 方法。

java 代码
  1. /**  
  2. * 用户信息分页内部类  
  3. */  
  4. class UserInfoPage extends AbstractViewPage{   
  5.   
  6. //------------------------------------------------   
  7. //实现AbstractViewPage抽象类的抽象方法   
  8. //------------------------------------------------   
  9.   
  10. /**  
  11. * @see com.prs.application.ehld.web.mvc.AbstractViewPage#getPageDate(int, int)  
  12. */  
  13. protected List queryPageList(int startRow, int endRow) throws Exception {   
  14. return sampleAction.getUserInfoList(startRow, endRow);   
  15. }   
  16.   
  17. /**   
  18. * @see com.prs.application.ehld.web.mvc.AbstractViewPage#getRows()  
  19. */  
  20. protected int queryTotalRows() throws Exception {   
  21. return sampleAction.getUserCount();   
  22. }   
  23.   
  24. }   
  25.   
  26.   
  27.   
  28. 3. 在Contrller中的实现   
  29. public ModelAndView listUser(HttpServletRequest request,   
  30. HttpServletResponse response) throws Exception {   
  31. String pageAction =    
  32. RequestUtils.getStringParameter(request,ViewPageHelper.PAGE_ACTION);   
  33. Integer pageIndex =    
  34. RequestUtils.getIntParameter(request,ViewPageHelper.PAGE_NO);   
  35. //声明分页对象   
  36. ViewPage userPage =   
  37. (ViewPage) request.getSession().getAttribute(ViewPageHelper.SESSION_PAGE);   
  38. //第一次请求   
  39. if(pageAction == null || userPage == null){   
  40. //构建一个新的分页对象   
  41. userPage = new UserInfoPage();   
  42. //设置分页大小   
  43. userPage.setPageSize(2);   
  44. }else{   
  45.   
  46. if(ViewPageHelper.SPECIAL_PAGE.equals(pageAction)){   
  47. //如果页数为空,则默认为1   
  48. if (pageIndex == null)   
  49. pageIndex = new Integer(1);   
  50. ViewPageHelper.doAction(userPage,pageAction,pageIndex.intValue());   
  51. }else{   
  52. ViewPageHelper.doAction(userPage,pageAction);   
  53. }    
  54. }   
  55.   
  56. //从分页对象中获得当前页数据   
  57. List userInfoList = userPage.getPageData();   
  58.   
  59. ModelAndView mav = new ModelAndView(userInfoListView);    
  60. mav.addObject(this.userInfoListKey,userInfoList);   
  61. request.getSession().setAttribute(ViewPageHelper.SESSION_PAGE,userPage);   
  62. return mav;   
  63. }  
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值