springboot(一)

基础

1.介绍与入门

1.1介绍

  • SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程
    1. Spring程序缺点
      1. 依赖设置繁琐
        • 以前写Spring程序,使用的技术都要自己一个一个的写,现在一个坐标搞定
      2. 配置繁琐
        • 以前写配置类或者配置文件,然后用什么东西就要自己写加载bean这些东西,现在什么都不用写
    2. SpringBoot程序的核心功能及优点
      1. 起步依赖(简化依赖配置)
        • 依赖配置的书写简化就是靠这个起步依赖达成的
      2. 自动配置(简化常用工程相关配置)
        • 配置过于繁琐,使用自动配置就可以做响应的简化,但是内部还是很复杂的
      3. 辅助功能(内置服务器,……)
        • 除了上面的功能,其实SpringBoot程序还有其他的一些优势

1.2SpringBoot的四种创建方式

①idea官方创建

  1. 创建新模块→Spring Initializr

    • 配置相关的信息image-20230202184057558
    • 选择的java版本和电脑上安装的jdk版本对应即可,但是最低要求为jdk8
    • 点击下一步时,idea需要为联网状态,否则无法跳转到下一页,只会一直转圈圈
  2. 选择当前模块需要使用的技术集

    • 右下角出现新的内容项即为勾选成功image-20230202185136331
  3. 创建控制器类

    • @RestController
      @RequestMapping("/books")
      public class BookController {
          @GetMapping
          public String getById(){
              System.out.println("springboot--测试----11111");
              return "springboot--测试----11111";
          }
      }
      
  4. 运行自动生成的application类

  5. 然后打开浏览器,输入http://localhost:8080/books访问即可

②官网创建

  1. 打开Spring的官网,打开SpringBoot的目录https://spring.io/projects/spring-boot,拉到底下
    • 点击蓝色的字体image-20230202190444660
  2. 这里和idea创建的流程一样
    • image-20230202190609517
  3. 点击CENERATE
    • image-20230202190841861
    • 下载之后就是一个springboot过程文件夹的压缩包了
  4. 解压缩此文件后,得到工程目录,在Idea中导入即可

③idea阿里云创建

  1. 创建新模块→Spring Initializr
  2. 其他配置和idea官方的创建一致
    • 阿里云提供的工程创建地址初始化完毕后和实用SpringBoot官网创建出来的工程略有区别。
    • 主要是在配置文件的形式上有区别。

④手工创建(无需联网)

  1. 创建一个maven项目

  2. 参照标准SpringBoot工程的pom文件,书写自己的pom文件

    • <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>3.0.2</version>
          </parent>
          <artifactId>SpringBoot</artifactId>
          <groupId>com.example</groupId>
          <version>0.0.1-SNAPSHOT</version>
          <modelVersion>4.0.0</modelVersion>
      
          <properties>
              <maven.compiler.source>17</maven.compiler.source>
              <maven.compiler.target>17</maven.compiler.target>
          </properties>
      
      </project>
      
    • 需要用什么技术集就将它的依赖导入即可

  3. 创建一个Application类.将application的代码写上

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

1.3隐藏指定文件/文件夹

  1. 打开设置
  2. EditorFile TypesIgnored Files and Folders
  3. 输入要隐藏的名称,支持*号通配符,点击确认即可

1.4简化操作的方面体现

①parent

  1. SpringBoot将所有的技术版本的常见使用方案给整理出来,以后开发者使用时直接用它提供的版本方案称为parent
  2. parent自身具有很多个版本,每个parent版本中包含有几百个其他技术的版本号,不同的parent间使用的各种技术的版本号有可能会发生变化。当开发者使用某些技术时,直接使用SpringBoot提供的parent就行了,由parent帮助开发者统一的进行各种技术的版本管理
  3. parent定义出来以后,并不是直接使用的,仅仅给了开发者一个说明书,但是并没有实际使用

②starter

  1. SpringBoot把所有的技术使用的固定搭配格式都给开发出来称为starter
  2. starter定义了使用某种技术时对于依赖的固定搭配格式,也是一种最佳解决方案,使用starter可以帮助开发者减少依赖配置

