SSM 框架整合
SSM 框架 (Spring+SpringMVC+MyBatis)
SSM 框架是 (Spring+SpringMVC+MyBatis)的缩写,这个框架是继 SSH(Spring+Struts+Hibernate)之后,目前比较主流的 Java EE 企业级框架,适合搭建各种中小型的企业级应用系统。由于之前也没有Java Web相关的工作经验以及后台系统开发经验,更别说应用框架来开发应用系统了。通过各方面的了解,SSM框架作为轻量级应用框架,速度快,效率高,最主要的还是学习成本更低。这样我们能更快地学习并应用到我们的项目当中!所以,追踪器的项目选择了 SSM这套框架作为我们的后台开发框架!以下,便详细的说明各个框架的优缺点以及 框架的具体搭建步骤。
1、基本概念以及优缺点
1.1、Spring
一、基本概念
Spring 是一个开源框架,于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来,用来简化企业系统应用开发。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
二、优点
- 通过 Spring 的 IOC特性,将对象的依赖关系都交给了 Spring 来控制,方便解耦,简化了开发 Controller-->Service -->Dao
- 让代码结构更良好
- 面向接口编程
- 高低原则:高内聚、低耦合
- 开闭原则:对扩展开放、对修改关闭
- 通过 Spring 的 AOP 特性,很容易实现事务、日志、权限的控制管理
- 提供了许多技术支持
- 提供了辅助类,如:JdbcTemplate、HibernateTemplate、StringUtils、CollectionUtils、StreamUtils等
- 提供单例模式
- 提供对主流开源框架的提供集成支持,如 mybatis,shiro,Struts, Hibernate等
1.2、SpringMVC
一、基本概念
SpringMVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让他们更容易进行定制。
model 数据模型
View 视图
Controller 控制器
MVC 是一种 Web 应用架构,是一种代码设计思想(将所有客户端的请求全部交由控制器,有控制器将其分发并将结果响应给客户端),实际开发中,一般都会使用 MVC框架,如 Structs1、Structs2以及 SpringMVC等
二、优点
- 使用注解配置,代替 xml 配置,开发更简单
- 效率高,单例的
- 扩展性好,用户自定义
- SpringMVC 和 Spring 无缝衔接
- 灵活的数据验证,格式化,数据绑定机制。
三、SpringMVC 主要是由 DispatcherServlet、处理器映射、控制器、视图解析器、视图组成。其中它的核心主要是处理器映射 HandlerMappinig (选择使用哪个控制器来处理请求) 和 视图解析器 ViewResolver (选择处理结果应该如何渲染页面),框架的结构图如下:
工作流程:
- Http 请求:客户端请求提交到 DispatcherServlet。
- 寻找处理器:由 DispatcherServlet 控制器查询一个或多个HandlerMapping,找到处理请求的 Controller。
- 调用业务处理和返回结果:Controller 调用业务逻辑处理后,返回ModelAndView。
- 处理视图映射并返回模型: DispatcherServlet 查询一个或多个ViewResoler视图解析器,找到 ModelAndView指定的视图。
- Http响应:视图负责将结果显示到客户端
简单来说就是这样一个过程:从“Request(请求)”开始,依次进入“DispatcherServlet(核心分发器)” —> “HandlerMapping(处理器映射)” —> “Controller(控制器)” —> “ModelAndView(模型和视图)” —> “ViewResolver(视图解析器)” —> “View(视图)” —> “Response(响应)”结束。
1.3、MyBatis
一、基本概念
MyBatis 本是 apache 的一个开源项目 iBatis, 2010年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis 。MyBatis是一个基于 Java 的持久层 (可以将业务数据存储到磁盘,且具备长期存储能力,只要磁盘不损坏,在断电或者其它情况下,重新开启系统任然可以读取到这些数据) 框架。iBATIS提供的持久层框架包括 SQL Maps 和 Data Access Objects(DAO)MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。可以这么理解:Mybatis 是一个用来帮你管理数据增删改查的框架。
二、Mybatis 的优缺点:
优点:
- sql 语句写在 XML 文件中,便于统一管理和优化,解除了 sql 和程序代码的耦合
- 提供映射标签,支持对象和数据库 orm 字段关系的映射,支持对象的关系映射标签,支持对象关系的组建
- 提供 XML 标签,支持编写动态 sql
- 相对传统的 JDBC ,建立连接(Connection)、操作(Statment)、拿到数据 ResultSet ,处理相关异常等,这些都可以交给 Mybatis 去帮处理
缺点:
- 工作量较大,特别是在表的字段多,关联表多的情况下 Mybatis中的逆向工程可以实现半自动化
- sql 语句的编写依赖于数据库,可移植性差
- 不支持级联删除,级联更新,需要自己对表进行删除
2、开发环境的要求
环境准备
- JDK 7或 8版本,本项目中用jdk1.8的版本
- IDEA、Eclipse、MyEclipse都可以,看使用习惯,推荐使用 IDEA工具
- Tomcat 8.5 版本
- MySql 数据库,版本:5.723
- Maven工具,版本 3.5
3、SSM 框架整合步骤
1.1、认识 Maven
一、简单介绍 Maven Apache Maven 是一个软件项目管理和构建工具,可以帮助我们创建和管理项目,基于项目对象模型 POM(Project Object Model)的概念,帮助开发者构造一个项目的完整生命周期。POM是 Maven对一个项目的描述,一个 POM就是一个 XML 文件。
二、为什么使用 Maven
- 项目的管理工具 项目开发很多情况一定会将项目进行拆分,将一个项目拆分成多个模块,每个模块对应一个工程,多个工程之间存储依赖关系,此时可以使用 maven 的依赖管理机制,帮助我们与项目之间建立依赖关系
- jar 包的管理工具 通过仓库管理 jar包,避免繁琐的导包;自动下载 jar 包;解决 jar 包之间的依赖等
- 自动化构建工具 构建过程:编译主代码 --> 编译测试代码 --> 执行测试单元 -->生成测试报告 -->打包 --> 部署
1.2、使用 Maven 构建 SSM 项目
第一步:创建 Maven webapp 项目
首先新建工程,选择 Maven 标签,然后勾选上【Create from archetype】选择 webapp:
点击下一步,填写上【GroupId】和【ArtifactId】:
-
- GroupId:项目组织唯一的标识符,实际对应 JAVA 的包的结构,也就是 main 目录下 java 的目录结构(包)
- AritifactId:项目的唯一标识符,实际对应项目的名称,就是项目根目录的名称
- Version: 表示版本信息,这个默认就可以。
确认项目路径,这一步你可以看到 Maven 配置中的参数,不需要做改动,直接下一步就可以(图中的路径是我配置的本地 Maven 仓库的地址):
确认项目 module 名称,点击【Finish】即可:
等待一会儿,控制台就会有创建成功的提示信息,我们把【Enable Auto-Import】点上,这个提示会在每次 pom.xml 有改动时出现,自动导入,省掉麻烦:
第二步:搭建项目目录结构
下面就是 Maven 风格的 webapp 的默认目录结构:
- 注意: webapp 是默认没有 java 源文件也没有 test 目录的,图中的test目录是自己创建的。
- 提示:我们可以在 IDEA 中右键目录然后选择【Make Directory as】,让 IDEA 识别不同的目录作用
第三步:pom.xml 文件中添加相关依赖 jar 包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xiaomo.demo</groupId>
<artifactId>ssm-study</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<junit.version>4.12</junit.version>
<javax.servlet-api.version>3.1.0</javax.servlet-api.version>
<jsp-api.version>2.2</jsp-api.version>
<jstl.version>1.2</jstl.version>
<spring-core.version>4.3.19.RELEASE</spring-core.version>
<mybatis.version>3.4.5</mybatis.version>
<mybatis-spring.version>1.3.1</mybatis-spring.version>
<pagehelper.version>5.1.2</pagehelper.version>
<mysql-connector-java.version>5.1.38</mysql-connector-java.version>
<druid.version>1.1.6</druid.version>
<fastjson.version>1.2.47</fastjson.version>
<tomcat7-maven-plugin.version>2.2</tomcat7-maven-plugin.version>
<mybatis-generator-maven-plugin.version>1.3.5</mybatis-generator-maven-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test