作者:肖睿 肖静 董宁
出版社:人民邮电出版社
格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT
SSM轻量级框架应用实战试读:
前言
集成应用开发框架和基于框架技术开发Web应用,已是软件业界和软件复用研究领域的流行技术。本书针对超市订单管理系统,结合实例介绍了My Batis、Spring、Spring MVC框架的应用,并最终搭建SSM应用框架,并熟练掌握在该框架上进行项目开发的技巧。
通过本书的学习,读者可以掌握如何使用SSM框架技术来开发结构合理、性能优异、代码健壮的应用程序。同时,通过对相关知识的学习和运用,读者可以理解框架原理、熟练掌握应用技巧,为今后的实际工作奠定扎实的技术基础。在本书中,介绍了以下几方面的内容。
第一部分(第1~3章):My Batis框架技术,包括ORM持久化、My Batis的核心对象和核心配置文件、SQL映射文件等技术概念,以及如何在项目中搭建My Batis框架开发环境、使用My Batis完成增删改查操作、熟练使用动态SQL等实用技能。
第二部分(第4~7章):Spring框架技术,了解Spring框架的概念及发展历程,学习并掌握Spring的核心机制—IoC与AOP,这些技术使得Spring在框架集成开发领域扮演着重要角色。我们将在项目中实际应用这些技术,并首先完成Spring对My Batis的集成。
第三部分(第8~11章):Spring MVC框架技术,包括基于注解的控制器、视图解析器、数据绑定、静态资源的处理等,通过学习将逐步熟悉Spring MVC框架的请求处理流程以及体系结构,掌握Spring MVC的配置、JSON数据的处理、请求拦截器以及Spring MVC+Spring+My Batis的框架集成。学完本部分内容,读者将能够开发基于MVC设计模式、高复用、高扩展、松耦合的Web应用程序。
第四部分(第12章):完成一个SSM架构的企业级项目—APP信息管理平台,对前面章节所学的SSM技能进行检查、巩固和提高,并熟练使用Git实现项目代码的版本管理,以及采用Bootstrap框架进行前端实现。
贯穿全书的案例是“超市订单管理系统”,可利用各章所学技能对该案例功能进行实现或优化。全书学习结束后,将完成一个完整的项目案例“APP信息管理平台”,在学习技能的同时获取项目的开发经验,一举两得。
本书由课工场大数据开发教研团队组织编写,参与编写的还有肖静、董宁、尹衍林、张娟等院校老师。由于时间仓促,书中不足或疏漏之处在所难免,殷切希望广大读者批评指正!关于引用作品的版权声明
为了方便读者学习,促进知识传播,本书选用了一些知名网站的相关内容作为学习案例。为了尊重这些内容所有者的权利,特此声明,凡在书中涉及的版权、著作权、商标权等权益均属于原作品版权人、著作权人、商标权人。
为了维护原作品相关权益人的权益,现对本书选用的主要作品的出处给予说明(排名不分先后)。
以上列表中并未全部列出本书所选用的作品。在此,我们衷心感谢所有原作品的相关版权权益人及所属公司对职业教育的大力支持!第1章My Batis入门技能目标
理解数据持久化概念和ORM原理
理解My Batis的概念、优点、特性
了解My Batis与JDBC的区别与联系
掌握My Batis开发环境的搭建
掌握核心配置文件的结构内容
理解核心类的作用域和生命周期本章任务
学习本章,读者需要完成以下4个任务。记录学习过程中遇到的问题,并通过自己的努力或访问kgc.cn解决。
任务1:初识框架技术
任务2:搭建My Batis环境
任务3:掌握My Batis的核心对象
任务4:掌握My Batis的核心配置文件任务1 初识框架技术1.1.1 强大的框架技术
如何制作一份看上去具有专业水准的PPT文档呢?一个最简单的方法就是使用Microsoft Power Point的模板功能,如图1.1所示。图1.1 使用PPT模板
使用模板新建出来的文档已经有了一个PPT的“架子”,我们只需要把必要的信息像填空一样填写进去就可以了,如图1.2所示。图1.2 使用PPT模板创建的新文档思考:使用PPT模板制作PPT文档有哪些好处?
使用PPT模板制作PPT文档的优点如下。(1)不用考虑布局、排版等问题,提高了效率。(2)可以专心于PPT的内容,使演讲的“质量”更有保障。(3)新手也可以制作出很专业的幻灯片演讲稿。
使用框架构建项目也是基于这样的考虑。当确定使用哪个框架技术后,就已经有了一个“半成品”,然后在这个半成品里填上内容,工作就完成了。框架技术的优势如下。(1)不用再考虑公共问题,框架已经帮我们做好了。(2)可以专心于业务逻辑,保证核心业务逻辑的开发质量。(3)结构统一,便于学习和维护。(4)框架中集成了前人的经验,可以帮助新手写出稳定、性能优良而且结构优美的高质量程序。1.1.2 什么是框架
框架(Framework)是一个提供了可重用的公共结构的半成品。它为我们构建新的应用程序提供了极大的便利,不但提供了可以拿来就用的工具,更重要的是,还提供了可重用的设计。“框架”一词最早出现在建筑领域,指的是在建造房屋前期构建的建筑骨架(见图1.3)。对应用程序来说,“框架”就是应用程序的骨架,开发者可以在这个骨架上加入自己的东西,搭建出符合自己需求的应用系统。框架中凝结着前人的经验和智慧,使用框架,我们就像站在了巨人的肩膀上。图1.3 建筑“框架”
Richard Oberg(Web Work的作者和JBoss的创始人之一)说过:“框架的强大之处不是它能让你做什么,而是它不能让你做什么。”Richard还强调了框架另一个层面的含义:框架使混乱的东西变得结构化。莎士比亚说:“一千个人眼中有一千个哈姆雷特。”同样,如果没有框架的话,一千个人将写出一千种Servlet+Java Bean+JSP的代码,而框架则保证了程序结构风格的统一。从企业的角度来说,框架降低了培训成本和软件的维护成本。框架在结构统一和创造力之间维持着一个合适的平衡。1.1.3 当前的主流框架1.Struts 2框架
Struts 2以Web Work优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的基于MVC设计模式实现的Web应用程序框架。它引入了几个新的框架特性:从逻辑中分离出横切关注点的拦截器,减少或者消除配置文件,贯穿整个框架的强大表达式语言,支持可变更和可重用的基于MVC模式的标签API等。Struts 2充分利用了从其他MVC框架学到的经验和教训,使整个框架更加清晰、灵活。2.Hibernate框架
Hibernate是一个优秀的持久化框架,负责简化将对象数据保存到数据库中,或从数据库中读取数据并封装到对象的工作。Hibernate通过简单配置和编码即可替代JDBC烦琐的程序代码。Hibernate已经成为当前主流的数据库持久化框架,被广泛应用在实际工作中。3.Spring框架
Spring也是一个开源框架。它的目标是使现有的Java EE技术更容易使用和养成良好的编程习惯。它是一个轻量级的框架,渗透了Java EE技术的方方面面。它主要作为依赖注入容器和AOP实现存在,还提供了声明式事务、对DAO层的支持等简化开发的功能。Spring可以很方便地与Spring MVC、Struts 2、My Batis、Hibernate等框架集成,大名鼎鼎的SSM集成框架指的就是基于Spring MVC + Spring + My Batis的技术框架,使用这个集成框架将使我们的应用程序更加健壮、稳固、轻巧和优雅,这也是当前最流行的Java技术框架。4.Spring MVC框架
Spring MVC是Spring框架提供的构建Web应用程序的全功能MVC模块,属于Spring Framework的后续产品,已经融合在Spring Web Flow里面,是结构最清晰的MVC Model 2的实现。它拥有高度的可配置性,支持多种视图技术,还可以进行定制化开发,相当灵活。此外,Spring整合Spring MVC可以说是无缝集成,是一个高性能的架构模式。现在已越来越广泛地应用于互联网应用的开发中。5.My Batis框架
My Batis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。其封装性要低于Hibernate,性能优越,并且小巧、简单易学,应用也越来越广泛。任务2 搭建My Batis环境
关键步骤如下。
下载需要的jar文件。
部署jar文件。
创建My Batis核心配置文件configuration.xml。
创建持久化类(POJO)和SQL映射文件。
创建测试类。1.2.1 什么是数据持久化
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如,文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。
结合以上的概念描述,我们思考一下,之前是否接触过数据持久化?是否做过数据持久化的操作?答案是肯定的。编写应用程序操作数据表,对数据表进行增删改查等操作,都是数据持久化操作。My Batis和数据持久化之间有什么关系呢?带着这个问题来学习下面的内容。1.2.2 My Batis框架及ORM1.My Batis框架简介
My Batis是一个开源的数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。My Batis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做能将SQL与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改SQL。
My Batis的前身是i Batis,是Apache的一个开源项目,2010年这个项目由Apache Software Foundation迁移到了Google Code,并更名为My Batis。2013年又迁移到Github。
My Batis官网:http://mybatis.org。
Github:https://github.com/mybatis。2.什么是ORM
持久化与ORM
对象/关系映射(Object/Relational Mapping,ORM)是一种数据持久化技术。它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过Java Bean对象去操作数据库表中的数据,如图1.4所示。图1.4 ORM映射关系
在实际开发中,程序员使用面向对象的技术操作数据,而当存储数据时,使用的却是关系型数据库,这样造成了很多不便。ORM在对象模型和关系数据库的表之间建立了一座桥梁,有了它,程序员就不需要再使用SQL语句操作数据库中的表,使用API直接操作Java Bean对象就可以实现数据的存储、查询、更改和删除等操作。My Batis通过简单的XML或者注解进行配置和原始映射,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。3.My Batis是ORM解决方案
搭建My Batis开发环境
基于ORM,My Batis在对象模型和关系数据库的表之间建立了一座桥梁。通过My Batis,可以建立SQL关系映射,便捷地实现数据存储、查询、更改和删除等操作。1.2.3 搭建My Batis环境
在My Eclipse中新建工程后,需做以下准备工作才可以使用My Batis,如图1.5所示。图1.5 My Batis环境准备步骤1.下载需要的jar文件
My Batis的官网可以下载到最新发布版本的My Batis,其他发布版本的My Batis的jar文件也可以从官方网站下载。
提示
推荐下载mybatis-3.2.2.zip和mybatis-3-mybatis-3.2.2.zip(通过相应版本的“Source Code(zip)”链接下载)。(1)mybatis-3.2.2.zip
mybatis-3.2.2.zip是My Batis的jar文件,解压后的目录结构如图1.6所示。
注意查看根目录(mybatis-3.2.2)和lib目录。在根目录下存放着mybatis-3.2.2.jar和mybatis-3.2.2.pdf,后者为My Batis官方使用手册。
lib目录下存放着编译依赖包,如图1.7所示。这些jar文件的作用如表1-1所示。图1.6 目录结构图1.7 My Batis编译依赖包表1-1 My Batis编译依赖包中文件说明(2)mybatis-3-mybatis-3.2.2.zip
mybatis-3-mybatis-3.2.2.zip是My Batis的源码包,里面是My Batis的所有源代码,解压后目录结构如图1.8所示。图1.8 目录结构2.部署jar文件
部署jar文件的具体操作步骤如下。(1)将下载的mybatis-3.2.2.jar、mysql-connector-java-5.1.0-bin.jar(My SQL数据库驱动jar文件)及log4j-1.2.17.jar(负责日志输出的jar文件)复制到建好的工程WEB-INF下的lib目录中。(2)下面通过My Eclipse导入上述包。首先在My Eclipse中的工程上右击,选择“Build Path→Configure Build Path”选项,如图1.9所示。图1.9 “Configure Build Path”选择界面(3)在弹出的窗体中单击“Add JARs”按钮,如图1.10所示。图1.10 “Add JARs”选用界面(4)在弹出的“JAR Selection”窗体中选择lib下刚刚复制的jar文件,如图1.11所示。图1.11 复制jar文件界面(5)单击“OK”按钮,这时在工程中加入了所选的jar文件,如图1.12所示。图1.12 导入支持的jar文件界面
为了更方便地学习My Batis,可以在My Eclipse环境中设置当前工程中mybatis-3.2.2.jar的源码,具体步骤如下。(1)选中mybatis-3.2.2.jar,单击右键弹出的快捷菜单如图1.13所示。图1.13 右击mybatis-3.2.2.jar弹出的快捷菜单(2)选择“Properties”选项,进入属性界面,选中“Java Source Attachment”选项,如图 1.14所示。图1.14 查看mybatis-3.2.2.jar的属性(3)单击“External Folder”按钮,找到源码所在的目录,即/ mybatis-3-mybatis-3.2.2,如图1.15所示,选中目录后单击“确定”按钮即可。需要注意的是,若源码为jar文件,则单击“External File”按钮,找到源码所在的目录,选中jar文件即可,此处不再赘述。图1.15 定位My Batis源码所在目录3.创建My Batis核心配置文件configuration.xml
My Batis核心配置文件主要用于配置数据库连接和My Batis运行时所需的各种特性,包含了设置和影响My Batis行为的属性。
为了方便管理以后各框架集成所需的配置文件,需在项目工程下新建Source Folder类型的resources目录,并在此目录下添加My Batis的核心配置文件,默认文件名为“configuration.xml”。需要注意的是,为了在框架集成时更好地区分各个配置文件,我们一般将此文件命名为“mybatis-config.xml”。该文件需要配置数据库连接信息和My Batis的参数,关键代码如示例1所示。注意
My Batis的示例和上机练习均使用超市订单管理系统,该系统使用My SQL数据库,在root用户下导入SQL脚本(smbms_db.sql)后,数据库为smbms,包括用户表、角色表、供应商表、订单表、地址信息表。在任务2最后的技能训练中会有超市订单管理系统的功能介绍。
如果没有特别说明,My Batis的示例和上机练习都在测试类中运行,运行结果在控制台输出。
示例1
PUBLIC"-//mybatis.org//DTDConfig3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
mybatis-config.xml文件中几个常用元素的作用如下。(1)configuration:配置文件的根元素节点。(2)properties:通过resource属性从外部指定properties属性文件(database.properties),该属性文件描述数据库连接的相关配置(数据库驱动、连接数据库的url、数据库用户名、数据库密码),其位置也是在/resources目录下。(3)settings:设置My Batis运行中的一些行为,比如此处设置My Batis的log日志实现为LOG4J,即使用log4j实现日志功能。(4)environments:表示配置My Batis的多套运行环境,将SQL映射到多个不同的数据库上,该元素节点下可以配置多个environment子元素节点,但是必须指定其中一个为默认运行环境(通过default指定)。(5)environment:配置My Batis的一套运行环境,需指定运行环境ID、事务管理、数据源配置等相关信息。(6)mappers:作用是告诉My Batis去哪里找到SQL映射文件(该文件内容是开发者定义的映射SQL语句),整个项目中可以有一个或多个SQL映射文件。(7)mapper:mappers的子元素节点,具体指定SQL映射文件的路径,其中resource属性的值表述了SQL映射文件的路径(类资源路径)。编写My Batis的核心配置文件注意
mybatis-config.xml文件的元素节点是有一定顺序的,如果节点位置不按顺序排位,那么XML文件会报错。
完成了My Batis的配置文件mybatis-config.xml的创建,接下来就要准备持久化类和SQL映射文件。4.创建持久化类(POJO)和SQL映射文件
持久化类是指其实例状态需要被My Batis持久化到数据库中的类。在应用的设计中,持久化类通常对应需求中的业务实体。My Batis一般采用POJO(Plain Ordinary Java Object)编程模型来实现持久化类,与POJO类配合完成持久化工作是My Batis最常见的工作模式。
POJO从字面上来讲就是普通Java对象。POJO类可以简单地理解为符合Java Bean规范的实体类,它不需要继承和实现任何特殊的Java基类或者接口。Java Bean对象的状态保存在属性中,访问属性必须通过对应的getter和setter方法。
下面首先以用户表(smbms_user)为例,定义用户POJO类。User.java的关键代码如示例2所示。
示例2
public class User {
/*字段*/
private Integer id; //id
private String user Code; //用户编码
private String user Name; //用户名称
private String user Password; //用户密码
private Integer gender; //性别
private Date birthday; //出生日期
private String phone; //电话
private String address; //地址
private Integer user Role; //用户角色
private Integer created By; //创建者
private Date creation Date; //创建时间
private Integer modify By; //更新者
private Date modify Date; //更新时间
//省略getter&setter方法
}注意
在My Batis中,不需要POJO类名与数据库表名一致,因为My Batis是POJO与SQL语句之间的映射机制,一般情况下,保证POJO对象的属性与数据库表的字段名一致即可。
接下来,继续创建SQL映射文件,完成与POJO(实体类)的映射,该文件也是一个XML文件,名为User Mapper.xml,关键代码如示例3所示。
示例3
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select count(1) as count from smbms_user
经验SQL映射文件一般都对应于相应的POJO,所以一般都是以POJO的名称+Mapper的规则来命名。当然该mapper文件属于DAO层的操作,应该放置在dao包下,并根据业务功能进行分包放置,如cn.smbms.dao.user.User Mapper.xml。
示例3中User Mapper.xml定义了SQL语句,其中各元素的含义如下。
mapper:映射文件的根元素节点,只有一个属性namespace。
namespace:用于区分不同的mapper,全局唯一。
select:表示查询语句,是My Batis最常用的元素之一,常用属性如下。
id属性:该命名空间下唯一标识符。
result Type属性:表示SQL语句返回值类型,此处通过SQL语句返回的是int数据类型。5.创建测试类
在工程中加入JUnit4,创建测试类(User Mapper Test.java)进行功能测试,并在后台打印出用户表的记录数,具体的实现步骤如下。(1)读取全局配置文件mybatis-config.xml,如以下代码所示:
String resource ="mybatis-config.xml";
//获取mybatis-config.xml文件的输入流
Input Stream is = Resources.get Resource As Stream(resource);(2)创建Sql Session Factory对象,此对象可以完成对配置文件的读取,如以下代码所示:
Sql Session Factory factory = new Sql Session Factory Builder().build(is);(3)创建Sql Session对象,此对象的作用是调用mapper文件进行数据操作,必须先把mapper文件引入到mybatis-config.xml中才能生效,如以下代码所示:
int count = 0;
Sql Session sql Session = null;
sql Session = factory.open Session();
//My Batis通过mapper文件的namespace和子元素的id来找到相应的SQL,从而执行查询操作
count = sql Session.select One("cn.smbms.dao.user.User Mapper.count");
logger.debug("User Mapper Test count--->"+ count);(4)关闭Sql Session对象,如以下代码所示:
sql Session.close();注意
本书所有的项目案例以及上机练习要求不再使用System.out.print进行后台日志的输出,一律使用log4j来实现日志的输出。这需要在resources目录下加入log4j.properties,并在My Batis的核心配置文件(mybatis-config.xml)中设置My Batis的LOG实现为log4j。
通过前面的学习,了解了My Batis框架,学习了如何搭建My Batis环境。接下来就根据上面的示例来对比JDBC,介绍一下My Batis框架的优缺点。1.2.4 My Batis框架的优缺点及其适用场合
回顾DAO层代码,以查询用户表记录数为例,直接使用JDBC和My Batis查询的两种实现方式的代码如图1.16所示。图1.16 JDBC与My Batis直观对比
用JDBC查询返回的是Result Set对象,Result Set往往不能直接使用,还需要转换成其他封装类型,因此通过JDBC查询并不能直接得到具体的业务对象,在整个查询的过程中就需要做很多重复性的转换工作,而使用My Batis则可以将如下几行JDBC代码分解包装。
第1、2行:对数据库连接的管理,包括事务管理。
第3、4、5行:My Batis通过配置文件来管理SQL以及输入参数的映射。
第6、7、8、9行:My Batis获取返回结果到Java对象的映射,也通过配置文件管理。1.My Batis框架的优点(1)与JDBC相比,减少了50%以上的代码量。(2)My Batis是最简单的持久化框架,小巧并且简单易学。(3)My Batis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,既降低耦合度,又便于统一管理和优化,还可重用。(4)提供XML标签,支持编写动态SQL语句。(5)提供映射标签,支持对象与数据库的ORM字段关系映射。2.My Batis框架的缺点(1)SQL语句的编写工作量较大,对开发人员编写SQL语句的功底有一定要求。(2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。3.My Batis框架适用场合
My Batis专注于SQL本身,是一个足够灵活的DAO层解决方案。对性能要求很高的项目,或者需求变化较多的项目,如互联网项目,My Batis将是不错的选择。
介绍完My Batis框架的特点之后,接下来介绍超市订单管理系统,并完成相应的上机练习。
技能训练
超市订单管理系统是一个B/S架构的信息管理平台,该系统的主要业务需求包括:记录并维护某超市的供应商信息以及该超市与供应商之间的交易订单信息。包括三种角色:系统管理员、经理、普通员工。其主要结构如图1.17所示。图1.17 超市订单管理系统
该系统使用My SQL数据库,请按图1.18所示的描述创建数据表。图1.18 超市订单管理系统数据库表及表间关系
图1.18描述了超市订单管理系统中的五张表以及它们之间的关系,下面通过表1-2至表1-6对这五张表进行说明。表1-2 用户表结构表1-3 角色表结构表1-4 供应商表结构(续表)表1-5 订单表结构表1-6 地址信息表结构注意
试读结束[说明:试读内容隐藏了图片]