1、基本概念

1.1、Spring

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

Spring core Spring核心功能:解决对象的创建和依赖关系

Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期

IOC容器:就是具有依赖注入功能的容器,是可以创建对象的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通常new一个实例,控制权由程序员控制,而"控制反转"是指new实例工作不由程序员来做而是交给Spring容器来做。。在Spring中BeanFactory是IOC容器的实际代表者。

基于注解的方式(推荐使用,比较便捷少配置)

控制层代码:

@Autowired   //@Resource
private OrderServiceImp orderService;

服务层代码:

@Service("orderService")
public class OrderServiceImp implements IOrderService {@Autowiredprivate JavaOrderMDaoImp javaOrderMDao;@Autowiredprivate JavaOrderDDaoImp javaOrderDDao;@Overridepublic List<JavaOrderMList> findOrderM(OrderSearch search) {return javaOrderMDao.findJavaOrderM(search);}@Overridepublic List<JavaOrderDList> findOrderD(OrderSearch search) {return javaOrderDDao.findJavaOrderD(search);}}

DAO层代码:

@Repository("javaOrderMDao")
public class JavaOrderMDaoImp extends BaseHibernateDAO<JavaOrderM, Serializable> implements IJavaOrderMDao {...}
@Repository("javaOrderDDao")
public class JavaOrderDDaoImp extendsBaseHibernateDAO<JavaOrderD, Serializable> implements IJavaOrderDDao {...}

 注意点:

  ⑴ 持久层DAO层注解Repository中规定了名称,在Service层中声明名称必须一致。

  ⑵ 服务层Service层注解Service中规定了名称,在控制层中声明的名称必须一致。

  ⑶ 注解方式注入依赖注解:

@Component         把对象加入ioc容器,对象引用名称是类名,第一个字母小写
@Component(“name”) 把指定名称的对象,加入ioc容器
@Repository        主要用于标识加入容器的对象是一个持久层的组件(类)
@Service           主要用于标识加入容器的对象是一个业务逻辑层的组件
@Controller        主要用于标识加入容器的对象是一个控制层的组件
@Resource          注入属性(DI), 会从容器中找对象注入到@Resource修饰的对象上
@Autowired         注入属性(DI), 会从容器中找对象注入到@Autowired修饰的对象上

   ⑷ 注解可以简化配置,提升开发效率,但是也不利于后期维护。

 注:@Autowired与@Resource的区别

Spring AOP面向切面编程:

1.2、SpringMVC

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

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对象)映射成数据库中的记录。

作用:

SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层

使用spring MVC负责请求的转发和视图管理

spring实现业务对象管理,mybatis作为数据对象的持久化引擎

注解方式:可以简化IOC容器的配置;

原理:

SpringMVC:

1.客户端发送请求到DispacherServlet(分发器)

2.由DispacherServlet控制器查询HanderMapping,找到处理请求的Controller

3.Controller调用业务逻辑处理后,返回ModelAndView

4.DispacherSerclet查询视图解析器,找到ModelAndView指定的视图

5.视图负责将结果显示到客户端

Spring:我们平时开发接触最多的估计就是IOC容器,它可以装载bean(也就是我们Java中的类,当然也包括service dao里面的),有了这个机制,我们就不用在每次使用这个类的时候为它初始化,很少看到关键字new。另外spring的aop,事务管理等等都是我们经常用到的。

Mybatis:mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

使用方法:

要完成一个功能:

