什么是SSM框架?
SSM是Spring+Spring MVC+Mybatis的缩写,主流的Java EE企业级框架。
其中,Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架,可以帮助我们创建对象。
Spring MVC控制开发,让开发简单规范。
MyBatis是一个基于Java的持久层框架,封装了增删改查操作。
Spring
看到这个,很多人会和你说什么控制反转(IoC),依赖注入(DI)、AOP、事务什么……对新手来说,这些是什么鬼呢?
控制反转
我不写定义,就说一下你的电脑。你的电脑上有usb口吧,有hdmi口吧。电脑上用什么键盘,不取决于电脑本身,而是插在usb上的键盘是什么?这个能理解吧。你看控制电脑用什么输入的设备并不是由电脑控制的,而是你插入的键盘是什么来控制的。这个控制不就反了吗?
依赖注入
就是控制反转。电脑的输入设备依赖它被插入的是什么键盘。插入机械键盘,输入设备就是机械键盘,插入数字键盘就只能输入数字。从插键盘这个事来说:无非是从电脑角度看,是依赖注入,输入设备是什么依赖注入的键盘是什么;从键盘角度看是控制反转,插入的键盘来控制电脑是什么输入设备。
为什么要用依赖注入?目的就是可以灵活搭配。如果你的电脑上的键盘是焊死在电脑上的,键盘坏了,你的电脑也废了。你肯定不想这样吧。
Java开发中,我们需要创建大量的对象,有些重要的对象牵一发而动全身,这样的对象我们可以交给Spring帮我们来创建,我们只需要提供配置文件,这个配置文件可以是xml,也可以是java本身。好比Spring是个工厂,按图纸就可以做出产品。
AOP
什么是切面?你可以这样想:一个公司有多个销售部,都需要行政帮忙搞定日常的订文具、机票、办公室、出差酒店什么的,都需要财务搞定报销、收付款什么的事务吧,要仓库帮忙发货什么的。不可能每个销售部都去招几个行政、财务和仓管什么吧,销售部门只要做好业务就行了,订文具什么的事情交个专门的部门去办就行。
在Spring AOP 中,把这些公共的事务,也就是这个例子中的行政啊、财务啊、仓管啊,看成一个个切面,让你的开发的时候,专注于核心业务。
事务
说个例子:比如我支付宝转给你100块钱,正常操作应该是我的账号里少了100,你的多了100。如果由于各种原因,我少100后,系统出问题了。没有事务的话,你的账号不会多100,而我的账号少了100。这个就是有问题了。有事务的话:要不我少100你多100都成功,要不就都不成功,这样钱才不会少。而手写一个事务还是有点小难度的,Spring的事务(spring-tx)可以帮我们轻松实现。
三层架构
三层架构师指:视图层view,服务层service,持久层Dao,它们的功能是:
1.view层:用来接收用户请求的代码,比如请求如何分发;
2.service层:系统的业务逻辑主要写在这里,比如借书系统会有借书的业务;
3.Dao层:直接操作数据库的代码,之所以分Dao层,主要是可能相同的sql语句可能使用在比较多的地方,改动的时候可以理解为只改动一处即可。
为了降低耦合度,在这里,使用面向抽象编程,也就是上层对下层的调用,直接通过接口来完成,下层对上层的真正服务提供者,是下层实现的接口实现类,实现类是可以更换的,这就实现了层间的解耦合。
MVC与三层架构的区别
MVC架构里面的Controller以及View层合并在一起就是三层架构的View层,而MVC的Model层就包含了三层架构的Service层以及Dao层。
Java开发中常见包名的意义
Java:
bean 实体类,对应数据库中的表,构造方法,属性,getter setter,toString()
dao 持久层 数据库增删改查
service 业务层
controller 控制层 跳转哪里
resources:
mapper dao实现类
applicationContext.xml Spring的配置文档
db.properties 数据库连接信息
log4j.properties 日志配置文件
springmvc.xml 配置springmvc
webapp:
jsp等页面
web-inf
web.xml 加载过滤器 拦截器