springBoot01-基础篇

本文详细介绍了SpringBoot的基础知识,包括创建入门程序、REST风格、基本配置及整合MyBatis。讲解了SpringBoot的启动类、内嵌Tomcat的工作原理,REST风格的请求路径参数,以及如何从YAML配置文件读取数据。同时,提供了SpringBoot整合MyBatis的实例,展示了如何进行数据库查询操作。
摘要由CSDN通过智能技术生成

基础篇:

  1. 会用,会创建SpringBoot
  2. 将相关技术进行整合。

应用篇

  1. 补全知识树
  2. 加强应用
  3. 提高能力、解决能力

原理篇

  1. 提高对知识的理解程度
  2. 自定义开发boot组件开发

番外篇

  1. 丰富视野
  2. 提升方案能力

一、创建SpringBoot入门程序

  1. 创建新模块,选择Spring Initializr,并配置模块相关的基础属性。必须联网才能进行快速创建,因为idea需要去访问http://start.spring.io
  2. 选择当前模块需要使用的技术集,启动后自动引入依赖.pom文件。
  3. 指定maven版本,指定maven仓库。
  4. 写一个controller类,直接运行SpringBootApplication注解的类。
  5. 启动成功后,可以看到日志:有服务器启动、端口。

1、创建程序

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

写一个Controller类即可,运行springBoot

package com.example.controller;
//@ResponseBody  所以一个注解即可,RestController
/*
* 流程:
*   写一个***Controller控制器,专门用来处理请求(RestController)
*   而run专门用来处理"/hello"请求。
*   最终返回的数据,会写给浏览器
*
* */
@RestController // 包含controller 和ResponseBody
public class HelloController {
    /*
    * 要给浏览器返回字符串,
    * SpringMVC注解:@RequestMapping来映射请求,
    * 希望浏览器给我们发送hello请求
    * 然后我们处理,处理完了以后,给浏览器返回字符串"hello spring Boot"
    *
    * 由于我们要给浏览器返回字符串,所以要加入:@ResponseBody。
    * 由于HelloController这个类,要处理很多请求,都要给浏览器返回字符串
    *  所以把@ResponseBody写在类上面:
    *   代表类上面每一个方法,返回的数据,是直接写给浏览器的,而不是调转到某个页面。
    *
    * */
    // request请求,mapping映射
    @RequestMapping("/hello")
    public String run(){
        return "Springboot run...";
    }
}

运行SpringBoot 的启动类:

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

// 前两步骤导入parent和web依赖,第三步就可以写程序了

/*
 * 注解@SpringBootApplication:
 *  告诉springboot这是一个springboot应用
 * 那么这就是一个主程序类,相当于所有程序的入口
 *
 *主程序下面的包及其下面的所有子包,都会默认扫描进来
 * 所以连包扫描都不用配置,Controller就会进来。
 *
 *  */
@SpringBootApplication
public class Springboot01HelloworldApplication {

    public static void main(String[] args) {
        //springboot应用跑起来,把主类加载进来。
        //调用run会返回:IOC容器,容器包含了当前应用的所有组件。
        //ConfigurableApplicationContext run =
          SpringApplication.run(Springboot01HelloworldApplication.class);

        //2.查看容器中的组件的名字
        //String[] beanDefinitionNames = run.getBeanDefinitionNames();
//        所以说:Springboot帮我们配置好了,所有web开发的场景
    }
}

在这里插入图片描述

在这里插入图片描述

2、隐藏文件夹

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

3、入门案例解析:

