Spring Boot入门指南:从零开始构建Web应用程序

Welcome Huihui's Code World ! !

接下来看看由辉辉所写的关于Spring Boot的相关操作吧 

目录

Welcome Huihui's Code World ! !

 一.Spring Boot是什么

二.为什么要使用Spring Boot

三.怎么在IDEA中使用Spring Boot

1.创建新的Spring Boot 项目:

2.编写Spring Boot 应用程序:

项目结构说明

properties文件转换成yml文件

3.运行Spring Boot 应用程序:

四. Spring Boot 集成

1.集成JDBC

2.集成Mybatis

Mybatis逆向生成代码

配置数据源

逆向生成代码

测试

​3.集成Pagehelper

4.集成Druid数据库连接池

5.集成Log日志

五.易错以及注意点总结

 1.代码编写位置

​2.配置文件的格式选择

3.mapper所在包必须在启动类中开启扫描

4.配置数据源出现的时区错误


 一.Spring Boot是什么

        Spring Boot是一个基于Spring框架的开源应用程序框架,它大大简化了Spring应用程序的开发过程。Spring Boot提供了一种快速且简单的方式来创建基于Spring的应用程序,同时也提供了许多开箱即用的功能,包括嵌入式Web服务器、安全性、指标监控、外部化配置等。由于Spring Boot的高度集成和自动配置,开发人员可以更加专注于业务逻辑的开发,从而提高了开发效率

        Spring Boot还支持许多插件和扩展,使得开发人员可以方便地集成各种第三方库和工具,例如JPA、Spring Data、Thymeleaf等。此外,Spring Boot还支持构建微服务应用程序,开发人员可以使用Spring Cloud框架来实现微服务的注册和发现、负载均衡、断路器等功能。

        总之,Spring Boot是一个非常方便、易用且强大的开发框架,使得开发人员可以更加专注于业务逻辑的实现,而不用花费大量时间和精力在繁琐的配置和集成上

❗❗注意❗❗

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

二.为什么要使用Spring Boot

  1. 快速开发Spring Boot提供了大量的自动配置功能,避免了开发人员手动配置繁琐的XML文件和注解,从而缩短了开发时间。

  2. 简化配置:Spring Boot支持外部化配置,可以将配置信息放在外部文件中,减少了代码中硬编码的情况,也方便了应用程序的部署和管理。

  3. 易于维护:Spring Boot的模块化结构,使得应用程序的不同部分之间的耦合度降低,易于维护和扩展。

  4. 丰富的插件支持:Spring Boot支持很多插件和扩展,例如JPA、Spring Data、Thymeleaf等,可以方便地集成其他第三方库和工具。

  5. 高度集成:Spring Boot已经集成了许多常用的框架和组件,包括Spring MVC、Spring Data、Hibernate等,可以快速搭建一个完整的应用程序。

  6. 容易部署:Spring Boot支持嵌入式Web服务器,可以直接将应用程序打包成一个可运行的Jar文件,方便部署和运行。

三.怎么在IDEA中使用Spring Boot

1.创建新的Spring Boot 项目

  • 打开IntelliJ IDEA,创建一个Moudule
    • Spring Boot入门指南:从零开始构建Web应用程序_第1张图片
  • 在左侧菜单中选择“Spring Initializr”,然后点击“Next”。
    • Spring Boot入门指南:从零开始构建Web应用程序_第2张图片
    • 注意:我们点击NEXT之后可能会出现这个错误,当我出现这个错误的时候我先是大概看了一下这个错误是什么意思,我理解的大概意思就是这个URL有问题,起初我以为是我的URL路径写错了,我便重新去复制了一份url地址,结果还是不行。于是我就去网上找寻方法,有的说直接把https改成htt就行了,但是我试了之后还是不行,于是我就在Setting中的HTTP Proxy中配置我的URL了,但是发现还是不行,于是我便直接用了spring boot的网址进行下载了...【阿里源】,如果以后研究出来了,会单独发布一篇博文讲解的
    • Spring Boot入门指南:从零开始构建Web应用程序_第3张图片
  • 在弹出窗口中选择项目的基本信息,比如Group、Artifact等,然后点击“Next”
    • Spring Boot入门指南:从零开始构建Web应用程序_第4张图片
  • 在接下来的页面中选择需要使用的依赖,比如Spring Web、Spring Data JPA等,然后点击“Next”。
    • Spring Boot入门指南:从零开始构建Web应用程序_第5张图片
    • Spring Boot入门指南:从零开始构建Web应用程序_第6张图片

  • 最后指定项目的名称和位置,点击“Finish”即可创建Spring Boot项目
  • Spring Boot入门指南:从零开始构建Web应用程序_第7张图片

2.编写Spring Boot 应用程序

  • 在项目结构中,可以看到自动生成的Spring Boot应用程序的基本结构,包括主应用程序类(通常带有@SpringBootApplication注解)、控制器类、服务类等。
    • 项目结构说明

      • Spring Boot入门指南:从零开始构建Web应用程序_第8张图片
  • 可以在src/main/java目录下编写自己的Java类,例如控制器类、服务类等。
  • src/main/resources目录下编写配置文件,例如application.propertiesapplication.yml
    • properties文件转换成yml文件

      • spring boot中默认的配置文件的格式是properties文件,这个文件的格式不够清晰明了,一旦这个文件中的内容多了,我们想要寻找指定的配置会很麻烦,所以我们可以把它转换成yml文件,我们需要下载一个插件:Convert YAML and Properties File
        • Spring Boot入门指南:从零开始构建Web应用程序_第9张图片
        • 进入到properties文件中,右击》选择插件
          • ​​​​​​​Spring Boot入门指南:从零开始构建Web应用程序_第10张图片

