SpringBoot

2022年05月12日 阅读数:6
这篇文章主要向大家介绍SpringBoot,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1 SpringBoot简介

SpringBoot官网java

1.1.回顾什么是Spring

Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,做者:Rod Johnson 。mysql

Spring是为了解决企业级应用开发的复杂性而建立的,简化开发。git

1.2.Spring是如何简化Java开发的

为了下降Java开发的复杂性,Spring采用了如下4种关键策略:web

一、基于POJO的轻量级和最小侵入性编程,全部东西都是bean;spring

二、经过IOC,依赖注入(DI)和面向接口实现松耦合;sql

三、基于切面(AOP)和惯例进行声明式编程;数据库

四、经过切面和模版减小样式代码,RedisTemplate,xxxTemplate;apache

1.3.什么是SpringBoot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员再也不须要定义样板化的配置。经过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。编程

Spring Boot的主要优势:api

  • 为全部Spring开发者更快的入门
  • 开箱即用,提供各类默认配置来简化项目配置
  • 内嵌式容器简化Web项目
  • 没有冗余代码生成和XML配置的要求

1.4.SpringBoot的核心功能

  • 起步依赖

    起步依赖的本质是一个Maven项目模型,定义对其余库的传递依赖,这些东西加在一块儿,完成指定某个功能

  • 自动配置

    自动配置是指程序启动的时候,Springboot考虑安全/集成/持久化/web等各方面因素,决定配置应该使用哪个,该过程有Spring自动完成

1.5 SpringBoot的优势

  • Create stand-alone Spring applications

    • 建立独立Spring应用
  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)

    • 内嵌web服务器
  • Provide opinionated ‘starter’ dependencies to simplify your build configuration

    • 自动starter依赖,简化构建配置
  • Automatically configure Spring and 3rd party libraries whenever possible

    • 自动配置Spring以及第三方功能
  • Provide production-ready features such as metrics, health checks, and externalized configuration

    • 提供生产级别的监控、健康检查及外部化配置
  • Absolutely no code generation and no requirement for XML configuration

    • 无代码生成、无需编写XML

SpringBoot是简化Spring技术栈的快速开发脚手架

1.六、SpringBoot缺点

  • 人称版本帝,迭代快,须要时刻关注变化
  • 封装太深,内部原理复杂,不容易精通

2 SpringBoot快速入门

2.1代码实现

2.1.1 建立Maven工程

2.1.2 添加Maven依赖

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

2.1.3 编写SpringBoot引导类

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

@SpringBootApplication//标注这是springboot引导类
public class MySpringBootApplacation {
   
   
    public static void main(String[] args) {
   
   
        SpringApplication.run(MySpringBootApplacation.class);
    }
}

2.1.4 编写controller

@Controller
public class helloController {
   
   
  @RequestMapping("/hello")
  @ResponseBody
  public String test(Model model){
   
   
      model.addAttribute("msg","hello");
      return "hello wee";
  }
}

2.1.5 更改端口号

application.yaml

server:
  port: 81

2.1.5 运行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tWCQWK4x-1617005357317)(D:\学习\框架学习\SpringBoot\1.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ghg1Ns48-1617005357334)(D:\学习\框架学习\SpringBoot\1616892058282.png)]

https://www.yuque.com/atguigu/springboot/na3pfd

https://gitee.com/leifengyang/springboot2

2.2 热部署设置

2.2.1导入依赖

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
</dependency>

2.2.2IDEA中打开热部署

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nMn6pGYE-1617005357339)(D:\学习\框架学习\SpringBoot\1616893575082.png)]

2.2.3Ctrl+Shift+Alt+/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kLghL01x-1617005357345)(D:\学习\框架学习\SpringBoot\1616893825760.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6pj9eFf6-1617005357362)(D:\学习\框架学习\SpringBoot\1616893995272.png)]

如今就能够热部署了

3 yaml配置注入

3.1 yaml配置文件简介

yaml文件用于修改SpringBoot自动配置的默认值;SpringBoot在底层都给咱们自动配置好;

  • application.yml

    语法结构 :key=value
    

好比咱们能够在配置文件中修改Tomcat 默认启动的端口号!测试一下!

