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

欢迎来到我的CSDN主页!

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

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

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

Java方文山的个人主页

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

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

请添加图片描述

目录

一、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】从入门到精通的快速开发指南_第1张图片

②点击Next下一步

【SpringBoot】从入门到精通的快速开发指南_第2张图片

 ③勾选所需依赖

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

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

2.1.1.测试springboot

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

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

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

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

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

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

@RestController
public class HelloController {

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

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

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

2.2.集成mybatis

2.2.1.properties修改为.yml

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

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

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

原properties

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

修改成yml

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

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

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

 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】从入门到精通的快速开发指南_第11张图片

 2.2.3.生成mapper代码

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

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

②填写相应信息

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

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

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

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

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

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

【SpringBoot】从入门到精通的快速开发指南_第17张图片

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】从入门到精通的快速开发指南_第18张图片

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】从入门到精通的快速开发指南_第19张图片

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

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

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】从入门到精通的快速开发指南_第21张图片

2.4.集成druid

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

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

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

 配置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】从入门到精通的快速开发指南_第24张图片

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

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

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

三、注意事项

3.1.SpringBoot换源失败

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

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

解决办法:

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

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

注意选择Custom

3.2.代码不加载

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

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

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】从入门到精通的快速开发指南_第29张图片

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

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

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

 请添加图片描述

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

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

你可能感兴趣的:(SpringBoot,spring,boot,mybatis,pagehelper,druid)