相关推荐recommended
【Spring Boot】快速入门
作者:mmseoamin日期:2023-12-14

一、引言

1、什么是spring boot?

        Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

2、特点

Spring Boot还提供了强大的监控能力,可以监控应用程序的运行状态。这些特点使得Spring Boot成为Java开发人员的首选框架之一。

  1. 独立运行:Spring Boot可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs。
  2. 无XML配置:Spring Boot简化了配置过程,它采用约定优于配置的方式,通过自动化配置和默认设置来简化开发者的配置工作,减少了繁琐的配置代码。同时,它也支持外部化配置,应用程序的配置更加灵活和可管理。
  3. 嵌入式Web容器:Spring Boot内置了多种常用的Web容器,如Tomcat、Jetty、Undertow等,使得构建独立的Web应用程序变得更加简单。
  4. 自动管理依赖:Spring Boot通过提供一系列的"starter"依赖,自动管理应用程序的依赖关系,简化了依赖管理的工作。
  5. 丰富的开发者工具:Spring Boot提供了丰富的开发者工具,如热部署、自动重启、自动配置报告等,提高了开发效率。
  6. 可扩展性:基于Spring框架,Spring Boot支持丰富的扩展点和插件,使得应用程序的功能可以方便地进行扩展和定制。

二、快速搭建

1、新建

  1. 新建项目
  2. 选择好你项目的位置和项目名。
  3. 设置阿里的服务器:start.aliyun.com。
  4. 选择你的语言Java和类型maven。
  5. 选择你的jdk版本。

【Spring Boot】快速入门,第1张

2、选择依赖

我们选择一些必要的一些依赖,spring boot的版本我们尽量不要去动,选择它自己匹配的版本就行。

【Spring Boot】快速入门,第2张

目录介绍

  • src/main/java:主程序入口 Application,可以通过直接运行该类来启动SpringBoot应用

  • src/main/resources:配置目录,该目录用来存放应用的一些配置信息,比如应用名、服务端口、数据库配置等。由于我们应用了Web模块,因此产生了 static目录与templates目录,前者用于存放静态资源,如图片、CSS、JavaScript等;后者用于存放Web页面的模板文件。

  • src/test:单元测试目录,生成的 ApplicationTests 通过 JUnit4实现,可以直接用运行 SpringBoot应用的测试。

  • application.properties/application.yml:Ø 用于存放程序的各种依赖模块的配置信息,比如:服务端口,数据库连接配置等。

3、配置修改

把我们的配置文件application.properties修改成application.yml文件。

【Spring Boot】快速入门,第3张