先写实体类entity,定义对象的属性,(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。
写Mapper.java,将Mapper.xml中的操作按照id映射成Java函数。
写Service.java,为控制层提供服务,接受控制层的参数,完成相应的功能,并返回给控制层。
写Controller.java,连接页面请求和服务层,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。
写JSP页面调用,请求哪些参数,需要获取什么数据。
DataBase ===> Entity ===> Mapper.xml ===> Mapper.Java ===> Service.java ===> Controller.java ===> Jsp.

====================================================================================================================================

Spring MVC  拥有控制器,作用跟Struts类似,接收外部请求,解析参数传给服务层
Spring 容器属于协调上下文,管理对象间的依赖,提供事务机制
mybatis 属于orm持久层框架,将业务实体 与数据表联合 起来

Spring MVC  控制层,想当与 Struts的作用
Spring 控制反转和依赖注入  创建对象交由容器管理,达到了解耦的作用
mybatis 主要用来操作数据库(数据库的增删改查)

IOC:控制反转,是一种降低对象之间耦合关系的设计思想,面试的时候最好能说出来个例子,加深理解。例子:租房子,以前租房子需要一个房子一个房子找,费时费力,然后现在加入一个房屋中介,把你需要的房型告诉中介,就可以直接选到需要的房子,中介就相当于spring容器。

AOP:面向切面编程,是面向对象开发的一种补充,它允许开发人员在不改变原来模型的基础上动态的修改模型以满足新的需求,如:动态的增加日志、安全或异常处理等。AOP使业务逻辑各部分间的耦合度降低,提高程序可重用性,提高开发效率。

持久层:DAO层(mapper)

DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此, 
DAO层的设计首先是设计DAO的接口,
然后在Spring的配置文件中定义此接口的实现类,
然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,
DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。
业务层:Service层

Service层:Service层主要负责业务模块的逻辑应用设计。 
首先设计接口,再设计其实现的类
接着再在Spring的配置文件中配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。
Service层的业务实现,具体要调用到已定义的DAO层的接口,
封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。
表现层:Controller层(Handler层)

Controller层:Controller层负责具体的业务模块流程的控制, 
在此层里面要调用Service层的接口来控制业务流程,
控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。
View层

View层 此层与控制层结合比较紧密,需要二者结合起来协同工发。View层主要负责前台jsp页面的表示.
各层联系

DAO层,Service层这两个层次都可以单独开发,互相的耦合度很低,完全可以独立进行,这样的一种模式在开发大项目的过程中尤其有优势
Controller,View层因为耦合度比较高,因而要结合在一起开发,但是也可以看作一个整体独立于前两个层进行开发。这样,在层与层之前我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。

Service逻辑层设计

Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。

SSM框架原理,作用及使用方法,详细解释相关推荐

  1. hashmap的put方法详细解释

    首先呢 它是一个集合类,非线程安全,key.value(键值)对存储格式.常见的api有put,get,size,remove等方法 在此呢介绍一下jdk1.8中的hashmap.put方法, 我们在 ...

  2. 什么是机器人的五点校正法_Epson机器人原点校准命令及方法(详细解释指令)

    EPSON 机器人原点校准命令及用法 一. 命令 1.PULSE :根据给出每个关节的脉冲数移动或返回当前位置各关节的脉冲值 2.HOFS:设置或返回编码器Z相到机械原点的脉冲数 3.CALPLS:校 ...

  3. mysql的nosql功能_“NoSQL”的定义、作用和使用方法详细说明

    这仅是一个极简的demo,旨在动手了解概念. NoSQL这个词在近些年正变得随处可见.但是到底"NoSQL"指的是什么?它是如何并且为什么这么有用?在本文,我们将会通过纯Pytho ...

  4. UIControl 详细解释

    第一 :UIControl 的继承. UIControl 是继承与 UIView的.而 UIView继承与UIResponder的.然后 UIResponder 继承与 NSObject的.图形解释如 ...

  5. IP地址子网掩码位数换算方法及解释子网掩码的作用

    IP地址子网掩码位数换算方法及解释子网掩码的作用 子网位 /主机位 子网掩码 子网最大数 /主机最大数 2 /22 /10 | 255.192.0.0 2 /4194302 3 /21 /11 | 2 ...

  6. 双离合档把上按钮作用_求双离合档位详细解释

    求双离合档位详细解释以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 双离合变速器是自动变速器的一种,主要档位有P.R.N ...

  7. 【机器学习】交叉验证详细解释+10种常见的验证方法具体代码实现+可视化图

    [机器学习]交叉验证详细解释+10种常见的验证方法具体代码实现+可视化图 一.使用背景 由于在训练集上,通过调整参数设置使估计器的性能达到了最佳状态:但在测试集上可能会出现过拟合的情况. 此时,测试集 ...

  8. Linux locate 作用,linux中的locate命令的详细解释

    linxu下的locate命令可以在搜寻数据库时快速找到档案,是个很方便的命令.下面由学习啦小编为大家整理了linux的locate命令的详细解释的相关知识,希望对大家有帮助! 一.linux中的lo ...

  9. Linux中mv的作用是,linux中的mv命令的详细解释

    linxu下的mv命令是一个常用命令,可以为文件或者目录重命名,下面由秋天网 Qiutian.ZqNF.Com小编为大家整理了linux的mv命令的详细解释的相关知识,希望对大家有帮助! 一.linu ...

  10. Python精讲Numpy基础,大牛笔记详细解释

    https://www.toutiao.com/a6664936105076326920/ 总认为Numpy是渣渣,直到深入接触以后才知道功能这么强大.堪比Matlab啊.果然是人生苦短,我用Pyth ...

最新文章

  1. 隐藏在程序旮旯中的“安全问题”
  2. oracle批量更新数据从另一表_常用SQL系列之(五):多表和禁止插入、批量与特殊更新等...
  3. 亚马逊AWS在线系列讲座——基于AWS云平台的高可用应用设计
  4. 【转】VSS的配置和使用
  5. 用 Flask 来写个轻博客 (2) — Hello World!
  6. leetcode算法题--石子游戏
  7. SQL server 2005服务器备份文件的强制还原后引起的孤立用户问题解决方法
  8. CUDA,C++,Java,Python,Fortran运行速度比较
  9. Web程序员的Mysql进阶序一之sql使用分类及基础
  10. plsql存储过程修改后怎么保存_分布式基础-存储引擎
  11. scrapy安装_「从零开始Python爬虫」1.8.3 Scrapy-Splash的安装
  12. 【codevs1378】选课——树形动规
  13. 如何把vcf文件转换成maf文件格式?vcf2maf一键解决!
  14. JNI/NDK入门指南之JavaVM和JNIEnv
  15. 电子邮件工作原理及主要协议
  16. Sloth:网易流计算服务化平台架构实践
  17. 微信小程序 实用的公告栏滚动效果
  18. 【记录】mmsegmentation 训练自己的数据集
  19. windows打开iis7服务器远程桌面管理器
  20. PyQt5窗口滚动显示最新数据

热门文章

  1. JAVA计算机毕业设计大学生二手物品交易网站演示记录2021Mybatis+系统+数据库+调试部署
  2. win10如何安装系统得日语输入法(亲测)
  3. Python单元测试报告框架PyTestReport
  4. postgresql 客户端 uri 设置时区
  5. 通过QQ邮箱中转站分享文件
  6. HTML中想要看见盒子的边框,盒子边框装饰
  7. md5 java_JAVA使用MD5加密解密
  8. 新建一个C#控制台应用程序
  9. Windows下安装dilb解决方法
  10. 遗传算法 matlab实现 多维变量 二进制编码