SSM框架条件分页查询研究与实现

2019-03-26 03:22
四川职业技术学院学报 2019年1期
关键词:插件框架对象

唐 权

(四川职业技术学院,遂宁 629000)

0.引言

SSM(Spring+SpringMVC+Mybatis)框 架 是一个非常优秀的Java EE轻量级框架,应用于Java EE企业级项目的开发中,成为当前主流Web应用程序开发框架。在Web应用项目中数据维护是基础性工作,具有非常重要的作用,也是工作量较大的环节,主要包括对数据的查询、增加、删除与修改。项目开发中如何减轻这些工作量,实现方式与标准统一,节省开发时间,提高工作效率具有重要的作用。本文就数据维护中的条件分页查询,把PageHelper技术整合到SSM框架中,对SSM框架以最小的侵入,实现快速分页查询。

1.SSM框架概述

SSM框架包括三个部分,分别是Spring技术、SpringMVC技术、Mybatis技术。Spring技术是整个框架的核心,通过Spring依赖注入模式,把SpringMVC与MyBatis框架整合在一起。其中SpringMVC主要实现模块的 MVC(Model View Controller)功能,负责把用户的请求根据映射关系提交到对应的控制器;MyBatis实现数据访问层的功能,通过ORM映射与数据库进行数据交互,读取数据库的数据或保存数据实现数据持久化;业务逻辑层也叫服务层,实现应用程序的业务逻辑,向上给控制层的提供服务,向下调用数据访问层和数据库进行数据交互。SSM框架整合后数据查询业务流程各模块对象序列图如图1所示。

第一.用户通过Browser发送查询请求,被SpringMVC框架的DispatcherServlet拦截,通过请求映射关系,转到对应的控制器Con

图1 SSM整合框架查询业务序列图

第二.Controller根据请求的url找到对应的处理方法,在方法中调用服务层Service对应的方法查询数据。

第三.Service层查询数据方法又去调用数据访问层Dao层对应的数据查询接口。

第四.Dao层接口最终通过MyBatis提供的ORM映射,在数据库中完成查询业务,并返回查询结果对象信息。

第五.根据各层对象的调用关系,最终会把查询结果封装在对象列表中,返回到控制层Controller,最终到浏览器显示查询结果。

2.SSM条件查询的实现

本节将以用户管理实例来展现条件查询业务的在SSM框架中具体实现过程,其中用户的数据结构是User(id,name,password,department)。

2.1 Dao数据访问层的实现

Dao层的实现包括三个过程,其一编写User对象用来封装查询用户信息,其二是编写数据查询访问接口,其三是配置接口映射文件实现接口的中数据查询。

第一.创建User类:根据用户表的信息及字段,定义用户对象User类及其属性和getters、setters方法,为了简便可以把字段名与对象的属性名定义成相同名字。

第二.创建用户条件查询接口:创建用户接口类 UserDao,定义查询接口findUserList,其中返回值为User对象列表,查询参数也是User封装的查询用户各字段的属性值。

第三.创建配置接口映射文件:创建映射文件UserDao.xml,其中namespace属性与接口类名称对应,select元素对应执行查询sql语句,id属性对应接口查询用户方法名,parameterType对应接口方法中参数类型,resultType属性对应查询返回结果类型。MyBatis框架会通过ORM映射把查询结果的记录转换成User对象放在列表中。接口方法的参数User中封装查询条件,通过if子句测试每一个查询条件,如何不为空就加入到查询条件的sql语句中,关键代码如下:

2.2 Service服务层实现

Service层也叫业务逻辑层,在服务层创建服务类UserService,注入数据访问层UserDao接口,定义服务层查询业务的方法find-UserList,在方法中调用数据访问层UserDao的用户查询接口实现数据查询,返回结果为User对象列表供控制层调用。主要实现代码如下:

关键说明:

(1).@Service注解是表示服务类会被Spring框架扫描并装配成Bean对象;

(2).@Transactional注解表示在服务层所有的方法都会被纳入SSM框架的事务管理器管理,保证服务层方法的原子性;

(3).@Autowired注解表示服务层类对数据访问层接口UserDao的依赖性,框架会通过类型自动装配成Bean并注入到当前类的Bean中。

2.3 Controller控制层实现

SSM框架中的Controller层由程序员开发,通过SpringMvc框架的DispathcerServlet处理把客户请求转到控制层,其关键代码如下:

关键代码说明:

(1)@Controller注解表示该控制层类被Spring框架扫描装配成控制器的Bean对象;

