# SSM框架学习 **Repository Path**: BY-KK/ssm-learning ## Basic Information - **Project Name**: SSM框架学习 - **Description**: Spring5,SpringMVC,Mybatis 以及SSM框架整合的学习 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-01-11 - **Last Updated**: 2023-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 概览 Spring5 **30小时** SpringMVC **30小时** mybatis **20小时** ssm框架整合 **10小时** 总计: ​ **90小时** 1.75倍速看需要**52小时** # Spring5 [尚硅谷Spring框架视频教程(spring5源码级讲解)_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1Vf4y127N5?from=search&seid=3450966794023359903&spm_id_from=333.337.0.0) 预计花费30小时 # SpringMVC [【尚硅谷】SpringMVC教程丨一套快速上手spring mvc_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1Ry4y1574R?from=search&seid=17883083645676974415&spm_id_from=333.337.0.0) 预计花费30小时 # mybatis [尚硅谷MyBatis实战教程全套完整版(初学者零基础从入门到精通,好评如潮,资料齐全)_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1mW411M737) 预计花费20小时 # SSM整合学习 [尚硅谷SSM实战演练丨ssm整合快速开发CRUD_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV17W411g7zP) 预计花费10小时 # SSM整合 ```xml 4.0.0 org.example ssm-learning 1.0-SNAPSHOT 8 8 org.springframework spring-context 5.0.4.RELEASE org.springframework spring-webmvc 5.0.4.RELEASE org.springframework spring-jdbc 5.0.4.RELEASE org.springframework spring-aspects 5.0.4.RELEASE org.mybatis mybatis 3.2.8 org.mybatis mybatis-spring 1.2.2 mysql mysql-connector-java 8.0.23 org.slf4j slf4j-log4j12 1.7.22 com.fasterxml.jackson.core jackson-databind 2.9.0 com.alibaba druid 1.0.9 jstl jstl 1.2 javax.servlet servlet-api 2.5 javax.servlet jsp-api 2.0 ``` ### 1.JavaEE简介 1. 为什么要有架构? 2. 三层架构是什么? 3. MVC框架是什么? 4. MVC框架和三层架构的关系? 5. MVC框架的工作流程? 6. SSM框架和三层架构的关系? #### 1.1 为什么要有架构? 这是为了满足“低耦合,高内聚”,实现代码的健壮性和可扩展性。使得后面项目好维护好拓展。 #### 1.2 三层架构是什么? 三层架构:   开发架构一般都是基于两种形式:一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器服务器。   在JavaEE开发中,几乎全都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:**表现层**、**业务层**、**持久层**。其中每一层都分工明确:   **表现层**:负责接收客户端请求,向客户端响应结果,负责与用户进行交互。   **业务层**:主要是针对不同请求业务逻辑的处理,也可理解为对数据业务逻辑处理。   **持久层**:主要是对数据库操作,而不是对数据的操作,具体为业务逻辑层或用户界面层提供数据服务。 一般JavaEE项目的三层架构构建目录为: | 包 | 表述 | | --------------------------------- | ----------------------------- | | cn.pzhuweb | 公司域名倒写 | | cn.pzhuweb.xxx | 项目名称 | | cn.pzhuweb.xxx.yyy | 子模块 | | cn.pzhuweb.xxx.yyy.dao | 子模块dao层接口 | | cn.pzhuweb.xxx.yyy.dao.impl | 子模块dao层实现类 | | cn.pzhuweb.xxx.yyy.service | 子模块service层接口 | | cn.pzhuweb.xxx.yyy.service.impl | 子模块service层实现类 | | cn.pzhuweb.xxx.yyy.domain | 子模块JavaBean | | cn.pzhuweb.xxx.yyy.web.controller | 子模块web层中的控制层 | | cn.pzhuweb.xxx.yyy.web.filter | 子模块web层中的过滤器、拦截器 | | cn.pzhuweb.xxx.utils | 工具包 | | cn.pzhuweb.xxx.exception | 自定义异常、全局异常处理 | | cn.pzhuweb.xxx-constant | 自定义常量 | #### 1.3 MVC框架是什么? MVC 全称:Model 模型、 View 视图、 Controller 控制器。 MVC 最早出现在 JavaEE 三层中的 Web 层,它可以有效的指导 Web 层的代码如何有效分离,单独工作。 **View 视图**:只负责数据和界面的显示,不接受任何与显示数据无关的代码,便于程序员和美工的分工合作—— JSP/HTML。 **Controller 控制器**:负责接收请求与响应浏览器,调用业务层的代码处理请求,然后派发页面(或者返回json给前端),是一个“调度者”的角色——Servlet。 转到某个页面。或者是重定向到某个页面。 **Model 模型**:承载数据,并对用户提交请求进行计算的模块。其分为两类,一类称为数据承载Bean,一类称为业务处理Bean。所谓数据承载Bean是指实体类,专门承载业务数据的,如Student、User等。而业务处理Bean则是指Service或Dao对象,专门用于处理用户提交请求的。 **MVC** **是一种思想** MVC 的理念是将软件代码拆分成为组件,单独开发,组合使用(**目的还是为了降低耦合度**)。 #### 1.4 MVC框架和三层架构的关系? 1. 三层架构是一种软件领域最普遍的分层式架构,而 MVC 是在三层架构的基础上设计的一种框架型架构,三层架构是一种宏观的概念,而 MVC 就是一种比较具体的三层架构的框架实现,我们在 MVC 的基础上把不同类别的代码文件进行分类就可以了 2. 一般认为View 层和 Controller 层都属于三层架构的**表现层**,而Model属于**业务层**和**持久层** - 总的来说:MVC与三层架构并不是一一对应的,MVC只是三层架构基础上设计的具体框架 #### 1.5 MVC框架的工作流程? MVC的工作流程: 用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果找到相应的View视图,渲染数据后最终响应给浏览器。 总的来说分为下面4步 1. 用户通过View页面向服务端提出请求,可以是表单请求、超链接请求、AJAX请求、等。 2. 服务端Controller控制器接收到请求后对请求进行解析,找到相应 的Model对用户请求进行处理。 3. Model处理后,将处理结果再交给Controller 4. Controller在接到处理结果后,根据处理结果找到要作为向客户端发回的响应View页面。页面经渲染(数据填充)后,再发送给客户端 #### 1.6 SSM框架和三层架构的关系? SSM主要由Spring,SpringMVC 和 Mybatis三个构成。它们在三层架构中所处的位置是不同的,即它们在三层架构中的功能各不相同,各司其职 1. SpringMVC:作为View层的实现者,完成用户的请求接收功能。SpringMVC的Controller作为整个应用的控制器,完成用户请求的转发及对用户的响应 2. MyBatis:作为 Dao层的实现者,完成对数据库的增、删、改、查功能 3. Spring:以整个应用大管家的身份出现。整个应用中所有的Bean的生命周期行为,均由Spring来管理。即整个应用中所有对象的创建、初始化、销毁,及对象间关联关系的维护,均由Spring进行管理 **Spring:(大管家)**   Spring是一个轻量级的开源框架,以**IOC(反转控制)**和**AOP(面向切面编程)**两个核心。控制反转即将对象的创建和销毁控制权交给Spring容器来管理,从而减少最大程度减少new关键字的出现,使代码低耦合,高复用。面向切面编程即将核心业务逻辑代码与日志记录,权限验证,效率检查,事务管理等模块必要存在且非业务逻辑代码分开,达到与主业务逻辑解耦的目的。 **SpringMVC**: **(表现层)** MVC是 Model 模型:   完成业务逻辑:由javaBean构成,在MVC的三个部件中,模型拥有最多的处理任务。 View视图:   负责跟用户交互的界面。一般就是由HTML,css元素组成的界面。 在视图层里没有真正的处理发生,只负责数据输出。MVC能为应用程序处理很多不同的视图。 Controller 控制器:   接收请求—>调用模型—>根据结果派发页面并经过模型处理返回相应数据 注:所有的表现层框架都是基于MVC开发的。例如SpringMVC和Strtus(Strtus、Strtus2) SpringMVC又是基于mvc模式开发,在SpringMVC模块中,将MVC的分工划分为多个组件来完成,以此来提高MVC的执行效率。 **MyBatis**: **(持久层)**  MyBatis 是是支持定制化 SQL、存储过程以及高级映射的优秀的[持久层](https://so.csdn.net/so/search?q=持久层&spm=1001.2101.3001.7020)框架,其主要就完成3件事情: 1、更加完善的封装JDBC操作 2、利用反射打通Java类与SQL语句之间的相互转换 3、采用ORM思想解决实体与数据映射的问题 **什么是orm思想?** 1、hibernate、mybatis使用orm思想对数据库进行crud操作 2、orm: object relational mapping 对象关系映射 ​ \* O:面向对象领域的Object(JavaBean对象) ​ \* R:关系数据库领域的Relational(表的结构) ​ \* M:映射Mapping(XML的配置文件) (1)让实体类和数据库表进行一一对应关系 ​ 先让实体类和数据库表对应 ​ 再让实体类属性和表里面字段对应 (2)不需要直接操作数据库表,直接操作 表对应的实体类对象 3、达到的效果,例如从数据库中查询到的对象直接创建出一个实体对象 ### SSM整合思路 #### 先整合spring和springmvc 我们要清楚的知道spring和springmvc的关系! > 什么关系? **①在配置文件中加入Spring的配置文件。但需要考虑,web容器启动以后,Spring的配置文件不会自动加载。加载需要ApplicationContext调用其实现类** ClassPathXmlApplicationContext的构造方法,实现Spring配置文件的加载。 **②Spring配置文件什么时候加载?怎么加载?** Spring配置文件一定需要在web项目启动时加载,而且必须在Servlet配置前加载(为控制层的自动装载做准备,SpringMVC所管理的控制层依赖于Spring管理的service业务逻辑层)。采用监听器Listener(监听在web程序执行中的一些事件,比如ServletContext的生命周期,或者某一属性是否变化,监听的是一个动作)。ServlertContext,在web项目启动时就会创建。因此,可以创建一个监听器,来监听ServletContext的生命周期,一旦ServletContext创建,就去加载Spring的配置文件。 注意的问题:   1)SpringMVC和Spring配置文件,如果都配置包的扫描,可能会导致有的bean被创建2次。解决办法,在Spring配置文件扫描中去除控制层的扫描: ```xml ``` ​ 2)在监听器加载Spring配置文件时,在ServletContext中绑定ApplicationContext对象,从而能够在控制层中使用Spring管理的bean。 ```xml contextConfigLocation classpath:spring.xml org.springframework.web.context.ContextLoaderListener ``` 注意:Spring的配置文件有默认的名字和位置,在WEB-INF文件下,名为applicationContext.xml 错误:BeanFactory not initialized or already closed,出现的三种情况:   ①Spring的配置文件找不到(路径或名称不对)   ②Spring的配置文件没有创建   ③Spring文件中出现了语法错误 **Spring和SpringMVC关系**   Spring为父容器,SpringMVC为子容器。   规定:**子容器能够调用访问父容器中的bean,而父容器不能调用访问子容器中的bean.** > ​ 为什么springmvc不让spring扫描controller层? SpringMVC | Spring Controller | service dao 可不可以将所有的扫描都交给spring管理? 可不可以将所有的扫描都交给springmvc管理? #### 整合mybatis 在spring的文件中整合mybatis,配置连接池,factory,dao所在的包,此时有无sqlConfig.xml都不重要! ```xml ``` ##### 使用依赖注入 在dao类上添加@Repository注解 ```java @Repository public interface IUserDao { @Select("select * from user") List findAll(); } ```