SSM

回顾:
【在视频中:】
JavaEE

  1. Servlet+JSP:获取参数繁琐、返回数据麻烦、

  2. DBUtil:不支持事务。

  3. Dao层:负责的操作依旧很复杂

  4. 实体类:命名规范问题

  5. JSP:杂乱

  6. 前端技术:HTML、CSS、JQuery、Ajax。

框架

简化以上所有的开发流程

SSM

  1. Spring
    Spring 是一个非常强大的框架,包含20多个子模块,
    Spring 底层有两个核心技术、解耦(松耦合):
    1)IoC:依赖倒转
    2)AOP:面向切面编程,不破坏原有代码基础上【无代码侵入】,对功能进行增强
  2. SpringMVC
    是Spring的一个子模块。Spring Web MVC
    基于MVC的web框架
    核心:代替Servlet,简化Servlet的操作。
  3. MyBatils
    持久层框架:轻量级的。
    通过配置SQL语句,就可以实现数据库的访问

SpringMVC

添加SpringMVC依赖

在这里插入图片描述

在这里插入图片描述

运行过程

在这里插入图片描述
在这里插入图片描述

核心组件:
1)前端控制器:接受请求,组织剩下的三个组件完成对请求的处理,SpringMVC的大脑。
2)处理器映射器:用来维护url与处理器之间的映射关系。
3)处理器适配器:执行处理器。
4)视图解释器:渲染视图。
运行过程:
1)前端控制器,接受来自客户端的请求
2)前端控制器调用处理器映射器,根据UEL查询处理器
3)处理器映射器,返回拆寻拿到的处理器链
4)前端控制器将处理器链交给处理器适配器
5)处理器适配器准备好处理器需要的对象,执行处理器
6)处理器执行完成,返回ModeAndView
7)处理器适配器将ModeAndView返回给前端控制器
8)前端控制器将ModeAndView交给视图解析器
9)视图解析器将试图进行渲染
10)视图解析器将渲染好的视图返回给前端控制器
11)前端控制器使用Response对象,将试图返回给客户端

处理器

  1. 返回值
    1)void

    2)String
    返回值就是视图的名子,如果加了redirect:这是就是重定向
    3)ModelAndView
    数据和视图
    4)对象
    在这里插入图片描述
    在这里插入图片描述

  2. 参数
    1)自动注入来自客户端的参数,客户端的参数名要与服务器的参数保持一致。当两个参数的名字不一致时,可以使用注解:
    在这里插入图片描述
    注入集合
    在这里插入图片描述
    注入对象:注入对象时,需要参数名与属性名保持一致。

在这里插入图片描述
注入日期:
在这里插入图片描述

2) JavaEE对象
rquest
response
session
在这里插入图片描述
application
当使用response返回数据时,就不会再使用解析器了

3)SpringMVC对象
ModeAndView:将该类型放在参数中,就可以获取页面传来的数据
Mode:
在这里插入图片描述
重定向时,参数会拼接在路径后面
View:

注解:

1)@Controller
2)@RequestMapping
3)@RequestParam
4)@ResponseBody

Spring

在这里插入图片描述

Java上一代框架为SSH
Spring,Structs,Hibernate(SpringData JPA)

Spring的使用

  1. 添加依赖

IoC:控制反转

IoC:传统的对象,要使用new的方式进行创建,然后才能使用。
当需要使用对象时,找Spring容器要,这些对象在Spring容器创建时,由Spring通过反射、动态代理的方式进行创建。
DI:依赖注入
IoC:基于DI实现

属性的注入

1)set方法注入
注入属性时,通过调用Bean对象的set方法
在这里插入图片描述

2)构造方式注入
在创建对象时,调用它的有参构造
在这里插入图片描述

3)自动注入
使用aytowire属性,将注入方式可以设置为byType(根据类型),byName(根据名字)

在这里插入图片描述
4)注入不同类型的属性

1. 注入简单类型
直接设置值
2. 集合
	1)数组
	2)list
	3)set
	4)map