server.port=8081

之前的配置文件,大多数都是使用xml来配置;好比一个简单的端口配置,咱们来对比下yaml和xml

传统xml配置:

<server>    
    <port>8081<port>
 </server>

yaml配置:

server:  prot: 8080

3.2 yaml文件语法形式

3.2.1 格式

#普通数据的配置
name: zhangsan

#对象的配置
person:
	name: zhangsan #注意此处有空格
	age: 18
	addr: beijing

#行内对象的配置
person:{
   
   name:zhangsan,age:18,addr:beijing}

说明:语法要求严格!

一、空格不能省略

二、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。

三、属性和值的大小写都是十分敏感的。

3.2.2 yaml文件配置配置数组和集合

name: hushaolin
person:
  name: zhangsan
  age: 18
  addr: beijing
#数组
city:
  - beijing #注意行首此处有空格
  - tianjing
  - shanghai

city1: [beijing,tianjing,chongqing,shanghai] #注意city:后面有空格
student:
  - name:tom
    age:18
  - name:luck
    age:21

student1: [{
   
   name:tom,age:18},{
   
   name:luck,age:25}]


#map配置
map:
  key1: value1
  key2: value2

server:
  port: 81

3.2.3 配置文件与属性的映射

(1)经过@value映射

@Controller
public class Quick2Controller {
   
   
    @Value("${name}")
    private String name;

    @RequestMapping("/quick2")
    @ResponseBody
    public String quick2(){
   
   
        //得到配置文件信息
        return "name:"+name;
    }

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CdaxxB8v-1617005357364)(D:\学习\框架学习\SpringBoot\1616931903846.png)]

(2)经过@ConfigurationProperties映射

@Controller
@ConfigurationProperties(prefix = "person")//匹配前缀
public class Quick3Controller {
   
   
    private String name;
    private String addr;

    public String getName() {
   
   
        return name;
    }

    public void setName(String name) {
   
   
        this.name = name;
    }

    public String getAddr() {
   
   
        return addr;
    }

    public void setAddr(String addr) {
   
   
        this.addr = addr;
    }

    @RequestMapping("/quick3")
    @ResponseBody
    public String quick3(){
   
   
        //得到配置文件信
        System.out.println("name:"+name+"address:"+addr);
        return "name:"+name+"  address:"+addr;
    }

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rfqnuq4G-1617005357366)(D:\学习\框架学习\SpringBoot\1616932788187.png)]

4 SpringBoot集成Mybatis

4.1导入 MyBatis 所须要的依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>

4.2导入数据库依赖

 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
 </dependency>

4.3 添加数据库链接信息

application.yml

#数据库链接信息
spring:
    datasource:
        username: root
        password: 123456
        #?serverTimezone=UTC解决时区的报错
        url: jdbc:mysql://localhost:3306/springboot_mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource

4.4 实体类

User.java

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

    public Integer getId() {
   
   
        return id;
    }

    public void setId(Integer id) {
   
   
        this.id = id;
    }

    public String getUsername() {
   
   
        return username;
    }

    public void setUsername(String username) {
   
   
        this.username = username;
    }

    public String getPassword() {
   
   
        return password;
    }

    public void setPassword(String password) {
   
   
        this.password = password;
    }

    public String getName() {
   
   
        return name;
    }

    public void setName(String name) {
   
   
        this.name = name;
    }

    @Override
    public String toString() {
   
   
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

4.5 接口

UserMapper.java

public interface UserMapper {
   
   
    //查询全部用户
    List<User> getUserList();
}

4.6映射文件

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hsl.dao.UserMapper">
    <select id="getUserList" resultType="com.hsl.pojo.User">
        select * from mybatis.user
    </select>
</mapper>

4.7 编写UserController类进行测试

import com.hsl.dao.UserMapper;
import com.hsl.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;


@Controller
public class UserController {
   
   
    @Autowired(required=false)
    private UserMapper userMapper;

    @RequestMapping("/query")
    @ResponseBody
    public List<User> queryUserList(){
   
   
        return userMapper.getUserList();
    }
}

参考资料: 尚硅谷SpringBoot2核心技术与响应式编程
B站视频:黑马Spring Boot(IDEA版)