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)的容器框架。
二、优点
1.2 SpringMVC
一、基本概念
SpringMVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让他们更容易进行定制。
model 数据模型
View 视图
Controller 控制器
MVC 是一种 Web 应用架构,是一种代码设计思想(将所有客户端的请求全部交由控制器,有控制器将其分发并将结果响应给客户端),实际开发中,一般都会使用 MVC框架,如 Structs1、Structs2以及 SpringMVC等
二、优点
三、SpringMVC 主要是由 DispatcherServlet、处理器映射、控制器、视图解析器、视图组成。其中它的核心主要是处理器映射 HandlerMappinig (选择使用哪个控制器来处理请求) 和 视图解析器 ViewResolver (选择处理结果应该如何渲染页面),框架的结构图如下:
工作流程:
简单来说就是这样一个过程:从“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 的优缺点:
优点:
缺点:
2、开发环境的要求
环境准备
3、SSM框架整合步骤
1.1 认识 Maven
一、简单介绍 Maven
Apache Maven 是一个软件项目管理和构建工具,可以帮助我们创建和管理项目,基于项目对象模型 POM(Project Object Model)的概念,帮助开发者构造一个项目的完整生命周期。POM是 Maven对一个项目的描述,一个 POM就是一个 XML 文件。
二、为什么使用 Maven
1.2 使用Maven构建SSM项目
第一步:创建 Maven webapp 项目
点击下一步,填写上【GroupId】和【ArtifactId】:
GroupId:项目组织唯一的标识符,实际对应 JAVA 的包的结构,也就是 main 目录下 java 的目录结构(包)
AritifactId:项目的唯一标识符,实际对应项目的名称,就是项目根目录的名称
确认项目路径,这一步你可以看到 Maven 配置中的参数,不需要做改动,直接下一步就可以(图中的路径是我配置的本地 Maven 仓库的地址):
等待一会儿,控制台就会有创建成功的提示信息,我们把【Enable Auto-Import】点上,这个提示会在每次 pom.xml 有改动时出现,自动导入,省掉麻烦:
第二步:搭建项目目录结构
注意: webapp 是默认没有 java 源文件也没有 test 目录的,图中的test目录是自己创建的。
使用 Log4j 来输出日志
提示:我们可以在 IDEA 中右键目录然后选择【Make Directory as】,让 IDEA 识别不同的目录作用
这里的目录建好之后还需要设置一下,让 IDEA 识别目录作用,选择【File】>【Project Structure】:
设置好之后点击 OK,即完成了项目目录的搭建。
第三步:pom.xml 文件中添加相关依赖 jar 包
UTF-8
1.7
1.7
4.12
3.1.0
2.2
1.2
4.3.19.RELEASE
3.4.5
1.3.1
5.1.2
5.1.38
1.1.6
1.2.47
2.2
1.3.5
junit
junit
${junit.version}
test
javax.servlet
javax.servlet-api
${javax.servlet-api.version}
provided
javax.servlet.jsp
jsp-api
${jsp-api.version}
provided
jstl
jstl
${jstl.version}
org.springframework
spring-test
${spring-core.version}
org.springframework
spring-core
${spring-core.version}
org.springframework
spring-beans
${spring-core.version}
org.springframework
spring-context
${spring-core.version}
org.springframework
spring-expression
${spring-core.version}
org.springframework
spring-aop
${spring-core.version}
org.springframework
spring-aspects
${spring-core.version}
org.springframework
spring-jdbc
${spring-core.version}
org.springframework
spring-tx
${spring-core.version}
org.springframework
spring-webmvc
${spring-core.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
${mybatis-spring.version}
mysql
mysql-connector-java
${mysql-connector-java.version}
com.alibaba
druid
${druid.version}
com.alibaba
fastjson
${fastjson.version}
org.slf4j
slf4j-api
1.7.25
log4j
log4j
1.2.17
org.slf4j
slf4j-log4j12
1.7.21
备注:记得配置相关资源打包,避免资源文件打包的时候漏掉!
src/main/java
**/*.xml
**/*.properties
src/main/resources
**/*.xml
**/*.properties
在pom.xml 文件中,你还可以配置 tomcat 插件:
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.5
true
true
org.apache.tomcat.maven
tomcat7-maven-plugin
/
8888
1.3 编写配置文件
1.1、Mybatis整合Spring的配置文件,Spring-dao.xml。如下:
1.2、 配置(数据库连接的)属性文件,dataSource.properties。如下:
# JDBC Configuration
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/idea?useSSL=false
#username和password这两个地方书写自己数据库的用户名以及密码
jdbc.username=
jdbc.password=
# druid Pool settings
#初始化连接
jdbc.initialSize=5
#最大连接数量
jdbc.maxActive=100
#最小空闲连接
jdbc.minIdle=5
#最大等待时间50秒
jdbc.maxWait=50000
1.3、 配置 Spring 文件,主要配置 Spring 的 IOC 以及事务管理,Spring-service.xml。如下:
1.4、配置Spring 整合SpringMVC的文件,Spring-mvc.xml。如下:
1.5、 配置 web.xml 文件,通过 web 程序启动,来加载所有配置以及资源文件, 这是整个框架的入口。如下:
springMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring*.xml
1
true
springMVC
/
encodingFileter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
encodingFileter
/*
/index.jsp
1.6、 编写日志文件 log4j.properties
### 设置###
log4j.rootLogger = info,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=E://logs/debug.log 包括 error debug info###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
4、编写测试类
步骤3中, 1.1 到 1.6 步骤配置文件的完成,SSM框架也就基本搭好了!接下来,我们可以写一个测试类进行验证,如下:
package com.mzj.study.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Author: 小莫
* Date: 2018-11-05 16:26
* Description:<描述>
*/
//@Controller
@RestController
@RequestMapping("/api/v1/test")
public class HelloSsm {
//@RequestMapping(value = "hello",method = RequestMethod.GET)
@GetMapping("hello")
//@ResponseBody
public String sayHello(){
return "Hello SSM!";
}
}
5、验证结果