Spring
主要学这三
Spring framework
系统架构
看看就行,记不住
核心概念
IOC
当出现新的实现类的时候,要改代码成 new bookDaoimpl2
解决方案
通过外部的容器提供对象
具体步骤
DI
入门案例
set方法是改良后的对象的set,自己注意看
bean
bean的基础配置
别名配置
单例
单例是指new 出来的两个对象是同一个
不适合就是一些里面有数据的
实例化
构造方法(常用)
他的创建是调用类里的无参构造器
静态工厂
通过工厂获得对象,bean里有一个factory-method方法可以调用工厂里的方法
静态特点
-
静态的方法只加载一次
-
调用的时候不用实例化对象
实例工厂
注意这里的工厂里的方法里没有static
因为调用的工厂里不是静态的方法,想调用的话需要实例化对象,所以先弄一个bean,再弄factorybean
FactoryBean(常用)
实现FactoryBean的类,自己看两个方法
默认是单例,修改如下图
生命周期
可以控制bean开始和结束时的方法调用,一般用来数据注入之类的
依赖注入方式
比如说在数据库里导入的数据就是纯字符串,是基本类型的
setter
引用类型
基本类型
构造器注入
引用类型
基本没改,就是用构造器了
同时这里的name 里的bookDao变成了构造器里的参数
基本类型
总结
案例
感悟
DI这其实就是类里面新建属性,ref的是引用的对象,value是基本类型
proprety文件的加载
建一个xmlns的地址,用context标签加下, 就可以直接用${}的形式来获取
注意property里的数据格式,图中下面的那条数据格式不对
加载多个配置文件
要求必须是最后一种
都是死代码
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" > <context:property-placeholder location="classpath*:*.properties"/> </beans>
容器
创建
总结
不用去纠结bean里的ID指的谁了,autowire="byType" 的框架都弄好了,真好用
注解开发
注解开发bean
<context:component-scan base-package="com.heima"/>
纯注解
bean
这个是init和destory
依赖注入
引用类型
简单类型
properties
多个用数组
第三方
这个里面写的多的话太杂了,改良如下
这里不是注解的话可以用<bean>来配置,但这个是纯注解,所以不一样
总结
-
注解配置文件用<Configuration>
-
bean标签用Compontent的这三个
-
bean标签的扫描用@ComponentScan("com.heima")
-
依赖注入自动的用@Autowired 基本类型的用@value
整合MyBatis
1坐标
2 配置包
3 被导入的配置包
整合Junit
就是用着测试功能的
AOP
概念
入门案例
注意切入点的方法类型
工作流程
切入点表达式
语法格式
太麻烦了,改良如下
.. 是指多个或者零个
通知类型
通知获取数据
这三种数据
记住getArgs是获取参数的就行。方法返回值就是proceed
案例
获取参数,判断是不是str类型,执行tirm方法,记得执行方法的把改完的参数加上
事务
案例
就是一个锁的原理
就是开启一个锁,成功一起成功,失败一起失败
事务实现
事务相关配置
写法
这里io出错后,不会一起回滚事务,要修改
留痕
让log的记载一定会发生
SpringMVC
简介
入门案例
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer { @Override protected WebApplicationContext createServletApplicationContext() { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(SpringConfig.class); return ctx; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } @Override protected WebApplicationContext createRootApplicationContext() { return null; } }
流程分析
bean的控制
请求与响应
防止两个的Servlet的url一样
get
poet
乱码
这是在Servletconfig里改的
// 处理post的中文乱码问题 @Override protected Filter[] getServletFilters() { CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); characterEncodingFilter.setEncoding("utf-8"); return new Filter[]{characterEncodingFilter }; }
请求参数
普通参数
pojo
数组
集合
Json
日期
响应
页面
这里注释少了一个,返回的一定是页面
文本
Json
这个是自动转Json数据的
REST风格
简介
入门案例
快速开发
原代码
改良后
案例
因为之前设置的所有路径都会去MVC,也就是Servlet而不是去静态的资源,所以会需要修改
SSM框架
项目异常处理器
前后台协议联调
拦截器
简介
入门案例
参数
拦截器特有的执行顺序
preHandle返回值为flase时,会不让后面的运行,但有其独有的顺序
Maven进阶
分模块开发
记得读取数据要用到本地仓库,要使用install功能
依赖传递
依赖管理
依赖具有传递性,依赖里套依赖
依赖冲突
可选依赖和排除依赖
自己的
别人的
继承与聚合
聚合
继承
这个是那些非必选的依赖的设置
继承父类的依赖
这个记得
属性
用来简化操作的
资源文件属性加载
其他属性
版本性质
多环境与应用
<!--多种开发环境--> <profiles> <!-- 开发环境--> <profile> <id>env_dep</id> <properties><jdbc.url>jdbc:mysql://localhost:3306/db1</jdbc.url></properties> <!--设定为默认的开始环境--> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <!-- 生产华环境 --> <profile> <id>env_pro</id> <properties><jdbc.url>jdbc:mysql://1225:3306/db1</jdbc.url></properties> </profile> <!-- 测试环境--> <profile> <id>env_test</id> <properties><jdbc.url>jdbc:mysql://1226:3306/db1</jdbc.url></properties> </profile> </profiles>
跳过测试
<plugins> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <skipTest>false</skipTest> <!-- 排除不参与测试的代码--> <excludes> <excluede>**/BookServiceTest.java</excluede> </excludes> </configuration> </plugin> </plugins>
私服
安装
操作流程
仓库分类
资源上传与下载
SpringBoot
简介
解决了maven依赖的问题
解决了外部数据的导入问题
解决了Junit的测试问题
解决了一大堆配置的问题
快速启动
配置属性
yaml
记得加空格
外部数据的读取
1
2
3 常用
用一个类来封装,在通过类来获取数据
多环境
# 启动类 spring: profiles: active: test --- spring: config: activate: on-profile: test server: port: 80 --- spring: config: activate: on-profile: zz server: port: 89 ---
记得得在那个文件夹的位置用cmd才行
maven与Spring的兼容
就是pom文件里的变量让boot也能用 配置文件
配置属性
在被打包的位置写一个yml文件,可以直接覆盖配置类文件
整合Junit
这里直接写就行,但注意和配置类在同一个文件里,都是com.heimazzh.springboot_demon2
都给弄好了
整合Mybatis
dao类记得加@Mapper
真tm好用啊!
MybatisPlus
简介
这个依赖版本不对
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </dependency>
这两名字要一样
Lombok
分页功能
@Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ // 定义一个MP拦截器 MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); // 添加具体的拦截器 mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return mybatisPlusInterceptor; }
条件查询
在lqw里写条件
判断是否为null
在前面先判断一下是否为null
查询投影
分组查询
就是select 不查全,查一部分,这里查出来不是类的属性,所以不能用selelist,用selectMaps
查询条件
只查询一个
// 查询条件 @Test void testCount() { LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<>(); lqw.eq(Book::getId,8); Book book = bookDao.selectOne(lqw); System.out.println(book); }
范围查询
模糊查询
likeleft就是 %在左边
图中的意思是以 j 结尾的
字段映射和表明映射
@Data //包含上面的所有,但是没有构造器的两个 @TableName("tbl_Book") public class Book { private Integer id; private String type; private String name; @TableField(value = "description") //注释说明该字段在数据库表中的名字是 description private String description; @TableField(exist = false,select = false) // exist 注释说明该字段在数据库表中不存在 select = false 说明该字段敏感,比如密码,不能被查询 private String no; }
id生成策略
可以用配置文件
多数据删除
逻辑删除
加一个delect字段 0就是没删除 1就是删除
乐观锁
大概是两千条以下数据
这个修改需要version的值,所以不能为空