【SpringBoot】从入门到精通的快速开发指南
作者:mmseoamin日期:2023-12-19

【SpringBoot】从入门到精通的快速开发指南,第1张

🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的专栏《SpringBoot》。🎯🎯

👉点击这里,就可以查看我的主页啦!👇👇

Java方文山的个人主页

🎁如果感觉还不错的话请给我点赞吧!🎁🎁

💖期待你的加入,一起学习,一起进步!💖💖

【SpringBoot】从入门到精通的快速开发指南,请添加图片描述,第2张

目录

一、SpringBoot简介

1.1.什么是SpringBoot

1.2.为什么要学习SringBoot

1.3.SpringBoot的特点

二、入门SpringBoot

2.1.创建SpringBoot项目

2.1.1.测试springboot

2.2.集成mybatis

2.2.1.properties修改为.yml

 2.2.2.添加mybatis配置文件

 2.2.3.生成mapper代码

2.2.4.测试连接数据库

2.3.集成pagehelper

2.3.1.基础使用pagehelper

2.3.2.AOP使用pagehelper

2.4.集成druid

三、注意事项

3.1.SpringBoot换源失败

3.2.代码不加载

3.3.yml文件注意格式

3.4.IDEA连接数据库错误


一、SpringBoot简介

1.1.什么是SpringBoot

Spring Boot 是由 Pivotal 团队提供的全新框架,2014 年 4 月发布 Spring Boot 1.0 2018 年 3 月 Spring Boot 2.0发布。它是对spring的进一步封装,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。怎么简化的呢?就是通过封装、抽象、提供默认配置等方式让我们更容易使用。

  SpringBoot 基于 Spring 开发。SpringBoot 本身并不提供 Spring 框架的核心特性以及扩展功能,也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。

  关于 SpringBoot 有一句很出名的话就是约定大于配置。采用 Spring Boot 可以大大的简化开发模式,它集成了大量常用的第三方库配置,所有你想集成的常用框架,它都有对应的组件支持,例如 Redis、MongoDB、Jpa、kafka,Hakira 等等。SpringBoot 应用中这些第三方库几乎可以零配置地开箱即用,大部分的 SpringBoot 应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。

1.2.为什么要学习SringBoot

众所周知 Spring 应用需要进行大量的配置,各种 XML 配置和注解配置让人眼花缭乱,且极容易出错,因此 Spring 一度被称为“配置地狱”。为了简化 Spring 应用的搭建和开发过程,Pivotal 团队在 Spring 基础上提供了一套全新的开源的框架,它就是Spring Boot。

只是为了提升Spring开发者的工具,特点:敏捷式、快速开发。

  1. 快速上手:Spring Boot 提供了一套简化的开发模型和自动配置机制,使得开发者能够快速搭建起一个可运行的应用程序。相比传统的 Spring 开发,Spring Boot 大大简化了繁琐的配置过程,让开发者能够更专注于业务逻辑的实现。

  2. 生态丰富:Spring 生态系统非常庞大,Spring Boot 在此基础上提供了更加便捷的开发方式。它内置了许多常用的库和工具,如数据库访问、Web 开发、安全认证等,使得开发者能够更轻松地集成这些功能,而无需自己手动配置。

  3. 高效开发:Spring Boot 提供了许多开发中常用的功能和组件,如自动装配、自动配置、监控和管理等,极大地提高了开发效率。通过使用 Spring Boot,开发者可以快速构建出高质量的应用程序,同时还能够更加方便地进行测试、部署和维护。

  4. 社区支持广泛:Spring Boot 是 Spring 社区的重要组成部分,因此拥有一个庞大的社区支持。无论是在官方文档、教程还是开源社区中,都能够找到大量的资源和解决方案,帮助开发者解决问题、学习和提高。

