SpringBoot基础

SpringBoot入门

SpringBoot工程的创建

IDEA联网创建springboot

SpringBoot是由pivotal软对提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程的

  1. 创建新模块

  2. 选择当前模块需要的技术集

  3. 定义开发控制器
//Rest模式
@RestController
@RequestMapping("/books")
public class BookController {
    @GetMapping
    public String getById(){
        System.out.println("springboot running ...");
        return "springboot running ...";
    }
}
  1. 运行自动生成的SpringBootApplication类

spring官网创建springboot

基于spring官网创建项目,在官方地址https://start.spring.io/中直接配置所需要的信息即可,配置完成后会生成一个zip解压文件,解压到项目目录下即可完成导入

但是由于该官网并不是中文网站,存在可能访问不到的潜在的访问危险

阿里云创建springboot

在创建使选择从阿里云的镜像网站中https://start.aliyun.com下载springboot项目,但是其中的版本可能并不是很高

SpringBoot简化配置解析

spring程序缺点

  • 依赖设置复杂
  • 配置负责

springboot程序优点

  • 起步依赖(简化依赖配置)
  • 自动配置(简化常用工程相关配置)
  • 辅助功能(内置服务器)
parent

parent是所有springboot项目中需要继承的父项目,其中定义了若干个坐标版本号和依赖管理,并非依赖本身,以达到减少依赖冲突的目的

spring-boot-starter-parent各个版本之间存在着诸多坐标版本,各不相同

注:阿里云中直接使用了dependencyManagement直接导入了parent依赖

starter

starter是springboot中常见项目名称,其中定义了当前项目使用的所有依赖坐标并使用依赖传递使这些依赖都被封装在底层,以达到减少依赖配置的目的

例如:在springboot的spring-boot-starter-web中引用了spring-web,spring-webmvc等多个组件完成对web层的构建

实际开发过程中:

  • 使用任意坐标仅仅书写GAV中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本V
  • 如发生坐标错误,在进行指定Version(小心版本冲突)

SpringBoot版本包中并不包含druid数据源

SpringBoot引导类

SpringBoot引导类的main方法中的SpringApplication.run方法得到的其实就是Spring的ConfigurableApplicationContext容器,而引导类的功能主要就是靠@SpringBootApplication注解,SpringBoot工程启动后会初始化Spring容器,扫描引导类所在包以及以下包加载Bean对象

内嵌服务器
Tomcat

SpringBoot项目启动后之所以能直接使用,是因为在spring-boot-starter-web中spring-boot-starter-tomcat中有一个tomcat-embed-core内嵌核心依赖坐标,Tomcat是基于Java开发的,本质上也是一个对象,SpringBoot容器直接将Tomcat容器的创建过程抽取变成一个对象交由Spring管理,然后所有需要运行的对象会在Tomcat对象运行。

Jetty

Jetty比Tomcat更轻量级,可扩展性强,但负载性能远不及Tomcat

在SpringBoot中如果想切换技术实现可以直接导入相应的starter坐标集例如,将Tomcat服务器换成Jetty服务器。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>
</dependencies>
undertow

负载性能勉强跑赢Tomcat

SpringBoot基础配置

SpringBoot属性配置

Spring Boot Reference Documentation可以在SpringBoot官方文档参考文档中的第一项properties中查询具体有哪些配置

SpringBoot中需要配置哪些技术需要先引入相关的starter依赖,在配置文件中才会有相应的配置,例如服务器端口配置就与starter-web有关

修改服务器端口
#内嵌Tomcat服务器端口配置
server.port=80

SpringBoot配置文件分类

application.properties(传统格式)

server.port=80

application.yml(主流格式)

server:
port: 81

application.yaml

server:
port: 82

配置文件加载优先级

properties>yml>yaml

如果有相同的属性会按照加载优先相互覆盖级,如果是不同的属性则会叠加保留

yaml文件

介绍
  • YAML(YAML Ain't Markup Language),一种数据序列化格式
  • 优点:
    • 容易阅读
    • 容易与脚本语言交互
    • 以数据为核心,重数据轻格式
  • YAML问价扩展名
    • .yml(主流)
    • .yaml
语法规则
  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用tb键)
  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  • #表示注释
  • 字面值表示方式
  • 数组表示方式
yaml数据读取
  • 使用@value配合SpringEL读取单个数据
yaml文件中的变量引用
  • 在配置文件可以使用属性名引用方式引用属性
  • 属性值如果出现转义字符如:\t,需要用双引号包裹
读取yaml全部数据
  • 封装全部数据到Environment对象中
读取yaml引用数据类型数据
  • 自定义对象封装指定数据
    1. 使用@ConfigurationProperties注解绑定配置信息到封装类中
    2. 封装类需要定义为Spring管理的bean,否则无法进行属性注入

基于SpringBoot整合第三方技术

整合JUnit

  1. 导入测试对应的starter(SpringBoot自动导入)
  2. 测试类使用@SpringBootTest修饰
  3. 使用自动装配的形式添加要测试的对象
@SpringBootTest
class Springboot04JunitApplicationTests {
    //1.注入你要测试的对象
    @Autowired
    private BookDao bookDao;
    //2.执行你要测试对象的方法
    @Test
    void contextLoads() {
        bookDao.save();
    }
}
classes属性

设置SpringBoot启动类

如果测试类在SpringBoot启动类的包或子包中,可以省略启动类的设置,也就是省略classes的设定

