我们看招聘信息的时候,经常会看到这一点,需要具备 SSM 框架的技能, SpringMVC 可以完全替代 Struts,配合注解的方式,编程非常快捷,而且通过 restful 风格定义 url,让地址看起来非常优雅。 另外,MyBatis 也可以替换 Hibernate,正因为 MyBatis 的半自动特点,我们可以完全掌控 SQL,这会让有数据库经验的程序员(当然不是说我啦~捂脸)能开发出高效率的 SQL 语句,而且 XML 配置管理起来也非常方便。 好了,如果你也认同我的看法,那么下面我们一起来做整合吧!
在写代码之前我们先了解一下这三个框架分别是干什么的? 相信大以前也看过不少这些概念,我这就用大白话来讲,如果之前有了解过可以跳过这一大段,直接看代码!
SpringMVC:它用于 web 层,相当于 controller(等价于传统的 servlet 和 struts 的 action),用来处理用户请求。举个例子,用户在地址栏输入 http:// 网站域名 / login ,那么 springmvc 就会拦截到这个请求,并且调用 controller 层中相应的方法,(中间可能包含验证用户名和密码的业务逻辑,以及查询数据库操作,但这些都不是 springmvc 的职责),最终把结果返回给用户,并且返回相应的页面(当然也可以只返回 json/xml 等格式数据)。springmvc 就是做前面和后面过程的活,与用户打交道!!
Spring:太强大了,以至于我无法用一个词或一句话来概括它。但与我们平时开发接触最多的估计就是 IOC 容器,它可以装载 bean(也就是我们 java 中的类,当然也包括 service dao 里面的),有了这个机制,我们就不用在每次使用这个类的时候为它初始化,很少看到关键字 new。另外 spring 的 aop,事务管理等等都是我们经常用到的。
MyBatis:如果你问我它跟鼎鼎大名的 Hibernate 有什么区别?我只想说,他更符合我的需求。第一,它能自由控制 sql,这会让有数据库经验的人编写的代码能搞提升数据库访问的效率。第二,它可以使用 xml 的方式来组织管理我们的 sql,因为一般程序出错很多情况下是 sql 出错,别人接手代码后能快速找到出错地方,甚至可以优化原来写的 sql。
SSM 框架整合配置
好了,前面 bb 那么多,下面我们真正开始敲代码了~
首先我们打开 IED,我这里用的是 idea,创建一个 maven 项目,建立好相应的目录结构
第一步: 使用 maven 引入 jar 包
我用 maven 来管理我们的jar,所以只需要在pom.xml中加入相应的依赖就好了.
pom.xml
4.0.0
com.cnblogs.mmall
mmall
war
0.0.1-SNAPSHOT
1.8
1.8
4.1.7.RELEASE
3.3.0
5.1.37
junit
junit
4.11
ch.qos.logback
logback-classic
1.1.1
mysql
mysql-connector-java
5.1.37
runtime
com.alibaba
druid
1.1.5
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
1.2.3
taglibs
standard
1.1.2
jstl
jstl
1.2
com.fasterxml.jackson.core
jackson-databind
2.5.4
javax.servlet
javax.servlet-api
3.1.0
org.springframework
spring-core
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-test
${spring.version}
redis.clients
jedis
2.7.3
com.dyuproject.protostuff
protostuff-core
1.0.8
com.dyuproject.protostuff
protostuff-runtime
1.0.8
commons-collections
commons-collections
3.2.1
commons-fileupload
commons-fileupload
1.2.2
commons-io
commons-io
2.0.1
com.qiniu
qiniu-java-sdk
7.2.0
ssm
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
true
true
mysql
mysql-connector-java
${mysql-connector.version}
org.mybatis.generator
mybatis-generator-core
1.3.2
org.mybatis
mybatis
${mybatis.version}
第二步:整合 mybatis
我们先在spring文件夹里新建spring-dao.xml文件,因为spring的配置太多,我们这里分三个,分别是dao service mvc。
- 读入数据库连接相关参数(可选)
- 配置数据连接池
- 配置连接属性,可以不读配置项文件直接在这里写死
- 配置druid, 配置某些常用的属性
- 配置SqlSessionFactory对象(mybatis)
- 扫描dao层接口,动态实现dao接口,也就是说不需要daoImpl,sql和参数都写在xml文件上
spring-dao.xml
因为数据库配置相关参数是读取配置文件,所以在resources文件夹里新建一个jdbc.properties文件,存放我们常用的数据库连接属性.
jdbc.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
username=root
password=root
filters=stat
maxActive=20
initialSize=1
maxWait=60000
minIdle=10
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 'x'
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
maxOpenPreparedStatements=20
removeAbandoned=true
removeAbandonedTimeout=1800
logAbandoned=true
因为这里用到了mybatis,所以需要配置mybatis核心文件,在recources/confing/mybits文件夹里新建mybatis-config.xml文件。
- 使用自增主键
- 使用列别名
- 开启驼峰命名转换 create_time -> createTime
mybatis-config.xml
第三步:配置 service 层
刚弄好dao层,接下来到service层了。在spring文件夹里新建spring-service.xml文件。
- 扫描service包所有注解 @Service
- 配置事务管理器,把事务管理交由spring来完成
- 配置基于注解的声明式事务,可以直接在方法上@Transaction
spring-service.xml
第四步:配置 web 层
在spring文件夹里新建springmvc.xml文件。
- 开启SpringMVC注解模式,可以使用@RequestMapping,@PathVariable,@ResponseBody等
- 对静态资源处理,如js,css,jpg等
- 配置jsp 显示ViewResolver,例如在controller中某个方法返回一个string类型的"login",实际上会返回"/WEB-INF/login.jsp"
- 扫描web层 @Controller
springmvc.xml
5242880
第五步:配置web.xml
配置 web.xml, 它在webapp的WEB-INF下
ssm
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
DruidWebStatFilter
com.alibaba.druid.support.http.WebStatFilter
exclusions
*.js, *.gif, *.jpg, *.png ,*.css, *.ico, /druid/*
DruidWebStatFilter
/*
DruidStatView
com.alibaba.druid.support.http.StatViewServlet
DruidStatView
/druid/*
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:config/spring/springmvc.xml
1
springmvc
/
contextConfigLocation
classpath:config/spring/spring-*.xml
org.springframework.web.context.ContextLoaderListener
第六步: 其他配置文件
- 我们在项目中经常会使用到日志,所以这里还有配置日志xml,在resources文件夹里新建logback.xml文件,所给出的日志输出格式也是最基本的控制台s呼出,大家有兴趣查看logback官方文档。
logback.xml
%d %p (%file:%line\)- %m%n
UTF-8
log/manager_sys.log
log/manager_sys.%d.%i.log
30
10MB
%d %p (%file:%line\)- %m%n
UTF-8
- 我们在实际开发中常常使用 generator-plugin 插件自动生成 pojo 和映射文件, 大大减轻我们的工作量. 其配置如下(放在 resoureces 根目录下):
generatorConfig.xml
至此, 我们一共写了8个配置文件. 我们一起来看下最终的配置文件结构图. 这样, 我们的 ssm 框架搭建完成了.
因为我们的连接池启用 Web 监控统计功能, 所以访问 http://localhost:8080/druid/index.html 可以查看 sql 的监控统计功能.实时查看 sql监控, url监控,Session 监控信息.