3.运行Spring Boot 应用程序

  • 找到主应用程序类,右键点击该类,选择“Run 'Application'”即可运行Spring Boot应用程序。也可以使用快捷键Shift + F10运行应用程序。
  •  我们上面下载了一个Mybatis的插件,这个插件需要有数据源才行,我们这里先试着让项目跑起来,所以我们现在pom.xml中将mybatis的依赖注释掉
    • Spring Boot入门指南:从零开始构建Web应用程序_第11张图片
    • 这时候就可以运行项目了
      • Spring Boot入门指南:从零开始构建Web应用程序_第12张图片

四. Spring Boot 集成

1.集成JDBC

引入依赖


    org.springframework.boot
    spring-boot-starter-jdbc



    mysql
    mysql-connector-java
    5.1.44

修改application.yml文件

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf8
    username: 用户名
    password: 密码

2.集成Mybatis

引入依赖

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

修改application.yml文件

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

在启动类中添加@MapperScan({"com.zking.SpringBoot.mapper"})注解

package com.wh.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
//@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@MapperScan({"com.zking.SpringBoot.mapper"})
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

}

Mybatis逆向生成代码

配置数据源

以上我们已经整合了JDBC以及Mybatis,现在我们来配置一下数据源

Spring Boot入门指南:从零开始构建Web应用程序_第13张图片Spring Boot入门指南:从零开始构建Web应用程序_第14张图片如果我们没有下载相应的驱动依赖便会弹出一个警告弹窗,我们在这里选择download就行

Spring Boot入门指南:从零开始构建Web应用程序_第15张图片

这里出现了一个错误,表示JDBC驱动程序无法识别MySQL服务器时区设置

Spring Boot入门指南:从零开始构建Web应用程序_第16张图片

所以我们直接在URL中添加一个时区的配置就好啦

serverTimezone=UTC

Spring Boot入门指南:从零开始构建Web应用程序_第17张图片Spring Boot入门指南:从零开始构建Web应用程序_第18张图片逆向生成代码

Spring Boot入门指南:从零开始构建Web应用程序_第19张图片Spring Boot入门指南:从零开始构建Web应用程序_第20张图片Spring Boot入门指南:从零开始构建Web应用程序_第21张图片Spring Boot入门指南:从零开始构建Web应用程序_第22张图片

测试

Spring Boot入门指南:从零开始构建Web应用程序_第23张图片

数据便可以显示出来了

Spring Boot入门指南:从零开始构建Web应用程序_第24张图片3.集成Pagehelper

引入依赖


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


    org.springframework.boot
    spring-boot-starter-aop

修改application.yml文件

#pagehelper分页插件配置
pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

service以及serviceimpl中的方法都需要传入pagebean这个参数,并且在serviceimpl的方法上需要使用自定义的分页注解

controller层

package com.wh.springboot.controller;
import com.github.pagehelper.PageHelper;
import com.wh.springboot.mapper.TBookMapper;
import com.wh.springboot.page.PageAnnotation;
import com.wh.springboot.page.PageBean;
import com.wh.springboot.service.IBookService;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * @author是辉辉啦
 * @create 2023-12-12-14:44
 */
@RestController
@RequestMapping("/book")
public class BookController {
@Autowired
private IBookService bookService;
@RequestMapping("/list")

public Object hello(PageBean pageBean){
    PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
 return bookService.select(pageBean);
    }
}

分页的自定义注解

package com.wh.springboot.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.wh.springboot.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;
    }

}

PageBean

package com.wh.springboot.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));
    }

}

如果修改了依赖中的版本还是不可以的话,那就退出IDEA再进来一次就好啦

Spring Boot入门指南:从零开始构建Web应用程序_第25张图片Spring Boot入门指南:从零开始构建Web应用程序_第26张图片这样便可以有分页效果了

Spring Boot入门指南:从零开始构建Web应用程序_第27张图片Spring Boot入门指南:从零开始构建Web应用程序_第28张图片4.集成Druid数据库连接池

引入依赖


    com.alibaba
    druid-spring-boot-starter
    1.2.15

修改application.yml文件

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

Spring Boot入门指南:从零开始构建Web应用程序_第29张图片

进入到这个页面之前需要登录,登录的密码以及用户名是自己在yml文件中配置的

Spring Boot入门指南:从零开始构建Web应用程序_第30张图片

5.集成Log日志

修改application.yml文件

#log日志配置
logging:
    level:
        #指定项目目录输入日志信息
        com.wh.springboot.mapper: debug

Spring Boot入门指南:从零开始构建Web应用程序_第31张图片

五.易错以及注意点总结

 1.代码编写位置

所有编写的代码都必须写在与启动类同级的位置中,不然的话,你写的代码它是无效的,因为它是无法被扫描的

Spring Boot入门指南:从零开始构建Web应用程序_第32张图片2.配置文件的格式选择

建议使用yml文件的格式,因为yml文件的格式更加清晰,我们能够一眼看出来各种配置信息的层级关系

properties的文件格式

Spring Boot入门指南:从零开始构建Web应用程序_第33张图片yml的文件格式

Spring Boot入门指南:从零开始构建Web应用程序_第34张图片大家可以自行观看上面两中文件的格式,对比下来也不难发现,yml文件的层级更加的清晰

3.mapper所在包必须在启动类中开启扫描

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

如果没有开启扫描,则无法启动项目

Spring Boot入门指南:从零开始构建Web应用程序_第35张图片4.配置数据源出现的时区错误

出现的错误

Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.

我们只需要添加serverTimezone=UTC这个时区的设置便可以啦

Spring Boot入门指南:从零开始构建Web应用程序_第36张图片

好啦,今天的分享就到这了,希望能够帮到你呢!dede

你可能感兴趣的:(Spring,Boot,spring,boot,java,后端)