ssm框架基本原理
一、前言
SM框架是标准的MVC模式,将整个系统划分为四层:View层,Controller层,Service层,Dao层
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。
Spring运用IOC和AOP思想实现业务对象管理
Spring MVC主要负责请求的转发和视图管理
Mybatis封装JDBC作为数据对象的持久化引擎
二、来自百度百科介绍:
Spring
Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地`new`一个对象,而是让Spring框架帮你来完成这一切。
SpringMVC
SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。
Mybatis
mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
整合
三、大白话
1、Spring
在java里面,要用类里面的方法,就需要先有类的对象,而类的对象就是new出来
Spring就是用来简化这一步操作的框架
Spring是一个容器,里面装了很多Bean即实体对象。之后要用到这些对象对应的类的方法,可以直接从容器里面拿,就不用再去new一个了
2、SpringMVC
首先理解好servlet是什么?
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。参考下:https://www.runoob.com/servlet/servlet-intro.html
反正就是用来处理业务逻辑层的一个东西,能够处理在前端页面发起的请求
而SpringMVC也是这样一个作用
SpringMVC是一个控制器+视图分发器,处理业务逻辑层,最接近用户的东西。
当用户在页面做了某个操作,理解为发起一个请求,这个请求会被送到SpringMVC这个控制器,根据对于业务逻辑的理解来决定后端要做出什么操作(比如要从数据库增删改查还是展示什么到前端页面),相当于servlet的功能
举一个简单的例子,我在浏览器输入了一窜网址,然后回车。这个过程浏览器将我的网址从客户端(C)输入通过TCP/UDP等传输到了服务器(S),然后Tomcat根据我输入的网址判断它是属于哪个Servlet,并且从这个网址上截取某些参数给选中的Servlet。
Servlet 是S与C之间的中间层,会根据拿到的参数判断要采取什么操作,这里它通过判断知道我是要打开一个网站(这里好像就是mappper到对应的controller)。这里就是业务逻辑层,这是我们自己写的代码。接下来就由视图分发器给我们返回我们想要的网址到C上
到此为止,Servlet是作为一个控制器,起到了拦截用户请求并执行具体对应请求所执行的操作(专业点说就是将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作)。在SpringMVC中,它的核心Servlet即DispatcherServlet。这个框架其实就是整合了Servlet该起的作用。
3、MyBatis
正常来说,我们写java程序的时候,与数据库交互式这么写。先写代码connection链接数据库,然后写sql语句被调用到数据库中执行。具体与数据库的交互其实就是增删改查
而现在MyBatis就是对这些增删改查进行封装,即对jdbc的封装,这是一个数据库框架。我们配置好MyBatics后,就可以调用了,不用再去写代码考虑怎么连接数据库,怎么执行sql语句
上面专业的解释说,mybatis的操作都是围绕一个sqlSessionFactory实例展开的。sqlSessionFactory相当于用户和数据库的桥梁,它就是一个sql工厂,了解工厂模式的我们知道,工厂里面会有很多个sqlSession,当我们拿到一个sqlSession,然后才执行sql命令。
我们用sql语句写的表,每一个表对应一个Mapper.xml文件,具体的增删改查写在Mapper.xml文件里面,它被调用的时候帮我们执行sql语句和返回数据,注意sql语句是要我们自己写的。
与它相似又常用的框架还有Hibernate,这里就不说了。
4、整合
上面说:页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。
扩充下我的理解:页面发送请求给控制器(控制器,进入SpringMVC范围了),控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互(就是MyBatis起作用了),后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据(视图分发器,是SpringMVC起作用)。这个过程中,Spring作为一个容器,将整个过程囊括进去了。
ssm框架基本原理的更多相关文章
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化
一.ssm框架搭建 1.1创建项目 新建项目后规划好各层的包. 1.2导入包 搭建SSM框架所需包百度云链接:http://pan.baidu.com/s/1cvKjL0 1.3整合spring与my ...
- JavaEE学习文章汇总-ssm框架
Spring-SpringMVC-Mybatis 1:Maven创建webapp项目 Maven 下的spring框架(一创建项目) 2:mybatis3 入门教程 mybatis实战教程(mybat ...
- SSM框架总结(1)
----------------------20170106-------------------------------------- 1.mabatis.genertor中自动生成文件,需要在ge ...
- 【SSM】Eclipse使用Maven创建Web项目+整合SSM框架
自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...
- SSM框架整合首只拦路虎——Eclipse新建Maven Project界面select an archetype 空白
首先给大家说,本篇博客没有技术价值,纯属个人学习总结,权当给大家添加一乐.事件如有雷同,纯属巧合,莫怪! 前一段时间一直在看<淘淘商城>这个教程,里面讲的是SSM框架的一个电商项目.这不是 ...
- SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- SSM框架的整合思路&功能实现
这是我第一篇博客,关于SSM框架的整合思路以及简单功能实现. 首先,最近刚刚学习Spring+SpringMVC+Mybatis,在开发时遇到形形色色的问题,周遭人也为我提供了一些思路,我会一点点整理 ...
- [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World
来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral ...
- Maven+SSM框架实现简单的增删改查
Spring介绍: spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情.然而, Spring的用途不仅限于服务器端的开发.从简单性.可测试性和松耦合的角度而言,任何Ja ...
随机推荐
- RecyclerView setHasFixedSize(true)
RecyclerView setHasFixedSize(true)当recycleview大小高宽不变的时候使用这个,可以提升效率
- 【Python3+Selenium】基本操作
一.环境准备 1.Selenium安装教程 1.1 打开cmd,输入如下命令:pip/pip3 install selenium 1.2 安装完成后查看Python路径包管理(Lib\site-pac ...
- dynamics 365/crm 导入解决方案报 发生 sql server 错误
dynamics 365/crm 导入解决方案报 发生 sql server 错误.{1}{0} 错误代码 80044150. 帮助我解决此问题. 这时候,可以检查数据库服务器的日志看看,可能会找到S ...
- uniapp 复制 粘贴,系统剪贴板
uniapp里不叫复制粘贴,叫系统剪贴板uni.setClipboardData({ data: this.href, success: () => { uni.hideToast(); thi ...
- 【C++复习】第九章 模板与群体数据(2)
学习重点:容器类型内部的实现机制,顺便复习前面各章内容.容器类型的具体实现不需要特别关注(目前不需要会裸手写这么一个容器类型) 1.群体/线性群体 群体的概念 群体是指由多个数据元素组成的集合体.群体 ...
- PHP表单验证内容是否为空的实现代码
<!doctype html> <html> <head> <meta http-equiv="conent-type" conten ...
- HDLbits——Lfsr32
//Build a 32-bit Galois LFSR with taps at bit positions 32, 22, 2, and 1. 草图 verilog描述 module top_mo ...
- Github的.gitignore忽略文件
Git中有一个非常重要的一个文件-----.gitignore 1.当然如果已经push了怎么办?当然也有解决方法,如下: 有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述 ...
- 解决MyBatis-Plus修改为null值无效的问题
@TableField(strategy = FieldStrategy.IGNORED)
- WDA学习(23):UI Element:Radio Button Group & CheckBox Group使用
1.16 UI Element:Radio Button & CheckBox使用 本实例测试Radio Button Group,CheckBox Group等的使用. 注:Dropdown ...