`
- 浏览:
137621 次
-
4. jsp页面实现
(转载其它地方)
六、设计探讨
1.通过提供queryTotalRows() 和queryPageList(int startRow, int rowCount)方法,交由用户具体的去实现,所以能够支持任何数据库。
对于Ibatis用户可以使用queryForList()方法,对于用jdbc实现也可以有多种方法来支持各种数据库。
Ms sql 可以使用top 关键字,来获得指定范围的数据
ORACEL可以使用rowid 伪列来获得指定范围的数据
具体怎么去读取数据,完全交由用户控制
2.分页对象与具体的业务对象分离。分页对象如果不能与具体的业务对象分离那么就不可能实现分页对象的重用,不可以实现代码的最大的重用。这不符合oo的按职责来设计对象的原则。
3. ViewPageHelper帮助类的使用有两个好处,统一为分页代码所需的字符参数进行定义,便于contrller和jsp页面代码的维护。第二便于代码重用,减少在contrller中的if分支句语。如果不使用帮助类,则在每个controller中都会产生大量相同的代码。
4. final关键字的使用,protected final void doInit()用于分页对象的实始化,它读取并设置总记录数,计算总页数,默认为第一页等。为什么不在构造函数中来做它呢?如果在构造函数来做它,子类就不可以扩展了。像这样的初始化方法的位置应该由扩展类来灵活控制。声明为protected是不让它由外部对象来进行访问,但是子类又可以进行调用。声明为final是为了子类不能重写它,如果子类重写不当就会造成分页对象的执行逻辑错误。但是如果子类又想扩展它怎么办?子类重写protected void onInit()方法就可以了。这样就能保证父类的逻辑,又能够让子类进行扩展。
5.异常处理的思考,queryTotalRows()和queryPageList方法都是要求由子类实现的抽象类,这两个类的特点都是可能会调用业务对象去实现相应的功能,业务对象可能会访问业务数据库等,可能会抛出任何Exception,但是分页对象类去调用queryTotalRows()和queryPageList的方法是不应该对这些Exception进行任何处理的,如果进行try…catch那么就会隐藏了异常的细节,这是十分可怕的。如果这些方法抛出异常,分页对象应该是不能处理的,不能处理的异常应该封装为运行时异常,所以就有了下面的实现
java 代码
- private List pageList(int startRow, int rowCount) throws ApplicationRuntimeException{
- try{
- return queryPageList(startRow, rowCount);
- }catch(Exception ex){
- throw new ApplicationRuntimeException(ex);
- }
- }
-
- private int totalRows() throws ApplicationRuntimeException{
- try{
- return queryTotalRows();
- }
- catch(Exception ex){
- throw new ApplicationRuntimeException(ex);
- }
- }
分页对象内部调用pageList和totalRows方法,这样就很好的解决了异常的问题,把异常交由外部调用者去决定是否处理,而不是强制调用者去处理。
5. 模板方法模式的使用,这是一个典型的模板方法模式的运用。在父类实现关键的算法代码,实现分页对象的处理逻辑,而把某些会发生改变的方法交由子类去实现,使得子类完全不用去关心父类的实现细节,子类只需要重写两个简单的方法就可以实现父类的功能。这就是模板方法带来的最大好处。模板方法模式在各种开源框架中有着广泛的运用,看看spring的源码就知道。子类只需要去实现自己最关心的细节,而父类实现那些不变的逻辑或算法。
6. 针对接口编程,而不是针对类编程。接口可以实现多重继承,而类却不能。接口有比类获得更多的好处,更利于扩展。比如说分页接口,它可以让用户有更多不同的实现,完全不依赖于任何类。只需要为它定制了共同的行为就可以了。在使用委托的时候接口比抽像类更好用。比如在装饰模式的使用中,可能需要实现一个接口,而其中还要有一个本接口的引用。如果是抽象类,则不可以实现。
7. 通用框架应该具有灵活性,不应该依懒于任何具体的框架。如果通用框架依懒于某一技术细节,某一框架,那么它就有一定的局限性。所以通用分页不应该依懒于ibatis或hibernate 或spring的某一特点。更不应该依懒于sql或oralce某种数据库。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Java 通用分页详解 Java 通用分页是指在Java编程中对大量数据进行分页处理,以提高系统效率和性能。下面对Java通用分页的知识点进行详细说明: 1. 分页的必要性 在实际项目中,数据量可能非常大,直接查询所有...
本压缩包“超强php分页打包 通用分页 万能分页 ajax分页 google分页”提供了一系列的分页解决方案,包括了基本的PHP分页、通用的分页实现、以及结合AJAX技术的动态分页,旨在满足各种项目需求。下面将详细介绍这些...
sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程
在这个项目中,"SSM实现通用分页"指的是通过这三个框架来实现数据的分页展示功能,这在大数据量的网页展示中尤为重要,可以有效提升用户体验并减轻服务器压力。 首先,Struts2作为MVC框架,负责处理HTTP请求和响应...
这个"java通用分页代码实例"应该包含了上述概念的实现,你可以通过解压"page"文件查看具体代码,学习如何将这些理论应用到实践中。通过学习和理解这个实例,你可以更好地掌握Java中的分页技术,并将其应用于自己的...
使用SQL语句实现通用分页查询,支持模糊查询等。
"封装通用的Spring3+Struts2+JPA的CRUD 通用分页实现"是一个典型的Java Web开发实践,它结合了Spring框架的依赖注入、Struts2的MVC模式以及JPA(Java Persistence API)的数据持久层处理,来实现数据的创建、读取、...
本文将详细探讨"JAVA写的通用分页"这一主题,结合描述中的"通用高效分页存储过程实现",我们将深入理解Java分页的原理、实现方式以及优化策略。 首先,分页的基本概念是将大量数据分块展示,而不是一次性加载所有...
SSH分页 分页 通用分页 struts2分页
二、设计通用分页接口 一个通用的分页方法接口应该包含以下几个核心元素: 1. **页码(Page Number)**:表示当前请求的页面位置,通常从1开始计数。 2. **每页大小(PageSize)**:定义每一页显示的数据条目数量...
Mybatis通用分页插件是Java开发中广泛使用的ORM(对象关系映射)框架扩展,主要针对Mybatis进行优化,提供了高效便捷的分页功能。这个插件的目的是简化在数据库查询时的分页操作,使得开发者能够更专注于业务逻辑,...
本DEMO主要展示了如何实现一个通用的分页功能,覆盖了后台和前台的处理逻辑。以下是对这个主题的详细阐述: 一、分页原理 分页的核心原理是通过限制每次查询的数据量,只获取用户当前需要查看的一部分数据,同时...
hibernate_mysql_struts2 实现的通用分页类.欢迎指正
综上所述,Java实现分页通用代码主要包括创建Page对象、处理分页参数、编写分页SQL、填充Page对象及提供相关辅助方法。在实际项目中,这些组件可以抽象成一个通用的分页工具类或者服务,以提高代码复用性和可维护性...
描述中没有提供具体信息,但我们可以推测这个压缩包可能包含了一个示例项目或者代码库,用于演示如何在C#和ASP.NET中实现通用的分页功能。这可能包括一个数据库查询、数据绑定到分页控件,以及相关的用户界面设计。 ...
本文将深入探讨PHP分页的实现原理和具体步骤,并通过一个名为“小贤PHP通用分页程序”的实例进行详解。 1. **分页原理** 分页的基本思想是将大量数据分成多个小块(页),每次只加载一部分数据到前端展示,用户...
本文将详细探讨Java中的通用分页实现方法。 首先,我们要理解分页的基本概念。分页主要包括两个关键参数:当前页码(Page Number)和每页显示条数(Page Size)。通过这两个参数,我们可以计算出当前页面应该显示的...