SSM整合
-
基础环境
- 数据库
- Pom(依赖、资源过滤)
- 基本结构(包、xml配置文件)
-
Mybatis层编写
- 数据库连接 properties
- mybatis.xml
- 实体类
- 接口、mapper接口
- service、service实现类
-
Spring层编写
-
整合mybatis(spring-dao.xml)
- 关联数据库文件
- 配置数据源
- sqlSessionFactory
- 配置自动扫描包 扫描dao层接口,动态注入到spring 容器
-
整合service
- 扫描 service 层下的接口
- 注入 service 实现类到IOC 容器中
- 配置事务管理器(注入数据库连接池)
-
-
SpringMVC 层编写
-
web.xml
- dispacherservlet注册
- encodingfilter
- session 过期时间
-
spring-mvc.xml
- 注解驱动,等效于配置了映射器和适配器
- 静态资源默认servlet配置
- ViewResoulver 视图解析器
- 扫描 Controller
-
-
applicationContext.xml
- import 三层Spring 配置文件
-
编写对应的controller和页面
https://martinfowler.com/articles/microservices.html
第一个SpringBoot 程序- 官网生成
- IDEA 自动生成
- 自定义springboot banner
- 在线生成 https://www.bootschool.net/ascii
- 在resource 目录下新建banner.txt 粘贴进去
- 自动装配、run()
- 父依赖
org.springframework.boot spring-boot-starter-parent 2.5.6
-
启动器
org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test -
打包插件
org.springframework.boot spring-boot-maven-plugin
// @SpringBootApplication 用来标注一个主程序类
// 说明这是一个 SpringBoot应用
// 标注在某个类上说明这个类是SpringBoot的主配置类 ,
// SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
@SpringBootApplication
public class Project01Application {
// 启动服务
public static void main(String[] args) {
SpringApplication.run(Project01Application.class, args);
}
}
@SpringBootApplication
标注在某个类上说明这个类是SpringBoot的主配置类 , SpringBoot就应该运行这个类的main方法来启动SpringBoot应用
他里面还有其他注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
@ComponentScan
这个注解在Spring中很重要 ,它对应XML配置中的元素。
作用:自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到IOC容器中
@SpringBootConfiguration作用:SpringBoot的配置类 ,标注在某个类上 , 表示这是一个SpringBoot的配置类;
这里的 @Configuration,说明这是一个配置类 ,配置类就是对应Spring的xml 配置文件;
里面的 @Component 这就说明,启动类本身也是Spring中的一个组件而已,负责启动应用!
@EnableAutoConfiguration开启自动配置功能
@EnableAutoConfiguration 告诉SpringBoot开启自动配置功能
以前我们需要自己配置的东西,而现在 SpringBoot可以自动帮我们配置
@AutoConfigurationPackage
@import({AutoConfigurationimportSelector.class})
@AutoConfigurationPackage
@import({Registrar.class})
@import({AutoConfigurationimportSelector.class})自动配置包
@import , 给容器中导入一个组件
Registrar.class 作用:将主启动类的所在包及包下面所有子包里面的所有组件扫描到Spring容器
主启动类的main 方法给容器导入组件
AutoConfigurationimportSelector :自动配置导入选择器,
最终会指向一个 spring.factories 文件
spring.factories ,里面有很多自动配置的文件,这是自动配置的根源
public class Project01Application {
// 启动服务
public static void main(String[] args) {
SpringApplication.run(Project01Application.class, args);
}
}
一部分是SpringApplication的实例化,二是run方法的执行
这个类主要做了以下四件事情:
1、推断应用的类型是普通的项目还是Web项目
2、查找并加载所有可用初始化器 , 设置到initializers属性中
3、找出所有的应用程序监听器,设置到listeners属性中
4、推断并设置main方法的定义类,找到运行的主类
run() 方法运行原理
结论所以,自动配置真正实现是从classpath中搜寻所有的meta-INF/spring.factories配置文件 ,并将其中对应的 org.springframework.boot.autoconfigure. 包下的配置项,通过反射实例化为对应标注了 @Configuration的JavaConfig形式的IOC容器配置类 , 然后将这些都汇总成为一个实例并加载到IOC容器中。
结论:
- SpringBoot在启动的时候从类路径下的meta-INF/spring.factories中获取EnableAutoConfiguration指定的值
- 将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
- 整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
- 它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;
- 有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;
SpringBoot 使用的是一个全局配置文件,配置文件名是固定的
配置文件的主要作用就是 修改SpringBoot 自动配置的默认值,配置我们想要配置的。
支持properties、yaml 配置文件,可以同时存在,但有优先级
application.properties
- 语法结构 :key=value
application.yml
- 语法结构 :key:空格 value
“YAML Ain’t a Markup Language” (YAML不是一种标记语言)
这种语言以数据作为中心,而不是以标记语言为重点!
基础语法1、空格不能省略
2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
3、属性和值的大小写都是十分敏感的。
字面量:普通的值 [ 数字,布尔值,字符串 ]
字面量直接写在后面就可以 ,
字符串默认不用加上双引号或者单引号;
key:空格 value
“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
’ ’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
name: “ hello n world ” == hello 换行 world
name: ’ hello n world ’ == hello n world
对象、Map
key: value1: value2:
# 键值对写法
student:
name:
age:
# 行内写法
student: {name: monster,age: 18}
数组(List、set)
key: - value1: - value2:
# 键值对写法 pets: - cat - dog - pig # 行内写法 pets: [cat,dog,pig]注入配置文件
- yaml 配置
dog: name: 小红 age: 10
- 实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "dog")
public class Dog {
private String name;
private int age;
}
- 测试
@SpringBootTest
class Project01ApplicationTests {
@Autowired
private Dog dog;
@Test
void contextLoads() {
System.out.println(dog);
}
}
JSR303 校验
Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常
使用数据校验,可以保证数据的正确性
@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) string is between min and max included.
日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则



