SpringBoot基础篇学习笔记

黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战

使用RestController代替Controller+ResponseBody
在Dao的实现类上加@Repository,@Repository就是写在数据层上的。
@Service将servive的实现类定义为 业务层对应的bean

表现层Contrller中, 带参数的,用异步提交发送的话,参数通过请求体传json数据过来, 用 请求体参数@RequestBody;删除和传单个 使用的是路径变量来传参,@PathVariable
业务层接口关注的是 业务名称
数据层接口关注的是 与数据库相关的操作

1. 入门案例解析

spring程序缺点:

  • 依赖设置繁琐
  • 配置繁琐

SpringBoot程序优点:

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

1.1 parent-仅定义未使用

定义一系列坐标,属性和依赖管理

子工程继承了parent, parent又继承了dependencies, dependencies定义了几百了版本信息,以及对应的坐标引用信息。方便我们的配置

  1. 开发SpringBoot程序要继承spring-boot-starter-parent
  2. spring-boot-starter-parent中定义了若干个依赖管理
  3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
  4. 继承parent的形式也可以采用引入依赖的形式实现效果

1.2 starter

下面的依赖在使用
对应的start其实就是包含了若干个坐标定义的pom管理文件,一个start包含了若干个依赖管理信息

  • 项目中的pom.xml定义了使用SpringMVC技术,但是并没有写SpringMVC的坐标,而是添加了一个名字中包含starter的依赖

  • 在spring-boot-starter-web中又定义了若干个具体依赖的坐标

总结

  1. 开发SpringBoot程序需要导入坐标时通常导入对应的starter
  2. 每个不同的starter根据功能不同,通常包含多个依赖坐标
  3. 使用starter可以实现快速配置的效果,达到简化配置的目的

starter与parent的区别

​ 朦朦胧胧中感觉starter与parent好像都是帮助我们简化配置的,但是功能又不一样,梳理一下。

starter是一个坐标中定了若干个坐标,以前写多个的,现在写一个,是用来减少依赖配置的书写量的

parent是定义了几百个依赖版本号,以前写依赖需要自己手工控制版本,现在由SpringBoot统一管理,这样就不存在版本冲突了,是用来减少依赖冲突的

1.3 引导类

@SpringBootApplication
public class Springboot0101QuickstartApplication {
   
    public static void main(String[] args) {
   
        SpringApplication.run(Springboot0101QuickstartApplication.class, args);
    }
}

就是启动了一个spring容器
bean就是由spirng管理的组件

SpringBoot本身是为了加速Spring程序的开发的,而Spring程序运行的基础是需要创建自己的Spring容器对象(IoC容器)并将所有的对象交给Spring的容器管理,也就是一个一个的Bean。那还了SpringBoot加速开发Spring程序,这个容器还在吗?这个疑问不用说,一定在。当前这个类运行后就会产生一个Spring容器对象,并且可以将这个对象保存起来,通过容器对象直接操作Bean。

SpringBoot程序启动还是创建了一个Spring容器对象。这个类在SpringBoot程序中是所有功能的入口,称这个类为引导类

作为一个引导类最典型的特征就是当前类上方声明了一个注解@SpringBootApplication

总结

  1. SpringBoot工程提供引导类用来启动程序
  2. SpringBoot工程启动后创建并初始化Spring容器

1.4 内嵌tomcat-辅助功能

将tomcat容器的执行过程抽取出来,变成一个对象,交给spring容器去管理

总结

  1. 内嵌Tomcat服务器是SpringBoot辅助功能之一
  2. 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理
  3. 变更内嵌服务器思想是去除现有服务器,添加全新的服务器

2. Rest风格

2.1 Rest简介

REST:Representational State Transfer,表现层资源状态转移

访问网络资源的格式
在这里插入图片描述
在这里插入图片描述

2.2 RESTful入门案例

  1. 设定http请求动作 get post put delete
  2. 设定请求参数(路径变量)
@RequestMapping("/save")
改为
@RequestMapping(value = "/users", method = RequestMethod.POST)

添加路径参数 @PathVariable

在这里插入图片描述

2.3 REST快速开发

在这里插入图片描述

  1. 可以把路径提出来
  2. 可以把ResponseBody提出来
  3. 使用RestController代替Controller+ResponseBody

@RequestMapping( method = RequestMethod.POST)
改为
@PostMapping


@RequestMapping( value = "/{id}", method = RequestMethod.POST)
改为
@DeleteMapping("/{id}")

在这里插入图片描述
在这里插入图片描述

2.4 接收参数的三种方式

在这里插入图片描述

3. springBoot基础配置

3.1 属性配置

