[SpringBoot]之入门级教学分享

2023-12-15 21:23:22

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

🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的博客专栏《SpringBoot开发》。🎯🎯

🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁

前言

? ? ? ? 很久没有与老铁们分享开发知识了,在分享之前想必老铁们都有了解学习过SpringMVC、SpringSSM等等一些有关spring的相关知识,今天给大家带来的也是与Spring相关的,它就是——SpringBoot,让我们一起来探索SpringBoot的知识领域吧。

一、SpringBoot简介

1.概述

????????Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。众所周知 Spring 应用需要进行大量的配置,各种 XML 配置和注解配置让人眼花缭乱,且极容易出错,因此 Spring 一度被称为“配置地狱”。为了简化 Spring 应用的搭建和开发过程,Pivotal 团队在 Spring 基础上提供了一套全新的开源的框架,它就是Spring Boot。

? ? ? ? 总之,SpringBoot就是一个模版,是SpringMVC的脚手架。

2. 特点及优势

SpringBoot的特点及优势
特点或优势说明
独立运行Spring Boot可以作为独立的应用程序运行,不需要部署到其他应用服务器或容器中,真正实现了Java应用“Write Once, Run Anywhere”。
自动配置Spring Boot会自动配置大部分常用的配置,如数据源、消息队列、安全等,让开发者能够快速上手并专注于业务逻辑。
嵌入式Web服务器Spring Boot内置了Tomcat和Jetty等Web服务器,可以快速搭建Web应用程序。
提供大量starterSpring Boot提供了大量的starter,让开发者能够快速引入并使用第三方库和框架。
丰富的插件支持Spring Boot支持各种插件,如HikariCP、Elasticsearch、Redis等,方便开发者集成和管理这些插件。
良好的性能Spring Boot使用了各种优化技术,如缓存、压缩、分页等,使得应用程序具有良好的性能和响应速度。
易于监控Spring Boot提供了内置的监控功能,可以方便地监控应用程序的运行状态和性能指标。
安全性Spring Boot提供了多种安全特性,如密码加密、安全认证、跨域访问等,保障应用程序的安全性。
易于扩展Spring Boot使用了基于Java的注解配置方式,可以方便地扩展和定制其功能。
社区活跃Spring Boot拥有庞大的社区和支持,开发者可以方便地获取帮助和解决问题。

总之,Springboot是为了提升Spring开发者的工具,特点就是敏捷式、快速开发。

二、SpringBoot快速入门

1. 创建项目

????????首先我们点击打开IDEA开发工具,然后我们点击New Project按钮进行创建一个新的项目文件。

? ? ? ? ?然后它会弹出一个新的窗口,我们对其进行相应的填写,点击Next进行下一步操作。

注: 在这里我有几点建议,如下:

  • 选择https://start.spring.io为下载网址路径的话是默认使用SpringBoot官网的下载路径,下载速度相对于慢,对于的Java的版本要求比较高,只允许使用Java17和Java21。所以推荐使用阿里云的下载路径网址,使用阿里云的相对于下载快,Java的版本要求低(8,11,17,21)。
  • jdk与java版本选择自己电脑上下载的版本。

阿里云下载网址路径:https://start.aliyun.com/

? ? ? ? 然后选择SpringBoot所需的相关依赖。

? ? ? ? 下面是我推荐使用的一些依赖:

  • Developer Tools:Lombok(提供实体对象get/set方法)、Spring Boot DevTools(类似于jreb,是热加载)
  • Web:Spring Web (相当于SpringMVC)
  • SQL:MySQL Driver(mysql数据库)、Mybatis Framework(mybatis)
  • SpringBoot的版本不要选择3以上的即可。

最后点击create创建即可。

?????????如果是重新安装的IDEA的话,可以去看往期的博客去查看Mybatis如何集成到IDEA开发工具中,以及所需下载的插件。

?2. 项目文件说明

? ? ? ? 接下来我们简单说一下生成的文件作用

?

? ? ? ? 在配置好之后我们可以启动项目,访问他自动生成的Controller层。?

? ? ? ? 注意事项:

  • 我们编写的源码必须存放在SpringBoot自动生成的启动类的同级目录下,不管是新建文件夹还是类,都是如此否则无法识别代码。
  • application.properties文件名不能修改,推荐使用yml文件不推荐使用properties文件

3. yml文件的修改

1. 直接修改application.properties文件后缀????????

? ? ? ? 右击application.properties文件,选择重命名,将properties文件后缀修改为yml后缀,最后将文件的内容格式也修改为yml文件格式即可。

2. 下载yml文件转换插件

? ? ? ? 我们在IDEA中下载Convert YAML and Properties File这个插件,然后右击文件会显示Convert YAML and Properties File该选项,点击即可转换。

4. 项目初步启动

? ? ? ? 先将mysql与mybatis的依赖注释掉,否则无法启动该项目。点击自带生成的启动类启动即可。

? ? ? ? 我们访问SpringBoot自带生成的Controller层。

????????http://127.0.0.1:8080/hello?name=lisi

? ? ? ? 说明项目成功启动并且访问。?然后将之前注释的依赖还原回去。

5. 集成Mybatis

? ? ?将MyBatis的本修改与SpringBoot版本进行修改。如下图

?????????因为我们采用的SpringBoot的版本是2.6.13所以我们的Mybatis的版本使用2.3.0

?

? ? ? ? ?Mybatis的依赖版本修改号之后我们进行yml文件的配置。同时连接数据库。

连接数据库?

?生成数据库表对应的实体类

?application.yml文件配置


#    配置mybatis,必须配置的mapper.xml
mybatis:
    #mapper.xml所在位置
    mapper-locations: classpath*:mappers/*xml
    #    配置别名扫描,实体类所在包名
    type-aliases-package: com.yx.sboot.pojo

#    服务访问的端口号
server:
    port: 8080
spring:
#    数据源配置
    datasource:
        url: jdbc:mysql://localhost:3306/bookshop
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver

6. 编写查询流程

6.1 查询方法

6.2 mapper.xml

?

?6.3 Service类和实现类

?

6.4 控制类

?

? ? ? ? ?我们直接启动项目,但会出现一个报错

? ? ? ? ?解决方案如下

? ? ? ? 重新运行访问即可。?

三、?集成插件

1. 分页插件

1.1 依赖注入

1.2 yml配置

1.3 分页工具类

PageBean.java

package com.yx.sboot.util;

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));
    }

}

? ? ? ? 对其控制层进行对应的修改,如下图

? ? ? ? ?启动项目访问效果

?

? ? ? ? 注:如果你使用的分页插件版本是1.4.6以下运行可能会报一个循环错误??

2. 切面注入

PageAspect.java

package com.yx.sboot.aop;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.yx.sboot.util.PageBean;
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.java

package com.yx.sboot.aop;

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 {
}

? ? ? ? 切面运用,如下图所示

?

?

?

? ? ? ? ?运行结果展示

3. 整合Druid数据库连接池

3.1 依赖注入

3.2 yml文件配置

        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

? ? ? ? ?配置成功之后直接运行即可,登陆以下网址可以对其项目进行数据请求的监视

网址:德鲁伊监视器

?

? ? ? ? 以上演示德鲁伊的使用?

4. 集成日志

4.1 yml文件配置

?运行测试结果如下

?本期博客分享到此结束

感谢老铁们的观看

三连加关注支持博主哦

?

?

文章来源:https://blog.csdn.net/weixin_74352229/article/details/134945161
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。