mybatis:
  # 设置mapper文件的位置
  mapper-locations: classpath:mappers/*xml
  # 设置实体类的别名
  type-aliases-package: com.example.springboot01.mybatis.entity
server:
  # 设置端口号
  port: 8080
  # 项目名
  servlet:
    context-path: /

如果定义了这两个依赖我们需要进行注释才能运行。

        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.2
        
         
            com.mysql
            mysql-connector-j
            runtime
        

【Spring Boot】快速入门,第4张

【Spring Boot】快速入门,第5张

4、运行

进入我们的主程序入口,运行即可。

【Spring Boot】快速入门,第6张

【Spring Boot】快速入门,第7张

【Spring Boot】快速入门,第8张

三、集成mybatis数据库连接

1、配置

在application.yml里面配置MySQL、mybatis。

配置你的数据库和用户、密码,还有你的xml文件位置、实体类别名。

【Spring Boot】快速入门,第9张

mybatis:
  # 设置mapper文件的位置
  mapper-locations: classpath*:mapper/*.xml
  # 设置实体类的别名
  type-aliases-package: com.example.springboot01.entity
server:
  # 设置端口号
  port: 8080
  # 项目名
  servlet:
    context-path: /
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://localhost:3306/bookshop?useUnicode=true&characterEncoding=utf8
    username: root
    password: 123456

确保你的pom.xml里面有mybatis和MySQL的依赖

【Spring Boot】快速入门,第10张

2、生成代码

确保你的idea里面有以下这个插件

【Spring Boot】快速入门,第11张

用idea连接你的数据库右键你的数据表【Spring Boot】快速入门,第12张

  1. 项目路径
  2. 生成路径
  3. 基本路径
  4. 包名

【Spring Boot】快速入门,第13张

选择Lombok

【Spring Boot】快速入门,第14张

3、测试

在实体类添加有参无参【Spring Boot】快速入门,第15张

编写号调用的接口方法等

【Spring Boot】快速入门,第16张

编写Controller层

package com.example.springboot01.controller;
import com.example.springboot01.entity.TBook;
import com.example.springboot01.service.TBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/book")
public class TBookController {
    @Autowired
    private TBookService tBookService;
    // http://127.0.0.1:8080/book/name=lisi
    @RequestMapping("/list")
    public Object list() {
        List tBooks = tBookService.selectAll();
        return tBooks;
    }
}

【注意】mapper所在的包必须要在启动类开启扫描:@MapperScan

【Spring Boot】快速入门,第17张

启动测试:http://localhost:8080/book/list【Spring Boot】快速入门,第18张

四、集成pagehelper分页

1、配置插件及文件

在pom.xml里面添加插件

        
        
            com.github.pagehelper
            pagehelper-spring-boot-starter
            1.4.6
        

配置application.yml

#pagehelper分页插件配置
pagehelper:
  # 数据库方言
  helperDialect: mysql
  # 是否启用 reasonable
  reasonable: true
  # 是否支持方法参数
  supportMethodsArguments: true
  # 参数
  params: count=countSql

2、优化分页

编写分页实体

package com.example.springboot01.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));
    }
}

编写分页注解

package com.example.springboot01.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 {
}

编写切面

package com.example.springboot01.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;
    }
}

3、实例

编写接口类,调用分页注解:    @PageAnnotation 

package com.example.springboot01.service.impl;
import com.example.springboot01.entity.TBook;
import com.example.springboot01.mapper.TBookMapper;
import com.example.springboot01.page.PageAnnotation;
import com.example.springboot01.page.PageBean;
import com.example.springboot01.service.TBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @软件包名 com.example.springboot01.service.impl
 * @用户 tgq
 * @create 2023-12-12 下午3:33
 * @注释说明:
 */
@Service
public class TBookServiceImpl implements TBookService {
    @Autowired
    private TBookMapper tBookMapper;
    @Override
//    分页注解
    @PageAnnotation
    public List selectAll(PageBean pageBean) {
        return tBookMapper.selectAll();
    }
}

Controller层方法调用

    @RequestMapping("/list")
    public Object list2(PageBean pageBean) {
        List tBooks = tBookService.selectAll(pageBean);
        return tBooks;
    }

运行结果:

【Spring Boot】快速入门,第19张

五、集成druid数据库连接池

1、导入插件

 
        
            com.alibaba
            druid-spring-boot-starter
            1.2.16
        

2、配置

在yml里面配置