③starter与parent的区别

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

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

  3. 实际开发应用方式

    1. 实际开发中如果需要用什么技术,先去找有没有这个技术对应的starter

      • 如果有对应的starter,直接写starter,而且无需指定版本,版本由parent提供
      • 如果没有对应的starter,手写坐标即可
    2. 实际开发中如果发现坐标出现了冲突现象,确认你要使用的可行的版本号,使用手工书写的方式添加对应依赖,覆盖SpringBoot提供给我们的配置管理

      • 方式一:直接写坐标

      • 方式二:覆盖中定义的版本号,就是下面这堆东西了,哪个冲突了覆盖哪个就OK了

        <properties>
            <activemq.version>5.16.3</activemq.version>
            <aspectj.version>1.9.7</aspectj.version>
            <assertj.version>3.19.0</assertj.version>
            <commons-codec.version>1.15</commons-codec.version>
            <commons-dbcp2.version>2.8.0</commons-dbcp2.version>
            <commons-lang3.version>3.12.0</commons-lang3.version>
            <commons-pool.version>1.6</commons-pool.version>
            <commons-pool2.version>2.9.0</commons-pool2.version>
            <h2.version>1.4.200</h2.version>
            <hibernate.version>5.4.32.Final</hibernate.version>
            <hibernate-validator.version>6.2.0.Final</hibernate-validator.version>
            <httpclient.version>4.5.13</httpclient.version>
            <jackson-bom.version>2.12.4</jackson-bom.version>
            <javax-jms.version>2.0.1</javax-jms.version>
            <javax-json.version>1.1.4</javax-json.version>
            <javax-websocket.version>1.1</javax-websocket.version>
            <jetty-el.version>9.0.48</jetty-el.version>
            <junit.version>4.13.2</junit.version>
        </properties>
        

④引导类

  1. SpringBoot本身是为了加速Spring程序的开发的,而Spring程序运行的基础是需要创建自己的Spring容器对象(IoC容器)并将所有的对象交给Spring的容器管理,也就是一个一个的Bean。

  2. SpringBoot加速开发Spring程序,当前这个类运行后就会产生一个Spring容器对象,并且可以将这个对象保存起来,通过容器对象直接操作Bean。

    • @SpringBootApplication
      public class Springboot0101QuickstartApplication {
          public static void main(String[] args) {
              ConfigurableApplicationContext ctx = SpringApplication.run(Springboot0101QuickstartApplication.class, args);
              BookController bean = ctx.getBean(BookController.class);
              System.out.println("bean======>" + bean);
          }
      }
      
  3. 其实SpringBoot程序启动还是创建了一个Spring容器对象。这个类在SpringBoot程序中是所有功能的入口,称这个类为引导类

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

⑤内嵌tomcat

  1. 内嵌Tomcat定义位置

    • starter-web里面导入了一个核心的坐标,tomcat-embed-core,叫做tomcat内嵌核心。就是这个东西把tomcat功能引入到了我们的程序中。
  2. 内嵌Tomcat运行原理

    • tomcat服务器运行其实是以对象的形式在Spring容器中运行的
    • 运行的是上面的tomcat内嵌核心
  3. 更换内嵌Tomcat

    • SpringBoot提供了3款内置的服务器

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

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

      • undertow:负载性能勉强跑赢tomcat

    • <!--直接添加坐标即可,以jetty为例-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-jetty</artifactId>
      </dependency>
      

2.基础配置

2.1属性配置

2.2配置文件分类

  1. SpringBoot除了支持properties格式的配置文件,还支持另外两种格式的配置文件。

    • properties
    server.port=80
    
    • yml
    server:
      port: 81
    
    • yaml
    server:
      port: 82
    
    • yml和yaml文件格式就是一模一样的,只是文件后缀不同
    • port:的后面要有一个空格
  2. 配置文件优先级

    1. properties  >  yml  >  yaml
      
    2. 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

  3. 自动提示功能消失

    1. 打开设置,【Files】→【Project Structure...】
    2. 在弹出窗口中左侧选择【Facets】,右侧选中Spring路径下对应的模块名称,也就是自动提示功能消失的那个模块
    3. 点击Customize Spring Boot按钮
    4. 选择添加配置文件,然后选中要作为配置文件的具体文件就OK了