(2)@Autowired按类型装配服务层的userService为Bean对象,自动注入到控制器;

(3)@RequestMapping注解表示查询用户的url映射为findUserList,即浏览器发出的以findUserList为后缀的请求会映射到当前控制器的findUserSeletive方法进行处理。

(4)findUserSelective方法的参数map封装方法查询结果数据到表示层;参数user封装的查询条件信息,供查询使用。

(5)通过返回字符串“findUserSelective”,SpringMVC框架会解析到指定路径下对应的Jsp页面显示查询结果。

图2 条件查询结果

2.4 表示层的实现

表示层用于显示查询结果数据,主要包括条件查询表单与查询结果显示两部分。

查询表单封装查询关键字段,为了方便查询参数自动封装成user对象,要求表单查询条件输入项的name属性与User类的属性名相同,表单提交后就会自动封装到成user对象,作为控制层的输入参数。查询结果通过标签库〈c:forEach items="${lists}"var="user"〉把控制器map参数中的列表lists通过EL表达式${lists}循环取出来存放在变量user中,然后再通过EL表达式${user.id}、${user.name}、${user.department}等方式在表格中显示出来。通过以上各层的操作,能够正确在SSM框架中实现数据的条件查询业务,执行结果如图2所示。

3.SSM框架整合分页查询模块

上节的SSM框架实现了条件查询业务,但是还没有完成分页功能,如果查询结果数据量较大,必须进行分页操作,就是在SSM框架上整合MyBatis的分页插件PageHelper,快捷实现查询数据分页功能。

3.1 分页插入的引入

MyBatis的分页插件包括两个软件包,分别是pagehelper-4.1.4.jar与jsqlparser-0.9.5.jar。不同的版本号可以通过网络平台下载,下载后导入到项目的WEB-INF下的lib文件夹中,然后在SSM框架的MyBatis-config.xml文件中进行插件配置。

配置文件中两个最主要点必须配置:其一是通过“interceptor”属性在框架中引入Page-Helper插件类;其二是通过属性"dialect"配置底层数据库的类型,本文项目中使用的是mysql数据库。其它属性是对分页其它功能进行规范可参考说明文档进行选择配置。

3.2 分页功能实现

配置好分页插件后就是在项目中使用插件完成分页工作,该项工作主要集中在控制层与表示层两个方面。

(1)控制层分页实现:控制层查询方法处作如下改变:其一是修改控制层查询方法中的参数,加入页号pageNum与页面记录数pageSize;其二是在执行查询之间加入PageHelper.startPage(pageNum,pageSize)语句;其三是把查询结果封装成分页信息PageInfo对象;其四是通过map参数封装查询条件与分页信息到表示层,主要代码如下:

(2)表示层的实现:表示层改变主要是在表格下面增加分页控件,并绑定分页请求地址和请求参数,分页请求地址与查询地址相同,分页请求参数包括查询条件与页面信息,查询条件从返回的map对象的user属性中读取,页面参数通过返回的PageInfo对象成员中获取。其中PageInfo包含 了 成 员 有 :firstPage、prePage、nextPage、lastPage、pages、total 等,分别封装了首页、前一页、下一页、最后页的页号和页面总数、记录总数可以作为页面导航的参数。如:下一页的导航请求可写为 〈a href="findUserList?pageNum=${page.nextPage}&pageSize=${page.page-Size}&id=${user.id}&name=${user.name}&department=${user.department}〉 下一页〈/a〉这样的形式。

通过控制层与表示层的简单改变,就可以简洁实现数据的条件查询分页任务,而且不会改变服务层与数据访问层的任何代码,以最小的侵入完成了条件查询分页功能,分页后的效果如图3所示。

图3 分页条件查询结果

4.结束语

本文应用于SSM框架,从数据访问层、服务层、控制层、表示层来构建了表单查询功能的实现过程,并在此基础上加入MyBatis的分页插件PageHelper,通过对控制层与表示层的简单的改造,快速实现了数据维护中的综合查询分页功能,为实际的项目开发过程提供了一种较的解决方案。

猜你喜欢
插件框架对象
框架
涉税刑事诉讼中的举证责任——以纳税人举证责任为考察对象
K-框架和紧K-框架的算子扰动的稳定性
判断电压表测量对象有妙招
广义框架的不相交性
自编插件完善App Inventor与乐高机器人通信
攻略对象的心思好难猜
基于jQUerY的自定义插件开发
区间对象族的可镇定性分析
关于原点对称的不规则Gabor框架的构造