SpringBoot

SpringBoot,第1张

SpringBoot SpringBoot

什么是Spring

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

Spring是如何简化Java开发的?

  1. 基于POJO的轻量级和最小侵入性编程
  2. 通过IOC,依赖注入(DI)和面向接口实现松耦合
  3. 基于切面(AOP)和惯例进行声明式编程
  4. 通过切面和模板减少样式代码
1、什么是SpringBoot?

简而言之,他就是一个Javaweb的开发框架,和SpringMVC类似, 对比其他Javaweb框架的好处,官方说是简化开发,you can just run,能迅速开发web应用。

所有的技术框架的发展似乎都遵循了一条主线规律:从一个复杂应用场景衍生一种规范框架,人们只需要进行各种配置而不需要自己去实现它,这时候强大的配置功能成了优点;发展到一定程度之后,人们根据实际生产应用情况,选取其中实用功能和设计精华,重构出一些轻量级的框架;之后为了提高开发效率,嫌弃原先的各类配置过于麻烦,于是开始提倡约定大于配置,进而衍生出一些一站式的解决方案

这就是Java企业级应用:J2EE–>Spring—>SpringBoot的过程

简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,SpringBoot整合了所有的框架

SpringBoot主要优点:

  • 起步依赖(简化依赖配置)
  • 自动配置(简化常用工程相关配置)
  • 开箱即用,提供各种默认配置来简化项目配置
  • 辅助功能(内嵌式容器简化Web项目)
  • 没有冗余代码生成和XML配置的要求

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

2、快速上手

创建SpringBoot入门程序

  1. 创建新模块,选择Spring Initializr,并配置模块相关基础信息

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

  3. 开发控制器类

    // Rest模式
    @RestController
    @RequestMapping("/hello")
    public class BookController {
        @GetMapping
        public String hello() {
            System.out.println("springboot is running...");
            return "hello springboot.";
        }
    }
    
  4. 运行自动生成的Application类

注:基于idea开发SpringBoot程序需要确保联网且能够加载到程序框架结构

starter

  • SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的

parent

  • 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
  • spring-boot-starter-parent各版本间存在着诸多坐标版本不同

在实际开发中,使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本V

主启动类(xxxApplication)

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

Boot内置了三款服务器分别是

tomcat(默认):apache出品,粉丝多,应用面广,负载了若干较重的组件

jetty:更轻量级,负载性能远不及tomcat

undertow:负载性能勉强跑赢tomcat

内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理

2.1、基础配置

SpringBoot默认配置文件application. properties,通过键值对配置对应属性

属性配置

# 服务器端口配置
server.port=80

# 关闭运行日志图标(banner)
spring.main.banner-mode=off

# 设置日志相关
logging.level.root=error

SpringBoot内置属性查询

配置文档

属性配置方式

SpringBoot提供了3种配置文件的格式

  • properties (传统格式/默认格式)
  • yml (主流格式)
  • yaml
# application.properties
server.port=80
# application.yml
server:
    port: 81
# application.yaml
server:
    port: 82

SpringBoot配置文件加载优先级

  • application.properties(最高)
  • application.yml
  • application.yaml(最低)

不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

yaml

  • YAML (YAML Ain’t Markup Language) ,一种数据序列化格式
  • 优点
    • 容易阅读
    • 容易与脚本语言交互
    • 以数据为核心,重数据轻格式

YAML文件扩展名

  • .yml(主流)
  • .yaml

核心规则:数据前面要加空格与冒号隔开

yaml数据读取

使用@Value读取单个数据,属性名引用方式: ${一级属性名.二级属性名…}

country: china
server:
  port: 8081
user:
  name: xiaozhang
  hobby:
    - music
    - girl
    - swim
# 对象数组缩略格式
user3: [ { name: liming,age: 25 },{ name: xiaolin,age: 26 } ] 
// 读取yml数据中的单一数据        使用SPEL表达式取值
@Value(value = "${country}")
private String country1;

@Value(value = "${user.hobby[1]}")
private String hooby1;

@Value(value = "${user3[1].name}")
private String name1;

@Value(value = "${server.port}")
private String port;

封装全部数据到Environment对象中

// 使用自动装配将所有的数据封装到一个对象的Environment中
@Autowired
private Environment env;

@GetMapping
public String getAllBook() {
    // 取值
    System.out.println(env.getProperty("server.port"));
    System.out.println(env.getProperty("user3[1].name"));
    return "SpringBoot is running...";
}

缺陷:把全部数据都封装了,有时只需要一部分数据

自定义对象封装指定数据

person:
  name: xiaozhao
  age: 22
  gender: female
  birth: 2003-05-21
  party: true
  hobby: [boy,music,housework]
// 1、定义数据模型封装yml文件中对应的数据  yml和实体类属性一一对应
// 2、定义为spring管控的bean
@Component
@Data
// 3、指定加载的数据
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private String gender;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birth;
    private String party;
    private String[] hobby;
}

注:封装类必须定义为Spring管理的bean,否则无法进行属性注入

3、整合第三方技术
3.1、整合Mybatis
  1. 创建新模块,选择Spring初始化,并配置模块相关基础信息

  2. 选择当前模块需要使用的技术集(MyBatis、MySQL)

  3. 配置数据源参数

    # 2、配置数据库相关信息
    spring:
      datasource:
        username: root
        password: root
        url: jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
        driver-class-name: com.mysql.cj.jdbc.Driver
    # 设置mybatis相关配置
    mybatis:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.zhang.pojo
    
  4. 编写实体类

  5. 定义数据层接口与映射配置

    @Mapper		//能够被容器识别到
    public interface BookMapper {
        List queryAllBook();
    
        Book queryBookById(@Param("id") Integer id);
    
        Integer addBook(Book book);
    
        Integer delBook(@Param("id") Integer id);
    
        Integer modifyBook(Book book);
    }
    
  6. 编写mapper.xml文件

    
    
    
    
        
            select id, type, name, description
            from mybatis.tbl_book