SpringBoot通过配置文件application.properties就可以修改默认的配置,通过键值对修改

修改服务器端口: 将8080端口,改为80默认端口

server.port=80

关闭运行日志图表(banner)

spring.main.banner-mode=off

设置运行日志的显示级别
debug -》error -》 info

logging.level.root=debug

3.2 配置文件分类

三种配置文件格式

  • application.properties(properties格式)
server.port=80
  • application.yml(yml格式)(主流格式
server:
  port: 81
  • application.yaml(yaml格式)
server:
  port: 82

​ 3个文件的加载优先顺序是什么

application.properties  >  application.yml  >  application.yaml

3.3 yaml文件

在这里插入图片描述
yaml语法规则:

  1. 大小写敏感
  2. 属性层级关系使用多行描述,每行结尾使用冒号结束
  3. 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
  4. 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  5. #号 表示注释
subject:  #数组
	- Java
	- 前端
	- 大数据
enterprise:
	name: itcast
    age: 16
    subject:
    	- Java
        - 前端
        - 大数据
likes: [王者荣耀,刺激战场]			#数组书写缩略格式
users:							 #对象数组格式一
  - name: Tom
   	age: 4
  - name: Jerry
    age: 5
users:							 #对象数组格式二
  -  
    name: Tom
    age: 4
  -   
    name: Jerry
    age: 5			    
users2: [ {
    name:Tom , age:4 } , {
    name:Jerry , age:5 } ]	#对象数组缩略格式

数据前面要加空格与冒号隔开

3.4 yaml数据读取

3.4.1 读取单一数据

yaml中保存的单个数据,可以使用Spring中的注解直接读取,使用@Value可以读取单个数据,属性名引用方式:${一级属性名.二级属性名……}

在这里插入图片描述
总结

  1. 使用@Value配合SpEL读取单个数据
  2. 如果数据存在多层级,依次书写层级名称即可

3.4.2 读取全部数据

pringBoot提供了一个对象,能够把所有的数据都封装到这一个对象中,这个对象叫做Environment,使用自动装配注解可以将所有的yaml数据封装到这个对象中
在这里插入图片描述
总结

  1. 使用Environment对象封装全部配置信息
  2. 使用@Autowired自动装配数据到Environment对象中

3.4.3 读取对象数据

创建类用于封装下面的对象
由spring帮我们去加载数据到对象中, 一定要告诉spring加载这组信息
使用时候从spring中直接获取信息使用

对象类:

  1. 定义数据模型封装yaml文件中对应的数据
  2. 定义为Spring管控的bean @Component
  3. 指定加载的数据@ConfigurationProperties(prefix="enterprise")在这里插入图片描述
    在这里插入图片描述

总结

  1. 使用@ConfigurationProperties注解绑定配置信息到封装类中
  2. 封装类需要定义为Spring管理的bean,否则无法进行属性注入

3.4.4 yaml文件中的数据引用

​ 如果你在书写yaml数据时,经常出现如下现象,比如很多个文件都具有相同的目录前缀

center:
	dataDir: /usr/local/fire/data
    tmpDir: /usr/local/fire/tmp
    logDir: /usr/local/fire/log
    msgDir: /usr/local/fire/msgDir

或者

center:
	dataDir: D:/usr/local/fire/data
    tmpDir: D:/usr/local/fire/tmp
    logDir: D:/usr/local/fire/log
    msgDir: D:/usr/local/fire/msgDir

​ 这个时候你可以使用引用格式来定义数据,其实就是搞了个变量名,然后引用变量了,格式如下:

baseDir: /usr/local/fire
	center:
    dataDir: ${baseDir}/data
    tmpDir: ${baseDir}/tmp
    logDir: ${baseDir}/log
    msgDir: ${baseDir}/msgDir

​ 还有一个注意事项,在书写字符串时,如果需要使用转义字符,需要将数据字符串使用双引号包裹起来

lesson: "Spring\tboot\nlesson"

总结

  1. 在配置文件中可以使用${属性名}方式引用属性值
  2. 如果属性中出现特殊字符,可以使用双引号包裹起来作为字符解析

4. 整合第三方技术

  1. 导入对应的starter
  2. 配置相关信息

4.1 整合JUnit

如果当前测试类在引导类所在的包,或者子包下的话,可以成功测试,否则就需要加 引导类的类名@SpringBootTest(classes = Springboot04JunitApplication.class)

原因是因为测试类需要拿到容器里面的bean,容器由配置类里面的run方法创建,所以需要去找配置类

@SpringBootTest
class Springboot04JunitApplicationTests {
   
    //注入你要测试的对象
    @Autowired
    private BookDao bookDao;
    @Test
    void contextLoads() {
   
        //执行要测试的对象对应的方法
        bookDao.save();
        System.out.println("two...");
    }
}

在这里插入图片描述

总结

  1. 导入测试对应的starter
  2. 测试类使用@SpringBootTest修饰
  3. 使用自动装配的形式添加要测试的对象
  4. 测试类如果存在于引导类所在包或子包中无需指定引导类
  5. 测试类如果不存在于引导类所在的包或子包中需要通过classes属性指定引导类

4.2 整合MyBatis

MyBatis是干什么的?
SpringMVC框架负责处理浏览器发送的请求,来调用业务逻辑层来处理业务逻辑,根据需求调用持久层进行持久化操作,而这个任务就需要MyBatis来完成。
从连接数据库,到访问并且操作数据库中的数据,最终将结构返回给业务层,再由SpringMVC将结果 响应到浏览器渲染页面。 这个过程中,各个框架相互配合,共同实现一个完整的需求。

MyBatis工作时,需要哪些东西?

  • 核心配置:数据库连接相关信息(连什么?连谁?什么权限)
  • 映射配置:SQL映射(XML/注解)

步骤①:创建模块时勾选要使用的技术,MyBatis,由于要操作数据库,还要勾选对应数据库或者手工导入对应技术的starter,和对应数据库的坐标

<dependencies>
    <!--1.导入对应的starter-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

步骤②:配置数据源相关信息,没有这个信息你连接哪个数据库都不知道

#2.配置相关信息
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm_db
    username: root
    password: root

​ 完了,就这么多,没了。有人就很纳闷,这就结束了?对,这就结束了,SpringBoot把配置中所有可能出现的通用配置都简化了。下面就可以写一下MyBatis程序运行需要的Dao(或者Mapper)就可以运行了

实体类

public class Book {
   
    private Integer id;
    private String type;
    private String name;
    private String description;
}

映射接口(Dao)

@Mapper
public interface BookDao {
   
    @Select("select * from tbl_book where id = #{id}")
    public Book getById(Integer id);
}

测试类

@SpringBootTest
class Springboot05MybatisApplicationTests {
   
    @Autowired
    private BookDao bookDao;
    @Test
    void contextLoads() {
   
        System.out.println(bookDao.getById(1));
    }
}

总结

  1. 整合操作需要勾选MyBatis技术,也就是导入MyBatis对应的starter

  2. 数据库连接相关信息转换成配置

  3. 数据库SQL映射需要添加@Mapper被容器识别到

  4. MySQL 8.X驱动强制要求设置时区

    • 修改url,添加serverTimezone设定
    • 修改MySQL数据库配置
  5. 驱动类过时,提醒更换为com.mysql.cj.jdbc.Driver

4.3 整合MyBatis-Plus

  1. 手工添加MyBatis-Plus对应的starter
  2. 数据层接口使用BaseMapper简化开发
  3. 需要使用的第三方技术无法通过勾选确定时,需要手工添加坐标

4.4 整合Druid

  1. 整合Druid需要导入Druid对应的starter
  2. 根据Druid提供的配置方式进行配置
  3. 整合第三方技术通用方式
    • 导入对应的starter
    • 根据提供的配置格式,配置非默认值对应的配置项

5. SSMP整合综合案例

  1. 实体类开发————使用Lombok快速制作实体类
  2. Dao开发————整合MyBatisPlus,制作数据层测试
  3. Service开发————基于MyBatisPlus进行增量开发,制作业务层测试类
  4. Controller开发————基于Restful开发,使用PostMan测试接口功能
  5. Controller开发————前后端开发协议制作
  6. 页面开发————基于VUE+ElementUI制作,前后端联调,页面数据处理,页面消息处理
    • 列表
    • 新增
    • 修改
    • 删除
    • 分页
    • 查询
  7. 项目异常处理
  8. 按条件查询————页面功能调整、Controller修正功能、Service修正功能

0.模块创建

pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

application.yml

server:
  port: 80

1.实体类开发

import lombok.Data;
@Data
public class Book {
   
    private Integer id;
    private String type;
    private String name;
    private String description;
}
  1. 实体类制作
  2. 使用lombok简化开发
    • 导入lombok无需指定版本,由SpringBoot提供版本
    • @Data注解

2.数据层开发——基础CRUD

步骤①:导入MyBatisPlus与Druid对应的starter,当然mysql的驱动不能少

<dependencies>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

步骤②:配置数据库连接相关的数据源配置

server:
  port: 80

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
      username: root
      password: root

步骤③:使用MP的标准通用接口BaseMapper加速开发,别忘了@Mapper和泛型的指定

@Mapper
public interface BookDao {
   

    @Select
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值