配置1.parent定义坐标版本号,从而减少依赖冲突

  1. 开发SpringBoot程序要继承spring-boot-starter-parent
  2. spring-boot-starter-parent中定义了若干个依赖管理
  3. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
  4. 继承parent的形式也可以采用依赖的形式实现效果。
  • 我们在创建springboot项目时,继承了spring-boot-starter-parent
    在这里插入图片描述
  • spring-boot-starter-parent继承了spring-boot-dependencies
    在这里插入图片描述
  • spring-boot-starter-parent
    <properties:定义了若干个版本。进行了统一版本管理。
    <dependencyManagement:定义了坐标依赖管理,并且引用了的版本
    在这里插入图片描述
  • 用于比较两个文件的操作:compare files
    在这里插入图片描述

配置2.starter定义依赖坐标,从而减少依赖配置

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

  • starter是:包含了若干个坐标定义的pom文件,其中包含若干个依赖信息。从而达到开始配置

  • parent定义了许多版本谁在用?
    直接在项目的pom文件中,写入使用的依赖,版本号在parent里面已经定义好了。

  • 依赖传递:导入starter,starter会将很多依赖进行导入。
    在这里插入图片描述

在这里插入图片描述

3.引导类

springBoot的引导类是boot工程的执行入口,运行main方法就可以启动项目
springBoot工程运行后初始化spring容器,扫描引导类所在包加载bean

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

// 前两步骤导入parent和web依赖,第三步就可以写程序了

/*
 * 注解@SpringBootApplication:
 *  告诉springboot这是一个springboot应用
 * 那么这就是一个主程序类,相当于所有程序的入口
 *
 *主程序下面的包及其下面的所有子包,都会默认扫描进来
 * 所以连包扫描都不用配置,Controller就会进来。
 *
 *  */
@SpringBootApplication
public class Springboot01HelloworldApplication {

    public static void main(String[] args) {
        //springboot应用跑起来,把主类加载进来。
        //调用run会返回:IOC容器,容器包含了当前应用的所有组件。
        //ConfigurableApplicationContext run =
          SpringApplication.run(Springboot01HelloworldApplication.class);

        //2.查看容器中的组件的名字
        //String[] beanDefinitionNames = run.getBeanDefinitionNames();
//        所以说:Springboot帮我们配置好了,所有web开发的场景
    }
}

4、内嵌tomcat

启动起来的服务器,之所以能用,就是因为内嵌了Tomcat。
Tomcat是用java写的,所以是靠对象运行,那么把这个对象交个spring管理。所以将Tomcat执行过程抽取出来,变成对象,交给spring容器去管理。
从而spring容器中有一个Tomcat对象,所以说所有的代码需要在Tomcat对象中运行,

二、REST风格

1、简介

  • REST(Representational State Transfer),表现形式状态转换。说白了就是:【访问网络格式】。
    使用RESTful的形式进行开发,就是再说访问的格式是:REST风格进行的开发

  • 优点:
    隐藏资源的访问行为,无法通过地址得知对资源是何种操作
    书写简化

在这里插入图片描述
PS:描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而非单个资源,例如Users、Books

2、请求路径参数

  • @PathVariable:用来接受路径变量
    当参数很少,只有1个,就采用@PathVariable接受请求路径变量,通常用来传递id值。
    比如前端传来一个id,根据id来删除。

  • @RequestBody:用来接受JSON数据,【请求体的参数】
    发送请求参数超过1个,以JSON格式为主,@RequestBody应用较广。
    比如前端传来一个实体类,进行新增操作。

  • @RequestParam用于接手url地址传参或表单传参。用于非JSON格式。目前应用较少
    比如分页查询,在controller默认当前页数为1,展示10条数据。

3、简化注解:

  • @RestController:替代Controller、ResponseBody两个注解的组合功能
  • 类型:类注解
  • 位置:基于SpringMVC的RESTful开发控制器类定义的上方。

  • 名称:@GetMapping/@PutMapping/@DeleteMapping/@PostMapping
  • 类型:方法注解
  • 作用:设置当前控制器方法请求访问路径与请求动作,每一种对应一个请求动作。例如@GetMapping对应查找查询
  • 在这里插入图片描述

在这里插入图片描述

三、基本配置:

