• 40-SpringBoot


    40-SpringBoot-qianfeng-笔记


    文章目录


    一、SpringBoot介绍

    ①:引言

    • 为了使用SSM框架去开发,准备SSM框架的模板配置。
    • 为了Spring整合第三方框架,单独的去编写xml文件。
    • 导致SSM项目后期xml文件特别多,维护xml文件的成本是很高的。
    • SSM工程部署也是很麻烦,依赖第三方的容器。
    • SSM开发方式是很笨重。

    ②:SpringBoot介绍

    SpringBoot是由Pivotal团队研发的,SpringBoot并不是一门新技术,只是将之前常用的Spring,SpringMVC,data-ipa等常用的框架封装到了一起,帮助你隐藏这些框架的整合细节,实现敏捷开发。
    SpringBoot就是一个工具集

    • 特点
      • SpringBoot项目不需要模板化的配置
      • 在SpringBoot中整合第三方框架时,只需要导入相应的starter依赖包,就自动整合了
      • SpringBoot默认只有一个 .properties的配置文件,不推荐使用xml,采用 .java 的文件去编写配置信息
      • SpringBoot工程在部署时,采用的是jar包的方式,内部自动依赖Tomcat容器,提供了多环境的配置。
      • 后期要学习的微服务框架Springcloud需要建立在SpringBootl的基础上。

    二、SpringBoot快速入门

    ①:快速构建SpringBoot

    1. 选择构建项目的类型
    在这里插入图片描述
    2. 指定SpringBoot依赖和版本
    在这里插入图片描述
    3.第一次创建SpringBoot工程,下载大量依赖,保证,maveni已经配置了阿里云的私服。
    4.
    在这里插入图片描述
    5. 将工程修改为web工程
    在这里插入图片描述
    6. 创建controller包在包下创建一个测试类
    在这里插入图片描述
    @RestController
    public class TestController {
        @GetMapping("/test")
        public String test() {
            return "Hello SpringBoot";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    7.启动SpringBoot
    在这里插入图片描述 在这里插入图片描述

    ②:SpringBoot的目录结构

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

    ③:SpringBoot三种启动方法

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

    1. 运行启动类的main方法即可运行SpringBoot工程
    2. 采用maven的命令去运行SpringBoot工程
    指令:mvn spring-boot:run
    在这里插入图片描述
    3. 采用jar包的方式运行
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    ④:SpringBoot官网创建方式 (补)

    1. 进入官网选择SpringBoot https://spring.io/
    在这里插入图片描述
    2. 一直下滑 找到Spring initializr
    在这里插入图片描述
    3. 填写相关信息
    在这里插入图片描述

    ⑤:使用jetty服务启动程序 (补)

    1. 排除tomcat服务器
    在这里插入图片描述
    <dependency>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-starter-webartifactId>
    
    
      <exclusions>
          <exclusion>
              <groupId>org.springframework.bootgroupId>
              <artifactId>spring-boot-starter-tomcatartifactId>
          exclusion>
      exclusions>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    2. 添加jrtty服务器的依赖
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-jettyartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、SpringBoot常用注解

    ①:@Configuration和@Bean

    之前使用SSM去开发时,在xml文件中编写bean标签。
    但是SpringBoot?不推荐使用xml文件。
    @Configuration注解相当于beansi标签
    @Bean注解相当于bean标签
    id=“方法名|注解中的name属性(优先级更高)”
    class=“方法的返回结果”

    1. 定义一个实体类
    在这里插入图片描述
    @AllArgsConstructor
    @NoArgsConstructor
    @Data
    @ToString
    public class User {
        private int userId;
        private String username;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    2. 创建User的配置类
    在这里插入图片描述
    @RestController  // 代表当前类是一个配置类:相当于标签
    public class UserConfig {
    
        @Bean("user1")  // 构建一个实例,放到spring容器中:相当于标签
        public User getUser(){
            User user = new User(1,"张三");
            return user;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    3. 咋TestController中添加一个新的方法
    在这里插入图片描述
    @RestController
    public class TestController {
    
        @Autowired
       // @Resource(name = "user1")
        private User user;
    
        @GetMapping("/test")
        public String test() {
            return "Hello SpringBoot";
        }
    
        @GetMapping("/user")
        public User user() {
            return user;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    测试结果
    在这里插入图片描述

    ②:@SpringBootApplication

    @SpringBootApplication就是一个组合注解

    • 1: @SpringBootConfiguration就是@Configuration注解,代表启动类就是一个配置类。
    • 2: @nableAutoConfiguration帮你实现自动装配的,SpringBoot工程启动时,运行一个SpringFactoriesL.oader的类,加载META-lNF/spring.factoriesi配置类(已经开启的),通过SpringFactoriesLoader中的load方法,以for循环的方式,一个一个加载。
      • 好处:无需编写大量的整合配置信息,只需要按照SpringBoot提供好了约定去整合即可。
      • 坏处:如果说你导入了一个starter依赖,那么你就需要填写他必要的配置信息。
      • 手动关闭自动装配指定容:@SpringBootApplication(exclude=QuartzAutoConfiguration.class
    • 3: @ComponentScani就相当于

    四、SpringBoot常用配置

    ①:SpringBoot的配置文件格式

    SpringBoot的配置文件支持properties和yml,甚至他还支持json。
    更推荐使用yml文件格式

    • 1.yml文件,会根据换行和缩进帮助咱们管理配置文件所在位置。
    • 2.yml文件,相比properties.更轻量级一些

    yml文件的劣势

    • 1.严格遵循换行和缩进。
    • 2.在填写value时,一定要在:后面跟上空格

    ②:多环境配置

    01. 方式一(使用多个pml文件)

    1. 模拟配置出生产环境和开发环境
    在这里插入图片描述
    2. 直接运行测试
    在这里插入图片描述
    3. 打包测试(再次将打好的jar包复制到桌面)
    运行指令1 :java -jar .\springBoot_01_demo1-0.0.1-SNAPSHOT.jar
    运行指令2 :java -jar .\springBoot_01_demo1-0.0.1-SNAPSHOT.jar --spring.profiles.active=环境名
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    02. 方式二(使用一个pml文件)(补)

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

    03. 方式三:使用peoperties (补)

    在这里插入图片描述

    04. 命令启动参数设置 (补)

    1. 修改IDEA打包编码以免中文乱码

    在这里插入图片描述

    2. 命令启动

    在这里插入图片描述

    05.兼容问题(Maven与Boot)

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

    在这里插入图片描述

    ③:SpringBoot引入外部配置信息

    在这里插入图片描述

    1. 使用@Value获取值
    在这里插入图片描述
    2. 一次性获取多个值
    在这里插入图片描述 在这里插入图片描述
    3. 导入 spring-boot-configuration-processor 坐标
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-configuration-processorartifactId>
                <version>2.6.11version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    在这里插入图片描述

    ④:热加载

    1. 问题分析
    在这里插入图片描述
    2. 导入依赖
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-devtoolsartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    2.1 可以不指定版本
    在这里插入图片描述
    3. 设置自动构建项目
    在这里插入图片描述
    4.测试
    在这里插入图片描述

    ⑤:配置文件自动提示功能消失

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

    ⑥:配置文件优先级 (补)

    在这里插入图片描述

    ⑦:yaml格式 (补)

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

    ⑧:yaml格式读取数据(三种) (补)

    1. 方式一: 直接获取数据
    在这里插入图片描述
    2. 方式二:直接获取全部信息 在 取数据
    在这里插入图片描述
    @RestController
    public class TestController2 {
    
        @Autowired
        private Environment env;
    
        @GetMapping("/test2")
        public String test() {
            System.out.println(env.getProperty("server.port"));
            System.out.println(env.getProperty("books.names[1]"));
            return "Hello SpringBoot";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    3. 方式三:使用实体类进行封装数据
    在这里插入图片描述
    @Component
    @ConfigurationProperties(prefix = "books")
    @Data
    @ToString
    public class Books {
        private double price;
        private String[] names;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    @RestController
    public class TestController2 {
    
        @Autowired
        private Books book;
    
        @GetMapping("/test2")
        public String test() {
            System.out.println("******************");
            System.out.println(book);
            return "Hello SpringBoot";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    ⑨:配置文件分类

    在这里插入图片描述

    1. IDEA中
    在这里插入图片描述
    2. 使用jar包时
    在这里插入图片描述

    五、SpringBoot整合MyBatis(xml方式)

    ①:导入依赖

    1. 导入依赖
    
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
            dependency>
    
    
            
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>druid-spring-boot-starterartifactId>
                <version>1.2.6version>
            dependency>
    
    
            
            <dependency>
                <groupId>org.mybatis.spring.bootgroupId>
                <artifactId>mybatis-spring-boot-starterartifactId>
                <version>2.1.3version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    ②:编写配置文件

    01. 准备实体类

    1. 使用Idea自动创建
    在这里插入图片描述
    2. 自动创建后在进行一定的调整和修改
    @Data
    @ToString
    @AllArgsConstructor
    @NoArgsConstructor
    public class Classes {
    
      private long cId;
      private String cName;
      private String cDesc;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    @Data
    @ToString
    @AllArgsConstructor
    @NoArgsConstructor
    public class Students {
    
      private String sId;
      private String sName;
      private long sAge;
      private long sCid;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    02. 准备Mapper接口

    1. 创建Mapper接口
    在这里插入图片描述
    public interface StudentMapper {
        List<Students> findAll();
    
    }
    
    • 1
    • 2
    • 3
    • 4
    2. 在启动类中添加,扫描Mapper接口所在的包
    在这里插入图片描述
    @MapperScan(basePackages = "com.it.springboot_01_demo1.mapper")
    
    • 1

    03. 准备映射文件

    1. 创建Mapper文件编写数据库查询语句
    在这里插入图片描述
    
    DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.it.springboot_01_demo1.mapper.StudentMapper">
    
        <select id="findAll" resultType="Students">
            select * from students;
        select>
    
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    2. 在yml配置文件中添加mybatis的配置
    在这里插入图片描述
    # mybatis配置
    mybatis:
      # 扫描配置文件
      mapper-locations: classpath:mapper/*.xml
      # 配置别名扫描的包
      type-aliases-package: com.it.springboot_01_demo1.entity
      # 开启驼峰映射配置
      configuration:
        map-underscore-to-camel-case: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    3. 指定数据库的连接信息
    在这里插入图片描述
    # 连接数据库的信息
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost/db_mybatis_demo2?characterset=utf-8&serverTimezone=UTC
        username: root
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    04. 测试

    1. 创建测试类并继承启动测试类
    在这里插入图片描述在这里插入图片描述
    class StudentMapperTest extends SpringBoot01Demo1ApplicationTests {
    
        @Autowired
        private StudentMapper studentMapper;
    
        @Test
        void findAll() {
            List<Students> studentsList = studentMapper.findAll();
            for (Students student:studentsList) {
                System.out.println(student);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    六、SpringBoot整合MyBatis(注解方式)

    ①:导入依赖

    略~(可查考上面使用xml方式的配置)

    ②:创建实体类

    略~(可查考上面使用xml方式的配置)

    ③:创建Mapper接口并添加MyBatis注解

    添加Mybatis注解
    针对增删改查:@Insert,@Delete,@Update,@Select

    在这里插入图片描述
    public interface StudentMapper2 {
    
        @Select("select * from students")
        List<Students> findAll();
    
        @Select("select * from students where sname = #{name}")
        Students findByName(@Param("name") String name);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ④:数据库的信息和驼峰映射

    # 连接数据库的信息
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost/db_mybatis_demo2?characterset=utf-8&serverTimezone=UTC
        username: root
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
    
    
    # mybatis配置
    mybatis:
      # 开启驼峰映射配置
      configuration:
        map-underscore-to-camel-case: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ⑤:测试

    1. 创建测试类并继承启动测试类
    在这里插入图片描述 在这里插入图片描述在这里插入图片描述

    ⑥:通过配置查看sql的执行过程

    # 查看sql语句
    logging:
      level:
        com.it.springboot_01_demo1.mapper: DEBUG
    
    • 1
    • 2
    • 3
    • 4
    在这里插入图片描述

    在这里插入图片描述

    七、SpringBoot整合分页助手

    ①:导入依赖

    
    <dependency>
        <groupId>com.github.pagehelpergroupId>
        <artifactId>pagehelper-spring-boot-starterartifactId>
        <version>1.3.0version>
    dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ②:测试

    在这里插入图片描述
    class StudentMapper2Test extends SpringBoot01Demo1ApplicationTests {
    
        @Resource
        private StudentMapper2 studentMapper2;
        
        @Test
        public void findByPage(){
            // 1. 执行分页(第一页 每页显示3条信息)
            PageHelper.startPage(1, 3);
    
            // 2. 执行查询
            List<Students> studentsList = studentMapper2.findAll();
    
            // 3. 封装PageInfo对象
            PageInfo<Students> pageInfo = new PageInfo<>(studentsList);
    
            // 4. 输出
            List<Students> students = pageInfo.getList();
            for (Students student:students) {
                System.out.println(student);
            }
        }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    2. 直接运行会报错
    在这里插入图片描述
    3. 解决办法
    在这里插入图片描述

    依赖循环引用是不鼓励的,默认情况下是禁止的。更新应用程序以删除bean之间的依赖循环。作为最后的手段,可以通过设置spring.main来自动打破循环。allow-circular-references为true。

    可以通过在配置文件中配置如下属性以恢复正常

    spring.main.allow-circular-references=true
    
    • 1
    4. 在测试
    在这里插入图片描述

    八、SpringBoot整合JSP

    ①:导入依赖

    
            <dependency>
                <groupId>org.apache.tomcat.embedgroupId>
                <artifactId>tomcat-embed-jasperartifactId>
            dependency>
            
    
            <dependency>
                <groupId>javax.servletgroupId>
                <artifactId>jstlartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ②:创建webapp目录及JSP页面

    1. 创建目录及jsp页面
    在这里插入图片描述
    <%@page contentType="text/html;charset=utf-8" language="java" pageEncoding="UTF-8" %>
    
    <html>
    <head>
    
        <title>Titletitle>
    head>
    <body>
        <h2>Hello World!h2>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ③:设置前缀和后缀

    1. 配置前缀和后缀
    在这里插入图片描述
    spring:
    # 配置视图的前缀和后缀
      mvc:
        view:
          # 前缀:默认读取到 webapp 目录下
          prefix: /WEB-INF/
          suffix: .jsp
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    ④:测试

    1. 创建Controller类
    在这里插入图片描述
    @Controller
    public class JspController {
    
        @GetMapping("index")
        public String index(Model model){
            model.addAttribute("name","张三");
            return "index";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    九、SpringBoo整合JUnit

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

    1. 测试流程
    在这里插入图片描述
    2. 注意
    在这里插入图片描述
  • 相关阅读:
    MyBatisPlus-多记录操作及逻辑删除
    网络安全(4)
    php 实现rpc,使用php链接jsonrpc服务
    浅析 Android 系统稳定性中应用程序 ANR 无响应的原因
    Hyperledger Fabric Transaction Flow——事务处理流程
    几种出色的游戏开发艺术技巧
    【Linux】深刻理解进程概念、进程状态、进程常用指令和系统调用
    LLMs的终局是通用人工智能AGI总结 生成式AI和大语言模型 Generative AI & LLMs
    C++11标准模板(STL)- 算法(std::random_shuffle, std::shuffle)
    思腾云计算
  • 原文地址:https://blog.csdn.net/cygqtt/article/details/126785302