• 猿创征文 |【SpringBoot】SSM“加速器”SpringBoot初体验


    前言

    整理完SSM的零零碎碎,也是按部就班开启了SpringBoot之旅,Boot的引入加速了传统的SSM开发,给我最深的一个印象就是它的内部自动集成了Tomcat,当我们运行Application类时,资源就被自动部署到了Tomcat中,其次,是起步依赖的引入,也极大的简化了SSM文件繁琐的配置工程。
    在这里插入图片描述
    以前说过,从繁至简是贯彻框架学习的原始真解,Boot的出现更是这一真理的进一步论证!

    一.SpringBoot

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
    在这里插入图片描述
    按下这个按钮,一切仿佛都被加速,相比于曾经的SSM开发
    我们通过一个经典的MVC案例来好好感受一下Boot带给我们的极速体验吧

    1.还是老套路,类头上写上注解配置请求路径,编写一个GET请求,并且return做出反馈

    @RestController
    @RequestMapping("/books")
    public class BootController {
    
        @GetMapping("/{id}")
        public String getById(@PathVariable Integer id){
            System.out.println("id ==> "+id);
            return "hello , spring boot!";
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.启动项目的引导类
    在这里插入图片描述
    3.启动SpringBoot项目过后的运行窗口
    在这里插入图片描述
    4.我们利用Postman来进行一个简单的接口测试,测试一下项目功能是否健全
    在这里插入图片描述

    二.起步依赖的引入

    为了解决因插件版本不同而导致的冲突问题,boot为我们事先配置好了许多不同版本的插件,当我们使用时,选择既定的boot版本即可自动匹配一套完美契合的插件,极大提高了配置难度。
    在这里插入图片描述
    曾经,懒羊羊刚学习Javaweb时,就因为忽略了tomcat和servlet—api的版本一致问题导致MVC的项目无论如何也运行不成功,可以说是走了很多弯路啊~
    不过现在看来SpringBoot的出现,提高开发效率的同时也为我们屏蔽掉了大量不必要的麻烦

    三.服务器切换

    我们都知道boot内置了tomcat,每当创建好一个web项目,默认都是他,如何更改内置的服务器呢?
    这需要用到maven中的排除依赖,找到web插件所在的依赖,排除掉Tomcat即可,就像这样

        <dependencies>
            <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

    然后我们更换上Jetty服务器的依赖即可完成boot项目服务器切换

            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-jettyartifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4

    四.多环境开发

    多环境开发配置也是必会的一项操作,以yaml格式的配置文件为例,分别对生产环境、测试环境、开发环境三者之间进行切换

    #设置启用的环境
    spring:
      profiles:
        active: ${profile.active}
    
    ---
    #开发环境
    spring:
      profiles: dev
    server:
      port: 55
    ---
    #生产环境
    spring:
      profiles: pro
    server:
      port: 66
    ---
    #测试环境
    spring:
      profiles: test
    server:
      port: 77
    ---
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    五.整合Junit

    在SSM的基础上Spring boot整合junit就变得非常简单,注入测试的类,写上@Test注解即可

    @SpringBootTest(classes = SpringbootTestApplication.class)
    class SpringbootTestApplicationTests {
        @Autowired
        private BookService bookService;
        @Test
        public void save() {
            bookService.save();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    为何会如此简便?
    那是因为我们的boot引导类充当了配置类,@SpringBootApplication中封装了包扫描的注解(追源码还是会发现@Configuration注解),引导类所在位置的包会全部被扫描
    在这里插入图片描述
    所以说boot在这方面并没有带来什么新颖的功能,而是进一步封装了SSM的配置

    六.整合Mybatis

    6.1定义实体类

    com.yu7daily.domain 包下定义实体类 Book,内容如下

    public class Book {
        private Integer id;
        private String name;
        private String type;
        private String description;
        
        //setter and  getter
        
        //toString
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6.2定义dao接口

    com.yu7daily.dao 包下定义 BookDao 接口,内容如下

    public interface BookDao {
        @Select("select * from ssm_db where id = #{id}")
        public Book getById(Integer id);
    }
    
    • 1
    • 2
    • 3
    • 4

    6.3定义测试类

    test/java 下定义包 com.yu7daily ,在该包下测试类,内容如下

    @SpringBootTest
    class SpringbootMybatisApplicationTests {
    
    	@Autowired
    	private BookDao bookDao;
    
    	@Test
    	void testGetById() {
    		Book book = bookDao.getById(1);
    		System.out.println(book);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    6.4编写配置

    我们代码中并没有指定连接哪儿个数据库,用户名是什么,密码是什么。所以这部分需要在 SpringBoot 的配置文件中进行配合。

    application.yml 配置文件中配置如下内容

    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/ssm_db
        username: root
        password: root
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    6.5测试

    运行测试方法,我们会看到如下错误信息

    org.springframework.beans .factory.UnsatisfiedDependencyException: Error creating bean with name
    
    • 1

    错误信息显示在 Spring 容器中没有 BookDao 类型的 bean。为什么会出现这种情况呢?
    MyBatis是通过扫描接口利用自动代理创建对象交给Spring的IOC来集中管理,我们从始至终好像没有定义扫描的接口,所以我们需要指出扫描的接口!而我们要解决这个问题需要在BookDao 接口上使用 @MapperBookDao 接口改进为

    @Mapper
    public interface BookDao {
        @Select("select * from ssm_db where id = #{id}")
        public Book getById(Integer id);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:

    SpringBoot 版本低于2.4.3(不含),Mysql驱动版本大于8.0时,需要在url连接串中配置时区 jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC,或在MySQL数据库端配置时区解决此问题

    6.6使用Druid数据源

    现在我们并没有指定数据源,SpringBoot 有默认的数据源,我们也可以指定使用 Druid 数据源,按照以下步骤实现

    • 导入 Druid 依赖

      <dependency>
          <groupId>com.alibabagroupId>
          <artifactId>druidartifactId>
          <version>1.1.16version>
      dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • application.yml 配置文件配置

      可以通过 spring.datasource.type 来配置使用什么数据源。配置文件内容可以改进为

      spring:
        datasource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
          username: root
          password: 284650
          type: com.alibaba.druid.pool.DruidDataSource
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
  • 相关阅读:
    【初阶与进阶C++详解】第十一篇:stack和queue
    Ajax入门——第一节:案例:用jQuery和Ajax编码的图书管理系统
    【JUC】CompletableFuture
    Nginx-负载均衡与动静分离
    Consul学习笔记之-初识Consul
    FlinkSQL字段血缘解决方案及源码
    现在想获取一个手机号对应一个产品名的最新日期的一条记录(标签-sql)
    Java部分面试题(宝典篇)
    原画设计咨询回复话术
    chapter 1 项目首页
  • 原文地址:https://blog.csdn.net/weixin_57535055/article/details/126682861