springboot总结_e_nanxu的博客-爱代码爱编程
总结
一、Spring
1.1 主要的接口,用于解析配置文件
① BeanFactory接口
② ApplicationContext(面向开发者接口),有两个实现类
ClassPathXmlApplicationContext;FileSystemXmlApplicationContext
1.2 xml方式实现
① 通过标签创建对象
② 注入属性
set方式、构造器方式、
字面量、级联赋值、集合类属性的注入
1.3 注解方式实现
① 创建对象
@Service、@Controller、@Repository、@Component
② 注入属性
@Autowire(根据类型识别对象属性)、@Qualifier、@Resource、@Value(普通属性注入)
③ 配置类
@Configuration:标志该类为配置类,完全替代xml
@ComponentScan(basePackages = {“com.atguigu”}):设置组件扫描路径,路径内标注的组件全部纳 入容器中
2.1 底层原理
① Proxy.newProxyInstance(
第一个参数:新建代理类的类加载器,
第二个参数:被代理的实现类所实现的所有接口的Class数组,
第三个参数:实现了InvocationHandle接口的新建类的对象,对象构造器中传入被代理类
)
② 创建实现了nvocationHandle接口的实现类,在该内部写增强方法
③ ①的返回值强转为被代理类类型,此时调用被代理类内部的某个方法,该方法就会被增强。
2.2 在Spring下实现
@Aspect:表示该类为动态代理类
execution([权限修饰符] [返回类型] [类全路径] [方法名] [参数列表])表达式:表示各类通知可以作用在哪些 类的哪些方法上
3.1 简述
事务是针对数据库的概念。多线程、高并发中的事务也是基于对数据库的操作。
3.2 事务的三种读
脏读:未提交的事务读了未提交事务中的内容
不可重复读:未提交的事务读了已提交事务中的修改的内容
幻读:未提交的事务读了已提交事务中的新增的内容或未读到已提交事务中的删减了的内容
3.3 事务的四种特性(ACID)
原子性、一致性、隔离性、持久性
3.4 编程式事务处理
开启事务、进行业务操作、如果没有异常就提交事务、如果有异常就回滚事务
3.5 声明式事务处理
① 配置事务管理器:表明在哪个数据库上开启事务
② 开启事务注解:
③ 在类或方法上添加@Transactional:表明该类或方法是事务性的
二、SpringMVC
主要针对web请求/响应进行的一系列优化,简化了原生ServletAPI中的繁琐操作
-
根据请求路径匹配controller
// value属性中匹配请求路径的写法支持ant风格 @RequestMapping( value = {"请求路径1","请求路径2"}, params = {"请求参数1","请求参数2"}, headers = {"请求头键值对1","请求头键值对2"}, method = {RequestMethod.GET} )
-
获取请求参数
① 通过controller内的控制方法的形参名与请求中的参数名一致而获取请求参数
② @RequestParam( “请求参数名”) 形参名:绑定了请求参数名。
③ @RequestHeader:获取请求头参数
④ @CookieValue:获取cookie
⑤ 通过pojo类获取请求参数
-
向域对象中共享数据
request:使用ModelAndView类进行共享
session:使用原生ServletAPI中的HttpSession
application:使用原生ServletAPI中的ServletContext = session.getServletContext ( )
-
ResultFul路径风格
PUT/POST/PUT/DELETE都是统一的输入路径,区别只在于html文件中的请求方式
通过源码分析,PUT/DELETE请求需要通过Post请求发送,在hidden中设置name值为”_method“
-
处理视图
根据返回字符串进行自动匹配
① 无前缀:使用Thymeleaf
② 前缀为forword:为转发
③ 前缀为redirect:为重定向
-
响应处理
6.1 @ResponseBody、
① 加入JSON依赖,当向浏览器传输Java对象时,需要先将Java对象转换为JSON对象。
② 解决Ajax问题:Ajax使用的是局部刷新技术,因为不是使用转发和重定向技术,只能使用响应
6.2 RespinseEntity
在ResponseEntity类的构造器中,有三个参数,分别是:响应体、响应头、状态码,故通过创建
ResponseEntity的实例对象可相当于自定义了一个响应报文,从而对对浏览器进行响应
-
拦截器
-
异常处理
@ControllerAdvice:将当前类标识为异常处理的组件
@ExceptionHandler(value = { }):用于设置所标识方法处理的异常
三、MyBatis
主要是操作数据库中的数据
-
ORM,实现面向接口编程
Object Relationship Mapping,对象映射关系,从而实现面向接口编程。即接口中的方法无需实现类实现,而是通过映射文件进行实现
① Mapper接口的全类名 与 Mapper映射文件中的命名空间一致
② Mapper接口中的方法名 与 Mapper映射文件中的id一致
底层:通过SqlSession调用Mapper映射文件中具体的SQL
-
获取参数
${ }
:字符串拼接#{ }
:会自动加单引号 -
自定义映射:resultMap标签
解决一对多和多对一中,如何将数据表中的int/varchar字段映射到pojo类中的实体类属性。
-
动态SQL
使用、、、拼接SQL
-
缓存
一级缓存:在sqlSession中
二级缓存:在sqlSessionFactory中
可引入第三方缓存
-
逆向工程
自动生成pojo类、Mapper接口和Mapper映射文件,并且可以使用QBC风格进行增删改查。
四、MyBatis-Plus
对MyBatis的增强
-
对于单表的CRUD,可以不用创建映射文件,只要使Mapper接口继承BaseMapper即可。
-
对于多表查询或复杂的查询,可以在映射文件中构建,同MyBatis一样
-
提供了官方的IService接口和ServiceImpl<? extends BaseMapper, T>实现类,只要写对应的接口和实现类分别继承即可。ServiceImpl类中有大量的业务方法。
-
Wrapper条件构造器,组装where后的筛选条件,其对象可作为参数直接传给BaseMapper类中的方法
-
分页插件和乐观锁/悲观锁插件
-
可以配置多所数据源,选择从不同的数据源操作数据库
-
MyBatisX插件,可以配合IDEA快速的构建数据表对应的Mapper及Service文件结构,极大的简化开发。
通过引入MyBatisX内置的方法,可自动生成映射文件。
五、SpringBoot尚硅谷SpringBoot官方笔记地址
-
增加了多种向容器中添加组件的注解,对标Spring中的Ioc容器功能
注解名称 功能 1 @Configuration 标注该类为配置类 2 @Bean 标注在方法上,通过方法添加组件,
常用于导入第三包中的组件3 @Compont 添加普通组件 4 @Controller 添加控制类组件 5 @Service 添加业务层组件 6 @Repository 添加持久层组件 7 @Import 快速给容器中导入组件 8 @Conditional ( ) 按照条件进行组件装配 9 @ImportResource() 将xml文件中的bean组件添加进入容器 -
配置文件
总体配置,可使用yaml格式(推荐使用)和properties格式,具体配置可参照官方文档中的附录A
会涉及到两种方式的配置绑定
-
web工程业务层获取参数
注解 使用场景 1 @PathVariable 作用于RestFul风格的请求,标注在对应的方法参数前
可以获取单个参数,也可以获取所有参数的Map2 @RequestHeader 获取请求头 3 @RequestParam 对普通风格请求中参数的获取,即queryString查询字符串 4 @CookieValue 有的请求可能没有cookie,会报错 5 @RequestBody 只有post请求有请求体 6 @RequestAttribute 和@RequestParam用法一样,
用于获取存在request作用域中的数据7 @MatrixVariable 矩阵变量,在请求路径中使用分号作为数据分割符
有一个属性pathVar,对应的是@RequestMapping中的路径名