1、属性配置 properties/yam/yaml

  • 对于SpringBoot的配置,所有的信息都写在一个配置文件里面【包括:.properties/.yam/.yaml】

官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties

  • springboot 中导入对应的starter后,提供对应配置属性

  • 只需要写关键字即可,就会有相应的提示

  • yml格式是主流

  • 优先级:properties > yml > yaml
    在这里插入图片描述

  • 属性提示消息消失的方案:
    之所以能提供提示是因为:SpringBoot在idea环境下提供的功能失效了,而提示功能是idea提供的。

指定SpringBoot配置文件
Setting → Project Structure → Facets
选中对应项目/工程
Customize Spring Boot
选择配置文件
在这里插入图片描述

  • yaml格式的书写
    容易阅读、容易脚本语言交互、以数据为核心

 大小写敏感
 属性层级关系使用多行描述,每行结尾使用冒号结束
 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
 # 表示注释
 核心规则:数据前面要加空格与冒号隔开

boolean: TRUE #TRUE,true,True,FALSE,false,False均可
float: 3.14 #6.8523015e+5 #支持科学计数法
int: 123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
null: ~ #使用~表示null
string: HelloWorld #字符串可以直接书写
string2: "Hello World" #可以使用双引号包裹特殊字符
date: 2018-02-17 #日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区

数组。对象数组。
在这里插入图片描述

2、读取yml数据

方法一:读取单个数据:

在这里插入图片描述

    //单一格式
    @Value("${name}")
    private String name1;
    // 数组
    @Value("${subject[1]}")
    private String name2;

    //对象格式
    @Value("${user.addres}")
    private String name3;

    //对象数组格式
    @Value("${users[1].name}")
    private String name4;
 
  • yml中变量引用:
    在这里插入图片描述

方法二:读取全部属性数据:

//创建env对象,会对yml所有数据进行封装
    @Autowired
    private Environment evn;

在这里插入图片描述

方法三:局部读取数据-》用的最多。

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

1、定义数据模型封装yaml文件对应的数据
2、定义为spring管控的bean @Component
而这个模型要加载的数据在yml配置文件中,
配置文件是给boot用的。其实springboot还是spring程序,
boot是为了加速spring程序开发
3、指定加载的数据。配置属性 @configurationProperties(“数据名字”)
配置文件中数据很多,如何只加载一部分呢?
添加注解 配置属性 Properties


@Component
@Data
@ConfigurationProperties("datasource")
public class MyDatasource {
	//要和yml的属性一模一样: drive--drive
    private String drive;
    private String url;
    private String username;
    private String password;
}
------yml:----------
datasource:
  drive: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost/springboot
  username: root
  password: root
    //局部读取数据
    @Autowired
    private MyDatasource mydatasource;

System.out.println(mydatasource.toString());

在这里插入图片描述

四、整合技术:

1、SpringBoot整合MyBatis

  1. 创建SpringBoot项目,并添加mysql依赖即可。(中国开发的,目前还没有被Spring收录)
  2. 添加依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
  1. 在application.yml中添加,导入drive信息:
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/test

例子:比如说去数据库进行一个单表查询语句:1-5步骤:

数据库:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) DEFAULT NULL,
`password` VARCHAR(50) DEFAULT NULL,
`name` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');
INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');

1 定义实体类:

@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String name;

  1. 定义数据层接口与映射配置,继承BaseMapper
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

extends BaseMapper 其中定义好了单表的增删改查
在这里插入图片描述

  1. 写service:

接口:  只需要继承Iservice接口即可
package com.itheima.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.domain.User;
public interface UserService  extends IService<User>   {
}

-----impl:继承接口(Mapper,pojo实体类) implements 接口

@Service
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserService {
}

  1. controller:
@RestController
@RequestMapping
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/")
    public List<User> saveAll(){
        List<User> list = userService.list();
        return list;
    }
}
  1. 测试:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值