整合MyBatis

  • 核心配置: 数据库连接相关信息
  • 映射配置: SQL映射(xml/注解)
  1. 创建新模块,选择Spring初始化,并配置相关模块基础信息
  1. 选择当前模块需要使用的技术集(MyBatis、MySQL驱动)
  1. 设置数据源参数
  1. 定义数据层接口与映射配置
  1. 测试类中注入Dao接口并配置
常见问题处理
  1. MySQL8.X版本驱动强制要求设置时区
    1. 修改url在后面加上?serverTimezone=UTC
  1. 驱动类过时,提醒更换为cj.jdbc.Driver

整合MyBatis-Plus

  • MyBatis-Plus与MyBatis的区别
    • 导入坐标不同
    • 数据层实现更加简化
  • 整合Mybaits-Plus流程
  1. 手动添加SpringBoot整合MyBatis-Plus的坐标,可以通过mvnrepository获取
  1. 定义数据层接口与映射配置
  1. 其他同整个MyBatis

整合Druid

  1. 整合druid需要导入druid对应的starter
  2. 根据druid提供的配置方式进行配置
  3. 整合第三方技术通用方式:
    1. 导入对应starter
    2. 配置非默认项的相关信息

整合SSMP

  1. 开发基础的CRUD功能,做一层测一层
  2. 调通页面,确认异步提交成功后,制作所有功能
  3. 添加分页与查询功能
1. 模块创建
  1. 勾选springmvc与mysql坐标,添加mybatisplus和lomobok坐标
  2. 修改配置文件为yml格式
  3. 设置端口为80方便访问
2. 实体类快速开发
  1. 实体类制作
  2. 使用lombok简化开发
  • 导入lombok无需指定版本,由SpringBoot提供版本
  • @Data注解
3. 数据层标准开发
  1. 导入druid和mybatis-plus的starter坐标
  2. 配置数据源与mybatisplus对应的配置
  3. 开发dao接口(继承basemapper)
  4. 制作测试类测试dao功能是否有效
4. 开启mp运行日志

使用配置方式开启日志标准输出模式

5. 分页
  1. 使用Ipage对象封装分页数据,可以指定泛型为domain对象
  2. 分页操作依赖mybatisplus分页拦截器实现功能,专门用于分页的拦截器PaginationInnerInterceptor
  3. 借助mybatisplus日志查阅执行sql语句
6. 条件
  1. 使用lambdaquerywrapper对象封装查询条件
  2. 所有查询操作封装成方法调用
  3. 查询条件支持动态条件拼装
7. 业务层标准开发
  1. service接口名称定义成业务名称,并与dao接口名称进行区分(例如save对应insert,login对应getByUsernameAndPassword)
  2. 制作测试类测试service功能是否有效
8. 业务层快速开发
  1. 使用通用接口(ISerivce<t>)快速开发service
  2. 使用通用实现类(ServiceImpl<m,t>)快速开发ServiceImpl
  3. 如果通用接口没办法满足业务需求的话,可以在通用接口基础上做功能重载或功能追加
  4. 注意重载时不要覆盖原始操作,避免原始提供的功能丢失
9. 表现层标准开发
  1. 基于restful制作表现层接口
    1. 新增:post
    2. 删除:delete
    3. 修改:put
    4. 查询:get
  1. 接收参数
    1. 实体数据:@requestbody
    2. 路径变量:@pathvariable
10. 表现层返回数据一致性处理
  1. 设计统一的返回值结果类型便于前端开发读取数据
  2. 返回值结果类型可以根据需求自行设定,没有固定格式
  3. 返回值结果模型类用于后端与前端进行数据格式统一,也称为前后端数据协议
11. 列表功能
  1. 单体项目中页面放在在resources/static目录下
  1. created钩子函数用于初始化页面时发起调用
  1. 页面使用axios发送异步请求获取数据后确认前后端是否联通
12. 添加功能
  1. 使用请求post调用后台对应操作
  2. 添加操作结束后动态刷新页面加载数据
  3. 根据操作结果不同,显示对应的提示信息
  4. 弹出添加div时清除表单数据
13. 删除功能
  1. 删除操作前弹出提示框避免误操作
  2. 请求方式使用delete调用后台对应操作,传递当前行数据row对应的id值到后台
  3. 删除操作结束后动态刷新页面加载数据
  4. 根据操作结果不同,显示对应的提示信息
14. 编辑功能
  1. 打开编辑窗口的时候先进行id查询是否有此项数据,有则填充到表单中,否则自动同步数据。在并发访问时,当前操作的数据可能被别的请求修改或删除,所以需要自动刷新
  2. 使用put请求表示修改操作,将表单数据提交给后台,调用后台对应操作
  3. 删除操作结束后动态刷新页面加载数据
  4. 根据操作结果不同,显示对应的提示信息
15. 异常处理
  1. 使用注解@RestControllerAdvice定义全局异常处理类,搭配注解@ExceptionHandler使用在方法上处理特定的异常
  2. 异常处理器必须被扫描加载,否则无法生效
  3. 表现层返回结果的模型类中添加消息属性用来传递消息到页面
16. 分页查询
  1. 使用el分页组件
  2. 定义分页组件绑定的数据模型
  3. 异步调用获取分页数据,分页数据页面回显
  4. 切换页码重新查询
17. 分页功能维护
  • 基于业务需求增加功能
18. 条件查询
  1. 定义查询条件数据模型(当前封装到分页数据模型中)
  2. 异步调用分页功能并通过请求参数传递数据到后台
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值