基于URL 参数传递的数据库分页显示技术实现

2012-07-02 01:46万福成于洪志何向真吴志强
关键词:中间层编程对象

万福成,于洪志,何向真,吴志强

(西北民族大学中国民族语言文字信息技术国家民委—教育部重点实验室,兰州730030)

0 引言

随着互联网新兴技术的发展,传统的静态页面已经不能满足人们的需求,正因为如此,基于Web的项目与数据库的联系才越来越密切。如何简单、方便、快速地实现数据库查询分页显示,以及如何在众多的不同类型数据库中实现分页成为Web项目要解决的问题。

传统的基于Web服务器分页适合数据量比较小的情况,数据量大时会影响Web服务器性能,占用过多的内存,分页速度也比较慢。基于数据库服务器的分页可以避免以上情况,但也会遇到不同类型的数据库,如Mysql,Oracle等,不同的数据查询分页用到不同的SQL语句,语句繁多,不利于移植与维护。

本文基于URL参数传递方式,并采用当前流行的Sturts和Hibernate框架技术来实现数据库分页显示技术,方法简单、实用、快速。

1 Web体系结构设计

采用典型的J2EE三层结构,J2EE技术的基础就是核心Java平台或Java2平台的标准版,J2EE不仅巩固了标准版中的许多优点,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。

1.1 表现层设计

表现层即Web层,就是MVC模式里面的“V”(view),展现给用户的界面,可以使jsp,asp,html等,这里采用jsp技术,jsp技术自1999年问世以来,经过多年的发展,其广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。

1.2 中间层设计

中间层为了将控制层与数据服务层分离,即Web项目中的业务逻辑Service层。

Service层负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的封装,完成系统所要求的业务逻辑。这一层属于接口层,由ServiceImpl实现层来实现具体的业务逻辑。

1.3 数据服务层设计

DAO层负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。

PO,也叫bean层持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,系统采用Hibernate作为ORM框架。Hibernate为持久层提供支持,将具体的bean持久到数据库中。系统中的所有类,都要持久化到数据库中,与数据库中的表相对应,类中的所有属性也要与表中的各个字段相对应,每个类都会生成相应的实体类hbm.xml文件,即Hibernate的映射文件,Hibernate与数据库关系如图1所示。

图1 Hibernate与数据库关系图

2 分页类的设计

分页基本信息类PageInfo是涉及和分页有关的信息的Java类,成员变量包含当前页码cur,总页数total,每页显示记录数size。

类内生成setter和getter方法,这样一个完整的分页基本信息类已经完成,作为生成对象的模板。

分页构造类PageMaker是以PageInfo的对象和URL作为参数来构造,构造函数为makelist(PageInfo pageInfo,String URL),返回一个一个字符串对象用来做前台的显示。

分页构造中采用了URL作为构造参数,在URL中我们可以传递cur这个参数作为某个页的页码,这样我们便可以方便地查询到指定页的记录,而不必将所有记录都查询出来,从而可以提高服务器的性能。

3 分页流程设计与实现

以学生基本信息student为例,具体实现数据库查询分页技术。

3.1 bean类设计

bean类即PO类,普通的Java实体类,以学生类student为例,成员变量包括用户名username,密码password,邮箱email等。

3.2 DAO及其实现层的设计

DAO即数据访问对象,用来访问数据库,student类对应的为studentDAO,实现为studentDAOImpl,在studentDAO中以 HibernateTemplate作为成员变量,通过HibernateTemplate进行对数据库的增删改查操作。

3.3 Service及其实现层的设计

Service层是业务处理层,用来满足用户的需求,student类对应的为studentService,实现为studentServiceImpl,以面向借口进行编程。

3.4 action层的设计

action为控制层,查询所有学生信息,并分页显示,对应的action为listAllStudentsAction,在action中调用分页信息,从而实现真正数据库分页显示。

3.5 流程控制与分页实现

在listAllStudentAction中封装了studentService,即以studentService作为成员变量,student-ServiceImpl中又以studentDAO作为成员变量,studentDAOImpl以HibernateTemplate作为成员变量,从而访问数据库,这样层次很清晰,易于维护。

实现查询所有学生,首先在数据库中查询所有学生记录的个数,通过studentService.getRows()来得到所有学生记录个数,将pageInfo的total设置为该值,在URL中传入当前页ppp,将pageInfo的cur值设置为URL传入的当前页的值,每页显示记录的个数可以预先指定,也可以通过传参形式指定,这样我们要查询的涉及到所有分页基本信息都已经赋值,构造分页信息pageMaker.makeList(pageInfo,URL),将分页基本信息和 URL,当前页信息传入,这样就成功构造了分页信息。总体流程如下图2所示。

图2 分页流程控制图

在前台jsp页面中的显示分页信息需要Struts2的标签支持,用来得到分页类的信息,具体标签代码为<s:porperty value=”pager”/>,将查询到的学生信息存入student_list这样一个表中,通过迭代取出相应页的学生信息。这样涉及到数据库查询,分页的设计便已经实现。

4 不同数据库的解决方案

不同的数据库,都可以将Hibernate作为框架,从而隐藏了不同数据库不同的查询语句的弊端,HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。

HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式是通过这个方法execute(HibernateCallback action),方法中需要一个 HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。程序开发者通过Hibernate-Callback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装Hibernate后灵活性不足的缺陷。HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),该方法只有一个参数Session。

通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate的方法体就是Spring执行的持久化操作。项目中具体代码如下(使用了HQL查询语句):

HibernateTemplate也同样支持数据库连接池,利于数据库的优化,对于不同的数据库对于Web项目来说,只是添加的不同的数据库驱动不同而已,这样利于项目的维护与移植。

5 结语

通过在URL传递参数,实现数据库分页查询,不仅简单、方便,而且在其中用到了当前流行的Struts、Hibernate技术作为支持,更使得项目更清晰,利于维护,此外在项目中也可以加入Spring技术,基于切面编程和依赖注入或使得项目更加整洁,也更加清晰。

[1]刘启文,周大海,夏秀峰.Web应用中可扩展分页技术的研究与实现[J].计算机应用,2006(s2):179-181.

[2]高文鹏.Java Web分页技术与实现[J].电脑编程技巧与维护,2010(8):82-84.

[3]李政.JAVA数据库数据分页技术[J].电脑编程技巧与维护,2004(4):38-39.

[4]陈丹桂,任周.基于JSP分页技术的研究[J].计算机与数字工程,2009(6):98-100.

[5]周作建,惠志婷,徐颖.JSP分页技术[J].电脑编程技巧与维护,2007(8):13-17.

[6]阎冰洁,万亮,肖敏.高性能查询分页技术的研究与应用[J].电脑知识与技术,2006(14):82-83.

[7]翟高粤.基于Struts和Hibernate的文本按行分页技术[J].计算机时代,2009(8):40-41.

[8]付文平,罗键.基于Web的分页技术的设计与实现[J].计算机时代,2007(10):57-59.

猜你喜欢
中间层编程对象
涉税刑事诉讼中的举证责任——以纳税人举证责任为考察对象
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
一种十七股子午胎钢丝帘线
攻略对象的心思好难猜
基于熵的快速扫描法的FNEA初始对象的生成方法
镍基高温合金TLP扩散焊中间层材料研究进展
B含量对IC10合金TLP焊接用中间层材料及接头组织的影响