1.3.SpringBoot的特点

  • 独立运行的 Spring 项目

    Spring Boot 可以以 jar 包的形式独立运行,Spring Boot 项目只需通过命令“ java–jar xx.jar” 即可运行。

    • 内嵌 Servlet 容器

      Spring Boot 使用嵌入式的 Servlet 容器(例如 Tomcat、Jetty 或者 Undertow 等),应用无需打成 WAR 包 。

      • 提供 starter 简化 Maven 配置

        Spring Boot 提供了一系列的“starter”项目对象模型(POMS)来简化 Maven 配置。

        • 提供了大量的自动配置

          Spring Boot 提供了大量的默认自动配置,来简化项目的开发,开发人员也通过配置文件修改默认配置。

          • 自带应用监控

            Spring Boot 可以对正在运行的项目提供监控。

            • 无代码生成和 xml 配置

              Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。

              二、入门SpringBoot

              2.1.创建SpringBoot项目

              ①打开Idea点击 + Create New Project,选择 Spring Initializr。

              【SpringBoot】从入门到精通的快速开发指南,第3张

              ②点击Next下一步

              【SpringBoot】从入门到精通的快速开发指南,第4张

               ③勾选所需依赖

              【SpringBoot】从入门到精通的快速开发指南,第5张

              点击Next下一步,最后点击Finish即可完成SpringBoot项目的创建。

              2.1.1.测试springboot

              插件之间可能存在配置关系,比如Mybatis Framework,这个插件就是需要自己配置数据库,如果不配置,那么启动项目是会报错的,所以我们来配置一下避免运行时报错,我们这里使用的是不添加数据库配置,加入注解直接让其排除自动配置

              @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

              【SpringBoot】从入门到精通的快速开发指南,第6张

               启动后看见如下图就说明启动成功了(SpringBoot不需要配置Tomcat,他内嵌了一个在里面)

              【SpringBoot】从入门到精通的快速开发指南,第7张

              为了能比较的清楚的看到效果,我们在 com.zking.springboot 包下又创建一个 controller 包,并在该包内创建一个名为 HelloController 的 Controller,代码如下:

              @RestController
              public class HelloController {
                  @RequestMapping("/hello")
                  public String hello(){
                      return "Hello SpringBoot!!!";
                  }
              }

               启动SpringBoot后访问路径得到如下图,说明我们的SpringBoot项目以及搭建好了

              【SpringBoot】从入门到精通的快速开发指南,第8张

              2.2.集成mybatis

              2.2.1.properties修改为.yml

              在这之前,我们需要做一件事情,下载插件 Convert YAML and Properties File

              【SpringBoot】从入门到精通的快速开发指南,第9张

              该插件是将我们的配置文件.properties直接变成.yml,这样的好处是什么呢?这样可以更直观的知道我们所配置的信息,让我们的配置变得有层级更好的管理。

              原properties

              【SpringBoot】从入门到精通的快速开发指南,第10张

              修改成yml

              【SpringBoot】从入门到精通的快速开发指南,第11张

              下载好插件,重启IDEA后选择properties文Convert YAML and Properties File即可

              【SpringBoot】从入门到精通的快速开发指南,第12张

               2.2.2.添加mybatis配置文件

              配置pom.xml,导入依赖:

                       
                          org.mybatis.spring.boot
                          mybatis-spring-boot-starter
                          2.3.0
                      

              在创建springboot项目的时候勾选了,就不用管。

              往application.yml或application.properties文件,添加以下配置:

              #mybatis配置
              mybatis:
                      #配置SQL映射文件路径
                      mapper-locations: classpath:mapper/*.xml
                      #配置别名
                       type-aliases-package: com.csdn.springboot.pojo

              在启动类上添加@MapperScan注解:

              @MapperScan({"com.csdn.springboot.mapper"})
              

              【SpringBoot】从入门到精通的快速开发指南,第13张

               2.2.3.生成mapper代码

              ①点击Datebase后点击加号进行mysql连接

              【SpringBoot】从入门到精通的快速开发指南,第14张

              ②填写相应信息

              【SpringBoot】从入门到精通的快速开发指南,第15张

              ③ 在需要生成代码的表上右击MybatisX-Generator

              【SpringBoot】从入门到精通的快速开发指南,第16张

               ④生成mapper代码【SpringBoot】从入门到精通的快速开发指南,第17张

              【SpringBoot】从入门到精通的快速开发指南,第18张

              至此我们的代码就生成好了

              【SpringBoot】从入门到精通的快速开发指南,第19张

              2.2.4.测试连接数据库

              代码生成完成了下面我们测试一下

              mapper.xml

                  

              mapper

              @Repository
              public interface TBookMapper {
                  List selectBook();
              }

              service

              public interface TBookService {
                  List selectBook();
              }
              

              serviceimpl

              @Service
              public class TBookServiceImpl implements TBookService {
                  @Autowired
                  private TBookMapper tBookMapper;
                  @Override
                  public List selectBook() {
                      return tBookMapper.selectBook();
                  }
              }
              

              controller

              @RestController
              @RequestMapping("/book")
              public class TBookController {
                  @Autowired
                  private TBookService tbookservice;
                  @RequestMapping("/list")
                  public Object list(){
                      return tbookservice.selectBook();
                  }
              }
              

              请求访问路径:http://localhost:8080/book/list

              【SpringBoot】从入门到精通的快速开发指南,第20张

              2.3.集成pagehelper

              2.3.1.基础使用pagehelper

              普通的查询肯定不满住我们日常需求,按道理肯定是只查询一部分数据显示给用户看,这就需要用到pagehelper依赖了,通过它进行分页查询。

              配置pom.xml,导入依赖:

                  
                      
                          com.github.pagehelper
                          pagehelper-spring-boot-starter
                          1.4.6
                      
                      
                          org.springframework.boot
                          spring-boot-starter-aop
                      

              application.yml或application.properties文件,添加以下配置:

              #pagehelper分页插件配置
              pagehelper:
                #sql“方言”
                helperDialect: mysql
                #开启分页合理化
                reasonable: true
                #mapper方法上的参数
                supportMethodsArguments: true
                #查询数量
                params: count=countSql

              我这里先测试一下,手动设置查询条件

              【SpringBoot】从入门到精通的快速开发指南,第21张

               这时,我们的数据就会是分页的了,不再是一次性全部查询出来

              【SpringBoot】从入门到精通的快速开发指南,第22张

              2.3.2.AOP使用pagehelper

              先准备三样东西,PageBean\PageAspect\PageAnnotation

              PageBean

              package com.csdn.boot.page;
              import lombok.AllArgsConstructor;
              import lombok.Data;
              import lombok.NoArgsConstructor;
              import lombok.experimental.Accessors;
              @Data
              @NoArgsConstructor
              @AllArgsConstructor
              @Accessors(chain = true)
              public class PageBean {
                  private Integer page = 1;
                  private Integer rows = 5;
                  private Long total = 0L;
                  private boolean open = true;
                  public int start() {
                      return (page - 1) * rows;
                  }
                  public int previous() {
                      return Math.max(this.page - 1, 1);
                  }
                  public int next() {
                      return Math.min(this.page + 1, maxPage());
                  }
                  public int maxPage() {
                      return (int) Math.ceil(this.total.intValue() / (this.rows * 1.0));
                  }
              }
              

              PageAspect

              package com.csdn.boot.page;
              import com.github.pagehelper.Page;
              import com.github.pagehelper.PageHelper;
              import org.aspectj.lang.ProceedingJoinPoint;
              import org.aspectj.lang.annotation.Around;
              import org.aspectj.lang.annotation.Aspect;
              import org.aspectj.lang.annotation.Pointcut;
              import org.springframework.stereotype.Component;
              @Aspect
              @Component
              public class PageAspect {
                  @Pointcut("@annotation(PageAnnotation)")
                  public void cut() {
                  }
                  @Around("cut()")
                  public Object aroundHandler(ProceedingJoinPoint point) throws Throwable {
                      Object[] args = point.getArgs();
                      PageBean pageBean = new PageBean().setOpen(false);
                      for (Object arg : args) {
                          if (arg instanceof PageBean) pageBean = (PageBean) arg;
                      }
                      PageHelper.startPage(pageBean.getPage(), pageBean.getRows(), pageBean.isOpen());
                      Object val = point.proceed();
                      if (pageBean.isOpen()) {
                          Page page = (Page) val;
                          pageBean.setTotal(page.getTotal());
                      }
                      return val;
                  }
              }
              

              PageAnnotation

              package com.csdn.boot.page;
              import java.lang.annotation.ElementType;
              import java.lang.annotation.Retention;
              import java.lang.annotation.RetentionPolicy;
              import java.lang.annotation.Target;
              @Target(ElementType.METHOD)
              @Retention(RetentionPolicy.RUNTIME)
              public @interface PageAnnotation {
              }
              

              准备好了后,就可对我们的代码进行修改了

              controller层

              @RequestMapping("/list")
                  public Object list(PageBean pageBean) {
                      PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
                      return tbookservice.selectBook(pageBean);
                  }
              }

               service层

              public interface TBookService {
                  List selectBook(PageBean pageBean);
              }
              

               serviceimpl层

              @Service
              public class TBookServiceImpl implements TBookService {
                  @Autowired
                  private TBookMapper tBookMapper;
                  @PageAnnotation
                  @Override
                  public List selectBook(PageBean pageBean) {
                      return tBookMapper.selectBook();
                  }
              }
              

              演示效果:

              【SpringBoot】从入门到精通的快速开发指南,第23张

              2.4.集成druid

              【SpringBoot】从入门到精通的快速开发指南,第24张

              Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。

              【SpringBoot】从入门到精通的快速开发指南,第25张

               配置pom.xml,导入依赖:

                  
                      
                          com.alibaba
                          druid-spring-boot-starter
                          1.2.15
                      

               application.yml或application.properties文件,添加以下配置:

              spring:
                datasource:
                  #1.JDBC
                  type: com.alibaba.druid.pool.DruidDataSource
                  driver-class-name: com.mysql.jdbc.Driver
                  url: jdbc:mysql://localhost:3306/vue?useUnicode=true&characterEncoding=utf8&useSSL=false
                  username: root
                  password: 1234
                  druid:
                    #2.连接池配置
                    #初始化连接池的连接数量 大小,最小,最大
                    initial-size: 5
                    min-idle: 5
                    max-active: 20
                    #配置获取连接等待超时的时间
                    max-wait: 60000
                    #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
                    time-between-eviction-runs-millis: 60000
                    # 配置一个连接在池中最小生存的时间,单位是毫秒
                    min-evictable-idle-time-millis: 30000
                    validation-query: SELECT 1 FROM DUAL
                    test-while-idle: true
                    test-on-borrow: true
                    test-on-return: false
                    # 是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭   个人建议如果想用SQL防火墙 建议打开
                    pool-prepared-statements: true
                    max-pool-prepared-statement-per-connection-size: 20
                    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
                    filter:
                      stat:
                        merge-sql: true
                        slow-sql-millis: 5000
                    #3.基础监控配置
                    web-stat-filter:
                      enabled: true
                      url-pattern: /*
                      #设置不统计哪些URL
                      exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
                      session-stat-enable: true
                      session-stat-max-count: 100
                    stat-view-servlet:
                      enabled: true
                      url-pattern: /druid/*
                      reset-enable: true
                      #设置监控页面的登录名和密码
                      login-username: admin
                      login-password: admin
                      allow: 127.0.0.1
                      #deny: 192.168.1.100

              我们直接重启服务器随便发个请求到后端,根据监控页面的网址进行访问

              【SpringBoot】从入门到精通的快速开发指南,第26张

              【SpringBoot】从入门到精通的快速开发指南,第27张

              就可以在这里实时监控到用户发送的请求了

              【SpringBoot】从入门到精通的快速开发指南,第28张

              三、注意事项

              3.1.SpringBoot换源失败

              不知道大家有没有见过以下图片,该图片就是Spring Initializr创建项目换源,出现的错误

              【SpringBoot】从入门到精通的快速开发指南,第29张

              解决办法:

               ①  用阿里云https://start.aliyun.com/ 地址直接替代或者使用大佬的http://start.springboot.io/即可

               ② 直接进入spring提供的官网后如果没有合适自己的jdk版本也没关系,直接在构建完的springboot项目中修改pom.xml文件即可。

              注意选择Custom

              【SpringBoot】从入门到精通的快速开发指南,第30张

              3.2.代码不加载

              我们的代码要放到与启动类同级包下,否则访问不到该资源,如果是静态资源或者配置文件请放入resources文件下。

              【SpringBoot】从入门到精通的快速开发指南,第31张

              3.3.yml文件注意格式

              正确的层级关系

              在这个例子中,我们将创建一个包含一些用户信息的yml文件。

              users:
                - name: Alice
                  age: 28
                  gender: Female
                - name: Bob
                  age: 34
                  gender: Male
              

              在这个例子中,我们的层级关系是正确的。users是顶级键,它下面有两个列表元素,每个元素都是一个字典,表示一个具体的用户。

              错误的层级关系

              现在让我们看一下错误的层级关系。在这个例子中,我们将创建一个包含用户信息的yml文件,但是我们不小心缩进了一些键。

              users:
              - name: Alice
                age: 28
                 gender: Female
              - name: Bob
                age: 34
                 gender: Male
              

              在这个例子中,我们缩进了gender键,导致它的层级关系不正确。因此,这个yml文件是无效的。

              3.4.IDEA连接数据库错误

              【SpringBoot】从入门到精通的快速开发指南,第32张

              可以在连接字符串中添加"serverTimezone"属性并设置正确的时区值

              jdbc:mysql://localhost:3306/bookshop?serverTimezone=UTC

              【SpringBoot】从入门到精通的快速开发指南,第33张

               【SpringBoot】从入门到精通的快速开发指南,请添加图片描述,第2张

              到这里我的分享就结束了,欢迎到评论区探讨交流!!

              💖如果觉得有用的话还请点个赞吧 💖

              【SpringBoot】从入门到精通的快速开发指南,第35张