SpringBoot
1.创建springboot项目
创建一个springinitializr项目,选择对应的依赖,完成项目的创建
项目的目录结构中会有一个程序的主入口以及一个空的配置文件
以添加了spring-web依赖的springboot项目为例子,pom文件配置如下
==如果jdk版本为8,则需要修改spring-boot-starter-parent的版本低于3开头的版本,因为3以上版本需要jdk最低的版本为17==
1 |
|
==在application.properties配置文件中可以修改端口号等等==
2.SpringBoot自动装配原理
自动配置:
pom.xml
- spring-boot-dependencies:核心依赖在父工程中
- 我们在写入或者引入一些Springboot依赖的时候,不需要指定版本,就因为有这些版本仓库
启动器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- 启动器:说白了就是SpringBoot的启动场景
- 比如说spring-boot-starter-web,他就会帮我们自动导入web环境的所有依赖
- springboot会将所有的功能场景,都变成一个个启动器
- 我们要使用什么功能,只需要找到对应的启动器就可以了
**主程序**
- ```java
//springboot本身就是spring的一个组件
//程序的主入口,不能删不能改
@SpringBootApplication//标注这个类是一个springboot的应用
public class SpringBootTest1Application {
//将springboot应用启动
public static void main(String[] args) {
SpringApplication.run(SpringBootTest1Application.class, args);
}
}springApplication类主要做的四大事件
- 推断应用的类型是普通项目还是web项目
- 查找并加载所有可用初始化器,设置到initializers属性中
- 找出所有的应用程序监听器,设置到listeners属性中
- 推断并设置main方法的定义类,找到运行的主类
结论:springboot所有自动配置都是在启动的时候,扫描并且加载:spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,就有对应的启动器了,有了启动器,我们的自动装配就会生效,然后配置成功
- springboot在启动的时候,从类的路径下 /META-INF/spring.factories获取指定值
- 将这些自动配置的类导入容器,自动配置就会生效,帮我们进行自动配置
- 以前我们需要手动配置的东西,springboot帮我们做了
- 整合javaEE,解决方案和自动装配的东西都在spring-boot-autoconfigure-2.2.0.RELEASE.jar这个包下
- 它会把所有需要导入的组件,以类名的形式返回,这些组件就会被添加到容器
- 容器中也会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景所需要的所有组件,并且自动配置
- 有了自动配置类,免去了我们手动编写配置文件的工作
3.Springboot配置
我们一般不用后缀为properties的配置文件,而用后缀为yml的配置文件
yaml可以直接给实体类赋值
下面是yaml表达式:
1 | person: |
对应的person类
1 |
|
yaml配置文件对person的属性进行批量赋值
4.SpringBoot Web开发
jar:webapp!
自动装配
springboot到底帮我们装配了什么,能不能进行修改,能修改哪些东西,能不能进行拓展
- xxxAutoConfigure: 向容器中自动装配组件
- xxxProperties :自动装配类,装配配置文件中自定义的一些内容
web开发解决的问题:
- 导入静态资源问题……..
- 首页
- jsp,模板引擎Thymeleaf
- 装配拓展springmvc
- 增删改查
- 拦截器
- 国际化
静态资源总结:
1.在springboot,我们可以使用以下方式处理静态资源
- webjars localhost:8080/webjars/
- public ,static,/**,resources localhost:8080/
2.优先级:resources>static(默认)>public
5.模板引擎
导入对应的依赖
1 | <dependency> |
将html页面放在templates目录下即可
1 | private String prefix = "classpath:/templates/"; |
6.员工管理系统
6.1首页
根目录下面的东西最好在config类里面配置
在html头部添加 xmlns:th=”http://www.thymeleaf.org"约束
在属性面前添加th
6.2登录
给index.html页面绑定username和password属性
7.SpringBoot整合JDBC
7.1整合JDBC
springboot默认的数据源是hikari
连接数据库的application.yaml配置文件如下
1 | spring: |
7.2SpringBoot整合Druid
更换springboot的数据源:**在yaml文件中配置 type: 数据源的名称
Druid自带有log4j日志功能,需要导入log4j-core的依赖
Druid绑定yaml文件:
1 |
|
对如上代码的解释
这段代码是一个典型的Spring Boot中使用@Configuration
注解配置数据源的示例。下面是每一行代码的解释:
@Configuration
: 这是一个注解,用于标识这个类是一个配置类,它告诉Spring容器这个类包含了Bean的配置信息。public class DruidConfig {
: 定义了一个名为DruidConfig
的Java类,这个类用于配置Druid数据源。@ConfigurationProperties(prefix = "spring.datasource")
: 这是一个Spring Boot提供的注解,它能够从application.properties
或application.yml
文件中读取以spring.datasource
开头的属性,并将它们绑定到对应的字段或属性上。@Bean
: 这是一个方法级别的注解,用于告诉Spring容器,这个方法将会返回一个Bean,并且将其加入到容器中。在这个示例中,dataSource()
方法将返回一个DataSource
类型的Bean。public DataSource dataSource(){
: 这是一个公共方法,返回类型为DataSource
,方法名为dataSource()
,它是用来创建并配置数据源Bean的。return new DruidDataSource();
: 在dataSource()
方法中,创建了一个新的DruidDataSource
对象,并将其作为数据源Bean返回。
通过以上代码,Spring容器会读取application.properties
或application.yml
中以spring.datasource
开头的属性,然后将这些属性值绑定到DruidDataSource
对象中,最后将这个数据源Bean加入到Spring容器中供其他组件使用。
Druid监控功能
1 | //后台监控 :web.xml,ServletRegistrationBean |
Druid过滤器
1 | //filter |
8.SpringBoot整合Mybatis
整合包,导入mybatis-spring-boot-starter依赖
1 | <dependency> |
在application文件中配置mybatis:即==整合mybatis==
1 | mybatis.type-aliases-package="对应pojo包的位置" |
写sql语句也可以使用注解开发,在对应方法上加上select注解,但是在复杂的关系表中不建议使用注解开发
1 |
|
SQL片段的作用和使用:
- 作用:
将重复的sql语句抽出来放到sql标签中,然后通过<include refid=”” />
来引入
1 | <sq1 id="userColumns">id,user_name,password,name,age,sex,birthday,created,updated</sql> |
使用:
在一个mapper.xml 中使用
<sql id=(id就是一个标识)>
去定义sql片段,然后在需要的位置使用<include>
引入注意:这里include里面的refid属性填写的内容是定义sql片段的id
1
2
3
4
5
6
7
8
9
10
11
12<!--定义sql片段-->
<sql id= "userColumn ">
id, user_ name,password, name , age, sex, birthday , created , updated
</sql>
<!--书写CURD操作 -->
<!--id是方法的名字
resultType :结果集映射类型
-->
<select id= "queryAllUser" resultType= "User">
select <include refid= "userColumn"></include> from tb_ user
</ select>将所有的公用的SQL片段集中定义到一个Mapper.xml文件中,其他Mapper.xml文件如需引入mybatis-config.xml,通过命名空间.id即可
==url请求都是get请求==
@Mapper
@Mapper
注解通常用于基于 MyBatis 框架的 Java 项目中。它的作用是将一个 Java 接口标记为 MyBatis 的映射器接口,用于定义 SQL 查询、更新、删除等数据库操作的方法。MyBatis 框架会根据这些接口生成对应的实现类,从而实现数据访问操作。
@Repository
@Repository
注解通常用于 Spring 框架中的 Java 项目中。它的作用是将一个 Java 类标记为数据访问组件,通常用于与数据库交互的 DAO 类。@Repository
注解通常与其他 Spring 组件,如 @Service
或 @Controller
配合使用,以实现数据访问、业务逻辑处理和控制层的分离
9.MVC架构再理解
- 对应数据库编写对应的实体类
- dao层即数据对象访问层,跟mapper层差不多,在该层主要由接口构成,这些接口与数据库进行交互,定义一系列方法,每个方法对应一个对数据库的操作
- service层即服务层,编写一个service接口和该service接口的实现类,在service接口写出相应方法,在实现类中继承接口,自动注入对应的Mapper接口,重写service接口里面的方法,调用mapper接口里面的方法并返回
- controller层即控制层,在controller层自动注入service层接口,定义方法,在方法里面调用接口的方法,在Controller层通过接口类型注入Service时,Spring框架会自动找到该接口的某个实现类(前提是已经配置或扫描到了这个实现类,并且实现了接口中声明的所有方法)。在实际执行时,调用接口方法时,实际上是调用了该接口对应实现类中重写的方法。
10.SpringSecurity
在web开发中,安全是第一位的,可以使用过滤器和拦截器进行保障安全(但是需要大量的原生代码,冗余),也可以使用框架保护安全
常见的安全框架:SpringSecurity,shiro
功能:认证,授权
权限的分类
- 功能权限
- 访问权限
- 菜单权限
AOP:横切 - 配置类
记住几个类:
- WebSecurityConfigurerAdapter:自定义Secutiry策略
- AuthenticationManagerBuilder:自定义认证策略
- EnableWebSecurity:开启WebSecurity模式