【Spring Boot】快速入门,第20张

    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 初始化时建立物理连接的个数
      initial-size: 5
      # 最小连接池数量
      min-idle: 5
      # 最大连接池数量
      max-active: 20
      #配置获取连接等待超时的时间
      max-wait: 60000
      #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 30000
      # 用来检测连接是否有效的 sql,要求是一个查询语句
      validation-query: SELECT 1 FROM DUAL
      # 建议配置为 true,不影响性能,并且保证安全性
      test-while-idle: true
      # 申请连接时执行 validationQuery 检测连接是否有效
      test-on-borrow: true
      # 归还连接时执行 validationQuery 检测连接是否有效
      test-on-return: false
      # 是否缓存 preparedStatement,即 PsCache
      # PSCache 对支持游标的数据库性能提升巨大,比如说 oracle,而 mysql 则建议关闭
      pool-prepared-statements: true
      # 要启用 PSCache,必须配置大于0
      max-pool-prepared-statement-per-connection-size: 20
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计
      filter:
        stat:
          merge-sql: true
          slow-sql-millis: 5000
      # 基础监控配置
      web-stat-filter:
        enabled: true
        url-pattern: /*
        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

六、整合Log日志

1、配置

配置application.yml

【Spring Boot】快速入门,第21张

#日志配置。
logging:
  level:
    com.example.springboot01.mapper: debug

重新运行即可,可看到SQL语句等

【Spring Boot】快速入门,第22张

七、打包

1、打包方式

在pom文件里面如果没有填写需要打包的方式,可以自己进行添加。可选择jar包和war包

【Spring Boot】快速入门,第23张

2、更改配置

在pom.xml文件里面更改配置。

true改成false

【Spring Boot】快速入门,第24张

3、打包

我们右键选择按照步骤进行操作【Spring Boot】快速入门,第25张

在target里面找到我们的jar包

【Spring Boot】快速入门,第26张

4、运行

把我们打好的jar包放到随意的一个地方运行命令

java -jar springboot01-0.0.1-SNAPSHOT.jar

springboot01-0.0.1-SNAPSHOT.jar:为你的jar包名。

【Spring Boot】快速入门,第27张

我们进入浏览器进行访问即可

【Spring Boot】快速入门,第28张

🐉spring boot 常问的⑧个问题

在Spring Boot面试中,面试官通常会问一些关于Spring Boot基础知识、配置、应用场景、最佳实践以及性能优化等方面的问题。以下是一些常见的面试问题及回答建议:

  1. 什么是Spring Boot?

    回答:Spring Boot是一个基于Java的开源框架,它旨在简化Spring应用程序的创建和部署。通过使用约定大于配置的方法,Spring Boot可以自动配置大部分常见的设置,让开发者能够快速搭建应用程序框架并专注于业务逻辑。

  2. Spring Boot有哪些优点?

    回答:Spring Boot的优点包括:

    • 简化开发:通过自动配置和约定大于配置的方法,减少了开发者的配置工作量。
    • 快速构建:提供了大量内置的功能和库,加快了应用程序的开发速度。
    • 易于部署:内置了嵌入式服务器,可以轻松地将应用程序部署到云端或本地服务器。
    • 丰富的插件:支持各种第三方库和插件,方便扩展功能。
  3. Spring Boot的核心概念是什么?

    回答:Spring Boot的核心概念包括自动配置、约定大于配置、分离关注点、单一职责原则等。其中,自动配置是通过使用Java Config或XML配置文件来定义应用程序的组件和属性;约定大于配置是指Spring Boot根据约定来自动配置应用程序,减少开发者的手动配置工作;分离关注点是指将应用程序拆分为多个独立的模块,降低耦合性;单一职责原则是指每个组件应该只负责一个功能,提高代码的可读性和可维护性。

  4. 如何创建一个Spring Boot应用程序?

    回答:创建一个Spring Boot应用程序需要以下几个步骤:

    • 添加依赖:在pom.xml文件中添加Spring Boot Starter依赖。
    • 创建主类:创建一个包含main()方法的类作为应用程序的入口。
    • 配置文件:在src/main/resources目录下创建application.properties或application.yml文件,用于配置应用程序的属性。
    • 创建控制器:创建Java类并使用@RestController或@Controller注解来定义应用程序的路由和请求处理方法。
  5. 如何配置Spring Boot应用程序?

    回答:在Spring Boot中,可以通过application.properties或application.yml文件来配置应用程序。常见的配置包括数据库连接、端口号、日志级别等。同时,也可以使用@Configuration类来定义自定义的配置类,并在其中声明Bean组件和属性。

  6. Spring Boot中有哪些常用的注解?

    回答:Spring Boot中常用的注解包括@Component、@Service、@Repository、@Controller、@RequestMapping等。这些注解可以用于定义组件、请求处理方法、路由等。此外,还有@Autowired、@Qualifier等注解用于实现依赖注入等功能。

  7. Spring Boot的最佳实践有哪些?

    回答:Spring Boot的最佳实践包括:

    • 使用Lombok库减少模板代码的编写。
    • 使用@Valid注解进行表单验证。
    • 使用@RequestParam注解获取请求参数。
    • 使用@RequestBody注解获取请求体中的数据。
    • 使用@GetMapping和@PostMapping注解替代@RequestMapping注解来简化请求处理方法的定义。
  8. 如何优化Spring Boot应用程序的性能?

    回答:优化Spring Boot应用程序的性能可以考虑以下几个方面:

    • 使用适当的缓存策略,如使用Redis缓存数据库查询结果等。
    • 优化数据库查询语句,避免使用SELECT *语句,只查询需要的字段。
    • 使用Gzip压缩响应内容,减少传输的数据量。
    • 优化代码逻辑,避免冗余计算和重复查询。

我的分享就到这里!!!感谢大家在评论区交流