英语原文共 4 页,剩余内容已隐藏,支付完成后下载完整资料
基于Spring MVC和Mybatis的轻量级MVC框架研究
摘要 - 为了提升基于模型 - 视图 - 控制器(MVC)的Web应用程序框架开发和运行的效率,并根据实际的商业环境和项目实践,本文对常用到的Web框架应用系统进行了研究。 通过Spring MVC框架和Mybatis框架的研究以及一些相关的核心技术,结合JSP和JSTL技术,本文实现了基于Spring MVC的轻量级Web应用程序框架和Mybatis。
关键词 – Spring MVC;Mybatis;MVC;Framework
近年来随着互联网的飞速发展和技术的不断改进创新,基于实际生活需求的浏览器/服务器(B / S)模式多层Web架构逐渐成熟。因为克服了传统Web应用开发方法的缺点,MVC模式现在被广泛使用。在MVC框架中,系统分为三层,分别命名为Model,View和控制器。这些层是相对独立的,每层都有一个清晰的功能。 由于这些特点,MVC框架大大有利于模块化开发并提高系统的效率,提升了可维护性和代码可重用性,可以适应越来越复杂的多层次应用系统的发展要求。
基于MVC的Web框架的开发是Java 2企业版(J2EE)前所未有的繁荣。其中一些具有开发效率的优势,一些有优势的运营效率,还有一些具有安全的优势。 所以我们可以结合这些框架的优势来创建一个相对有效的和轻量级框架。
Spring MVC分离了控制器,模型的作用对象,调度程序和处理程序对象更容易定制。另外,Mybatis是数据库持久层框架,封装Java数据库连接(JDBC)并简化了操纵数据库的过程,与Hibernate对比,Mybatis自由度和访问的程度数据库效率得到提高。采用Spring MVC和Mybatis技术有机结合,这两种技术搭建了一个轻量级的MVC开发框架,不仅可以有效地实现提高系统开发的效率,降低开发的复杂性,也会提高系统的安全性,稳定性和鲁棒性。
本文的组织结构如下。 首先是概述和比较Struts2与Spring MVC,Hibernate和Mybatis在第二部分介绍。第三部分介绍基于Spring MVC和Mybatis的系统开发与执行。 第四部分将基于时间描述这些框架之间的比较,第5节是本文的结论。
- MVC框架
MVC,因为理想地分离业务逻辑和视图层,已经成为程序开发的一个趋势设计。 随着人们继续研究MVC,MVC框架不断发展。目前,更成熟稳定的MVC框架主要包括Struts,Struts2,Webwork,Spring MVC等引进了Struts2和Spring MVC。
- Struts2:
Struts2是一个新的Web层应用程序框架,通过合并Struts1和WebWork的基础而得来。 它以WebWork为核心,主要使用Java Server Page(JSP)和Servlet技术,并集成Servlet,JSP,定制标签和信息资源。开发者只需要开发相应的Action类,ActionFormBean和JSP组件,并在开发该项目时应用Struts框架即可。
- Spring MVC:
Spring是一个轻量级的容器框架,以控制反转(IoC)和面向方面的特性编程(AOP)为核心,其中有七个定义明确模块。 Spring MVC是七个模块之一,是一个完整的轻量级实现MVC来构建Web应用的框架。Spring MVC完美地实现了核心概念和MVC的功能,您可以通过简单配置来动态地配置组件。Spring MVC的工作流程类似这样:当客户端发送HTTP请求时,核心控制器(DispatcherServlet)接收请求,和根据URL查找HandleMapping来调度请求相应的控制器。 控制器调用适当的业务逻辑来处理请求,并返回视图名称和ModelAndView对象DispatcherServlet。当进程完成后,最后通过ViewResolver将返回的ModelAndView渲染到相应的视图。
- Struts2 和 Spring MVC的比较:
操作效率:从配置文件角度来说,Struts2的数量大于Spring MVC; Spring MVC使用时更简洁; 开发效率Spring MVC高于Struts2。
运行效率:Struts2的设计是基于Class文件,对于请求,它使用class-level拦截器和Spring MVC的设计是基于同样的方法,它使用方法级拦截器; Struts2将注入Action所在的类的所有属性,而Spring MVC只注入当前Action的请求数据,所以Spring MVC的运行效率将会高于Struts2。
Spring MVC的实现完全分离了业务逻辑和视图。处理业务逻辑后,它返回一个字符串,没有关于显示的任何关联的标志技术的视图层,然后显示数据显示技术根据对应的字符串,通过在ViewResolver中配置的信息进行匹配,找到要渲染的视图。
B.Hibernate and Mybatis
Mybatis和Hibernate都是数据库持久层框架,具有不同程度的封装JDBC。 与直接使用JDBC进行访问数据库相比,它们大幅提高了开发效率。
Hibernate是一个对象关系映射框架,封装了JDBC。所以,开发业务时,程序员可以采用面向对象编程而不是数据库导向,这使它有更清晰的分工,提高开发项目的效率。但是,它不是一个低门槛,学习Hibernate是一个更高的门槛。它需要更多的经验和强大的用户能力,这样才清楚该如何设计O / R映射和如何在性能和对象模型之间进行平衡。
Mybatis是一款优秀的半自动数据库持久层ORM框架,它支持常见的SQL查询,存储过程和高级映射等操作。 Mybatis使用简单的XML或注释做配置和原始映射,以及将接口和Java POJO映射到数据库中的记录。
在基于Spring MVC和Mybatis实现MVC框架的基础上,使用Spring MVC框架诠释了MVC模式,Mybatis作为数据库持久化框架,Excel,JSP,PDF,jQuery组合使用JSTL作为视图开发技术,并且使用Logback处理程序运行时产生的大量日志。
根据MVC的层次思想,在使用这个框架进行开发时,控制器层包括了核心控制器和业务控制器,View层主要是用JSP和Excel等来实现的,模型层包括数据访问对象(DAO)层,服务层,Bean层和DAO层使用Mybatis访问数据库。
对于Spring MVC,需要进行以下配置工作:(1)配置Core Controller描述符文件; (2)配置ViewResolverSpring MVC配置文件; (3)由于使用注解进行项目开发,它需要启动组件扫描来激活配置中的注释扫描Spring MVC文件功能; (4)将HandleMapping配置在业务控制器中。
使用前需要配置两种类型的文件来让Mybatis能够正常访问数据库。 一个是主要配置文件,其中配置了数据库连接信息和加载实体的Mapper配置文件,以及定义实体的别名; 另一个是Mapper配置,用于实体定义该文件的命名空间的文件,在该文件中,包含了以下实体信息:命名空间域、参数类型、结果类型、增删改查操作,当然还少不了独一无二的标志位id。
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。但是也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件更加容易。XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。当然,还有很多可以在XML 文件中进行配置,上面的示例指出的则是最关键的部分。要注意 XML 头部的声明,用来验证 XML 文档正确性。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则是包含一组 mapper 映射器(这些 mapper 的 XML 文件包含了 SQL 代码和映射定义信息)。
如果你更愿意直接从 Java 程序而不是 XML 文件中创建 configuration,或者创建你自己的 configuration 构建器,MyBatis 也提供了完整的配置类,提供所有和 XML 文件相同功能的配置项。注意该例中,configuration 添加了一个映射器类(mapper class)。映射器类是 Java 类,它们包含 SQL 映射语句的注解从而避免了 XML 文件的依赖。不过,由于 Java 注解的一些限制加之某些 MyBatis 映射的复杂性,XML 映射对于大多数高级映射(比如:嵌套 Join 映射)来说仍然是必须的。有鉴于此,如果存在一个对等的 XML 配置文件的话,MyBatis 会自动查找并加载它(这种情况下, BlogMapper.xml 将会基于类路径和 BlogMapper.class 的类名被加载进来)。具体细节稍后讨论。
既然有了 SqlSessionFactory ,顾名思义,我们就可以从中获得 SqlSession 的实例了。SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
诚然这种方式能够正常工作,并且对于使用旧版本 MyBatis 的用户来说也比较熟悉,不过现在有了一种更直白的方式。使用对于给定语句能够合理描述参数和返回值的接口(比如说BlogMapper.class),你现在不但可以执行更清晰和类型安全的代码,而且还不用担心易错的字符串字面值以及强制类型转换。
现在,或许你很想知道 SqlSession 和 Mapper 到底执行了什么操作,而 SQL 语句映射是个相当大的话题,可能会占去文档的大部分篇幅。不过为了让你能够了解个大概,这里会给出几个例子。
在上面提到的两个例子中,一个语句应该是通过 XML 定义,而另外一个则是通过注解定义。先看 XML 定义这个,事实上 MyBatis 提供的全部特性可以利用基于 XML 的映射语言来实现,这使得 MyBatis 在过去的数年间得以流行。如果你以前用过 MyBatis,这个概念应该会比较熟悉。不过 XML 映射文件已经有了很多的改进,随着文档的进行会愈发清晰。
对于这个简单的例子来说似乎有点小题大做了,但实际上它是非常轻量级的。在一个 XML 映射文件中,你想定义多少个映射语句都是可以的,这样下来,XML 头部和文档类型声明占去的部分就显得微不足道了。文件的剩余部分具有很好的自解释性。在命名空间“org.mybatis.example.BlogMapper”中定义了一个名为“selectBlog”的映射语句,这样它就允许你使用指定的完全限定名“org.mybatis.example.BlogMapper.selectBlog”来调用映射语句,就像上面的例子中做的那样:
Blog blog = (Blog) session.selectOne('org.mybatis.example.BlogMapper.selectBlog', 101);
你可能注意到这和使用完全限定名调用 Java 对象的方法是相似的,之所以这样做是有原因的。这个命名可以直接映射到在命名空间中同名的 Mapper 类,并在已映射的 select 语句中的名字、参数和返回类型匹配成方法。这样你就可以向上面那样很容易地调用这个对应 Mapper 接口的方法。不过让我们再看一遍下面的例子:
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
第二种方法有很多优势,首先它不是基于字符串常量的,就会更安全;其次,如果你的 IDE 有代码补全功能,那么你可以在有了已映射 SQL 语句的基础之上利用这个功能。
命名空间(Namespaces)在之前版本的 MyBatis 中是可选的,容易引起混淆因此是没有益处的。现在的命名空间则是必须的,目的是希望能比只是简单的使用更长的完全限定名来区分语句更进一步。
命名空间使得你所见到的接口绑定成为可能,尽管你觉得这些东西未必用得上,你还是应该遵循这里的规定以防哪天你改变了主意。出于长远考虑,使用命名空间,并将它置于合适的 Java 包命名空间之下,你将拥有一份更加整洁的代码并提高了 MyBatis 的可用性。
命名解析:为了减少输入量,MyBatis 对所有的命名配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则。
完全限定名(比如“com.mypackage.MyMapper.selectAllThings”)将被直接查找并且找到即用。
短名称(比如“selectAllThings”)如果全局唯一也可以作为一个单独的引用。如果不唯一,有两个或两个以上
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[137679],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。