3. 类
	1)自动注入
	2)引用已经存在的Bean
	3)直接创建一个Bean

在这里插入图片描述

Web项目中使用Spring

  1. 依赖
  2. 在Web.xml中配置
  3. 创建Spring配置文件
  4. 配置扫描的包
  5. 在需要放到Spring容器中的类上的注解

Spring中的问题

  1. Bean对象的作用域:
    在这里插入图片描述

  2. Bean对象的生命周期
    init-method:初始化方法
    destory-method:销毁方法
    在这里插入图片描述
    在这里插入图片描述

  3. 循环依赖
    在这里插入图片描述
    一级缓存:存放完整的对象
    二级缓存:存放不完整的对象
    三级缓存:Bean工厂
    三级缓存的工作过程->解决循环依赖的问题【再看看】
    在这里插入图片描述

  4. P标签
    在这里插入图片描述
    只是一种简洁的配置方式,调用set方法

AOP

AOP:面向切面编程
面向切面编程:是面向对象编程【OOP】的一种补充,可以实现在不修改原有代码情况下。对功能进行增强【无代码侵入】。
功能增强的方式有多种;
1)装饰者模式
对象的创建需要一个原始对象,原有的方法可以增强还可以扩展新的方法。
二十三种设计模式中的一种。
IO流:InputStream-字节输入流,Outputstream-输出字节流,ObjectInputStream-对象输入流,ObjectOutputStream-对象输出流
可以对原有功能进行增强,同时还可以扩展原始对象没有的功能。
2)代理模式——功能在及逆行增强时,不能修改原有功能,也不能扩展新的功能,只能增强原有功能
我们的操作都是针对代理对象,代理兑对象在调用原始对象。
静态代理:在静态代理的模式下,每一个需要增强的方法,都需要单独添加增强代码。【代理类要与原始类,实现统一同一接口】
动态代理:Java中的的动态代理有两种方式
(1)JDK的Proxy类,在代码执行的过程中,动态创建一个代理对象
(2)使用cglib库,在代码编译时,直接添加增强代码。
在动态代理之后,接口的对象,可以是一个代理对象。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

动态代理的应用:
1) Mybatis:只需要写Mapper的接口,并没有编写他的实现类,Mybatis就是通过动态代理,创建Mapper接口的代理对象,
						代理对象中也有调用处理器
						在嗲用处理器中的invoke方法内,读取配置的SQL,执行
2)SpringAOP:
						利用动态代理,完成切面的织入。

在这里插入图片描述

SpringAOP的概念

在这里插入图片描述
后置通知包括:结束通知、返回通知、异常通知。

Spring事务处理

@Transactional 可以修饰Service类,给当前类中所有的方法添加事务的支持,也可以修饰Service层的方法,只为方法添加事务的支持。
rollbackFor:抛出什么样的异常时,回滚事务。
isolation:事务的隔离级别,default(直接使用SqlSession默认的隔离界别),读未提交、读已提交、可重复读、串行化。
propagation:用来设置事务的传播机制。

底层实现还是AOP的,使用环绕通知来实现。
在这里插入图片描述
在这里插入图片描述

事务的传播机制
前三种,支持当前事务。中间三种都不支持当前事务。最后一种,是一种嵌套事务。
在这里插入图片描述
在这里插入图片描述

。。。

  1. 日志的打印
    可以是前置,也可以是后置。
    给Controller层添加打印出调用了哪个方法。
  2. 计算方法执行时间
  3. 参数验证

MyBatis

MyBitils是一个持久层的框架

使用

  1. 加入mybatis依赖
    在这里插入图片描述
    2. 构造配置文件
    在这里插入图片描述

    1. 编写代码,通过配置文件来创建工厂
      在这里插入图片描述
  2. 创建SqlSession对象

  3. 准备MyBatis的持久成
    1)声明Mapper接口
    2)配置Mapper的SQL
    namespace:配置为对应的Mapper接口全名
    为每一个方法配置SQL操作。

  4. 给SqlSeesion要Mapper层的对象

映射文件