2.3yaml文件

  • SpringBoot的配置以后主要使用yml结尾的这种文件格式,并且在书写时可以通过提示的形式加载正确的格式。

    1. YAML(YAML Ain't Markup Language),一种数据序列化格式。具有容易阅读、容易与脚本语言交互、以数据为核心,重数据轻格式的特点。

    2. 常见的文件扩展名有两种:

      • .yml格式(主流)

      • .yaml格式

        对于文件自身在书写时,具有严格的语法格式要求

        1. 大小写敏感
        2. 属性层级关系使用多行描述,每行结尾使用冒号结束
        3. 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
        4. 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
        5. 号 表示注释

        6. yaml格式中也可以表示数组,在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

2.4yaml数据读取

  1. 读取单一数据

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

      • 使用@Value注解时,要将该注入写在某一个指定的Spring管控的bean的属性名上方image-20211126180433356
    2. 读取全部数据

      • 把所有的数据都封装到这一个对象中,这个对象叫做Environment,使用自动装配注解可以将所有的yaml数据封装到这个对象中image-20211126180738569
      • 数据封装到了Environment对象中,获取属性时,通过Environment的接口操作进行,具体方法时getProperties(String),参数填写属性名即可
    3. 读取对象数据

      1. 首先定义一个对象,并将该对象纳入Spring管控的范围,也就是定义成一个bean,然后使用注解@ConfigurationProperties指定该对象加载哪一组yaml中配置的信息。image-20211126181126382

      2. 这个@ConfigurationProperties必须告诉他加载的数据前缀是什么,这样当前前缀下的所有属性就封装到这个对象中。记得数据属性名要与对象的变量名一一对应啊,不然没法封装。其实以后如果你要定义一组数据自己使用,就可以先写一个对象,然后定义好属性,下面到配置中根据这个格式书写即可。

        image-20211126181423432

    4. yaml文件中的数据引用

      • baseDir: /usr/local/fire
        	center:
            dataDir: ${baseDir}/data
            tmpDir: ${baseDir}/tmp
            logDir: ${baseDir}/log
            msgDir: ${baseDir}/msgDir
        
      • 如果需要使用转义字符,需要将数据字符串使用双引号包裹起来

        lesson: "Spring\tboot\nlesson"
        

3.SSMP整合

3.1整合JUnit

  1. SpringBoot将没有技术含量的内容书写进行开发简化,能走默认值的走默认值,能不写的就不写

    • @SpringBootTest
      class Springboot04JunitApplicationTests {
          //注入你要测试的对象
          @Autowired
          private BookDao bookDao;
          @Test
          void contextLoads() {
              //执行要测试的对象对应的方法
              bookDao.save();
              System.out.println("two...");
          }
      }
      
  2. 加载的配置类或者配置文件是前面启动程序使用的引导类。手工指定引导类

    1. 在注解@SpringBootTest中添加classes属性指定配置类

      @SpringBootTest(classes = Demo3.class)
      
    2. 使用@ContextConfiguration注解进行

      @ContextConfiguration(classes = Demo3.class)
      

3.2.整合MyBatis

  1. 创建模块时勾选要使用的技术

    1. MyBatis

    2. 对应数据库

    3. 手工导入对应的技术的starter和数据库的坐标

      <dependencies>
          <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
          username: root
          password: 1234
      
  3. 创建实体类

    • public class Book {
          private Integer id;
          private String type;
          private String name;
          private String description;
      }
      
  4. 创建Dao

    • @Mapper
      public interface BookDao {
          @Select("select * from tbl_book where id = #{id}")
          public Book getById(Integer id);
      }
      
  5. 创建测试类

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

3.3整合MyBatis-Plus

  1. 导入对应的starter

    • <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.4.3</version>
      </dependency>
      
    • 如果使用的是官网的方式创建的没有mybatisPlus的选项勾选的,阿里云的创建方式有

  2. 配置数据源相关信息

    • spring:
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ssm
          username: root
          password: 1234
      
  3. 创建实体类

    • public class Book {
          private Integer id;
          private String type;
          private String name;
          private String description;
      }
      
  4. 创建Dao

    • @Mapper
      public interface BookDao {
          @Select("select * from tbl_book where id = #{id}")
          public Book getById(Integer id);
      }
      
  5. 创建测试类

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

3.4整合Druid

  1. 在没有指定数据源时,配置如下

    • spring:
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ssm?serverTimezone=Asia/Shanghai
          username: root
          password: 1234
      
    • 此时虽然没有指定数据源,但是SpringBoot帮我们选了一个它认为最好的数据源对象,这就是HiKari。

  2. 更换数据源

    1. 导入对应的坐标(注意,是坐标,此处不是starter)

      <dependencies>
          <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>druid</artifactId>
              <version>1.1.16</version>
          </dependency>
      </dependencies>
      
    2. 修改配置,在数据源配置中有一个type属性,专用于指定数据源类型

      spring:
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
          username: root
          password: 1234
          type: com.alibaba.druid.pool.DruidDataSource
      
posted @   22-10-21  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示