在这里插入图片描述

  1. mapper
    namespace:对应Mapper层的接口,必须设置

  2. sql配置


    useGenerateKeys:true
    keyColumn:设置数据表中的主键字段的名字
    keyProperty:设置实体类的主键属性的名字,获取到自增主键的之会保存在这个属性中

    设置查询SQL
    resultType:查询结果集要映射成实体类的类型。也可以自动解析
    无论方法返回的是单个的实体对象,还是一个集合,只能设置实体对象类型。也可以使用map来接受查询结果
    id:
    parameterType:

  3. #{} ${}
    #{}:参数绑定 相当于?,不存在SQL注入,
    只有一个见到那的参数 #{随便写}
    ${}:字符串的拼接,存在SQL注入
    只有一个简单的类型的参数 ${value}

映射

查询结果集在默认情况下,会根据字段名字进行自动映射。
查询结果集,与实体类之间映射。

id:唯一标识,被select标签引用
type:要映射成的实体类的全名
:只用来配置主键字段的映射
:用来配置非主键字段的映射
column:查询结果集中的字段
property:被映射成的实体类的属性

高级映射

关系型数据库中,表与表之间可以存在三种关系:一对一、一对多、多对多
一对一的关系:解析成两个单项的一对一
一对多:解析成一个单项一对一,和一个单项的一对多
多对多:解析成两个单项的一对多

缓存

执行过的SQL语句,将结果保存起来,再次查询时不需要再访问数据库,直接取出上次的结果使用
检查对数据库的操作,提升效率。

  1. 一级缓存——作用范围为SQLsession,出了session便不会起作用
    基于SqlSession的——默认是开启的。
    当在一个session中执行SQL时,先查询缓存中是否有相映的数据,如果没有,这时才会调用数据库执行SQL,
    如果有,这时,就会直接取缓存中的数据,不会再调用数据库了。

  2. 二级缓存
    基于Mapper的缓存,默认时关闭的
    不同的SqlSession访问同一个Mapper时,缓存都是有效的

    只需要在Mapper的映射文件中添加一个cache标签。
    在这里插入图片描述
    刷新算法:LRU、FIFO、SPFT【软引用】,WEAK【弱引用】。

flushInterval //刷新时间,单位为毫秒
readOnly=“true” //只读
核心配置中,可以开启和关闭缓存。
cacheEnabled
flushCache:用于增删改的操作上使用,若为true则修改时,缓存会刷新。
useCache,当为true时,缓存会被清空。

懒加载 延迟加载

在关联查询时,当使用association或者collection标签的select属性进行过关联查询时,懒加载可以将关联对象设置为延迟加载,如果用不到,则不加载,用到时,再加载。
懒加载存在的意义:为了减少对数据库的操作。
在这里插入图片描述

整合

方式一【JavaEE】

Spring 监听器 启动Spring容器
SpringMVC 前端控制器 先启动Spring容器,再启动SpringMVC
	【整合包】		Mybatis-spring 2.0.6
MyBatis
	SqlSessionFactory交给Spring容器管理。
	(1)添加项目
	(2)添加需要的各种包
	(3)项目结构
	(4)配置xml的web文件【Spring的前端控制器】
	(5)配置SpringMVC+扫描controller+静态资源释放+...
	(6)配置mapper.xml文件【配置连接池的相关属性+创建工厂+扫描mapper+要扫描的包的配置(service层+controller层)】

缺点:配置繁琐、包繁琐

方法二 【SpringBoot】

  1. 约定优于配置【解决配置繁琐的问题】
    制定好约定,代替大量一样的配置,也可以单独配置
  2. Maven依赖
    项目构造工具
    构造方式
    导包 依赖
    编译方式
    插件
  3. SpringBoot是一个可以快速创建基于Spring项目的工具
    1)创建项目
    在这里插入图片描述

2)添加所需依赖
在这里插入图片描述

3)修改配置文件
tomcat端口号:8080,http端口号:80,https端口号:443,mysql端口号3306.
上下文路径,默认为空。

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值