【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

②点击Next下一步

 ③勾选所需依赖

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

2.1.1.测试springboot

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

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

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

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

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

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

2.2.集成mybatis

2.2.1.properties修改为.yml

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

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

原properties

修改成yml

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

 2.2.2.添加mybatis配置文件

配置pom.xml,导入依赖:

         <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version></dependency>

在创建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"})

 2.2.3.生成mapper代码

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

②填写相应信息

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

 ④生成mapper代码

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

2.2.4.测试连接数据库

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

mapper.xml

    <select id="selectBook"  resultMap="BaseResultMap">select<include refid="Base_Column_List" />from t_book</select>

mapper

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

service

public interface TBookService {List<TBook> selectBook();
}

serviceimpl

@Service
public class TBookServiceImpl implements TBookService {@Autowiredprivate TBookMapper tBookMapper;@Overridepublic List<TBook> selectBook() {return tBookMapper.selectBook();}
}

controller

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

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

2.3.集成pagehelper

2.3.1.基础使用pagehelper

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

配置pom.xml,导入依赖:

    <!-- 分页依赖--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

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

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

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

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

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<TBook> selectBook(PageBean pageBean);}

 serviceimpl层

@Service
public class TBookServiceImpl implements TBookService {@Autowiredprivate TBookMapper tBookMapper;@PageAnnotation@Overridepublic List<TBook> selectBook(PageBean pageBean) {return tBookMapper.selectBook();}
}

演示效果:

2.4.集成druid

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

 配置pom.xml,导入依赖:

    <!--druid连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.15</version></dependency>

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

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

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

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

三、注意事项

3.1.SpringBoot换源失败

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

解决办法:

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

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

注意选择Custom

3.2.代码不加载

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

3.3.yml文件注意格式

正确的层级关系

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

users:- name: Aliceage: 28gender: Female- name: Bobage: 34gender: Male

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

错误的层级关系

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

users:
- name: Aliceage: 28gender: Female
- name: Bobage: 34gender: Male

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

3.4.IDEA连接数据库错误

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

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

 请添加图片描述

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/216310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化测试 (一) 12306火车票网站自动登录工具

还记得2011年春运&#xff0c;12306火车票预订网站经常崩溃无法登录吗。 今天我们就开发一个12306网站自动登录软件。 帮助您轻松订票 Web的原理就是&#xff0c;浏览器发送一个Request给Web服务器&#xff0c;Web服务器处理完这个请求之后发送一个HTTP Response给浏览器。 …

为什么近期白酒市场股票暴跌?2024年中高端酒企发展如何撬动市场?

为什么近期白酒市场股票暴跌&#xff1f;2024年中高端酒企发展如何撬动市场&#xff1f; 近期白酒市场股票暴跌的原因主要有两个方面&#xff1a;一是宏观经济环境的不景气&#xff0c;导致投资者对白酒行业的未来发展持谨慎态度&#xff1b;二是白酒市场竞争激烈&#xff0c;龙…

深度学习——第3章 Python程序设计语言(3.7 matplotlib库)

3.7 matplotlib库 目录 1 matplotlib库简介 2 pyplot的plot函数 3 matplotlib基础绘图函数示例 数据可视化有助于深度理解数据。 本节介绍绘制图形的基本方法。 1. matplotlib库简介 matplotlib官网 1.1 matplotlib库概述 matplotlib是Python优秀的数据可视化第三方库&a…

PyQt6 表单布局Form Layout (QFormLayout)

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计43条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

easyexcel根据模板下载文件

为什么要使用EasyExcel easyExcel是阿里巴巴下在POI的基础上二次开发的开源api&#xff0c;以使用简单、节省内存著称。 POI由于在操作excel时是先将所有数据都读入内存后&#xff0c;再写入文件&#xff0c;比较消耗内存&#xff0c;特别是大数据量时&#xff0c;容易出现OOM…

(分页模拟)简单模拟操作系统分页管理

简单模拟一下内存分页&#xff0c;分配和回收。这里我就用最最最简化的方式没有技术含量。 每个进程维护一张页表&#xff0c;然后操作系统用位示图模拟内存分配情况(0: 未分配&#xff0c;1已经分配) import java.util.*;public class Main {public static int PAGE_COUNT …

Weblogic 数据库连接池溢出解决方法

引言 在信息运维工作中发现&#xff0c;由于部分应用系统编写的代码不够健壮&#xff0c;对于数据库连接没有及时进行回收处理&#xff0c;造成Weblogic数据库连接池溢出&#xff0c;影响系统的稳定运行。其实Weblogic提供了数据库连接的回收机制&#xff0c;可以将超过配置时…

基于redisson实现发布订阅(多服务间用避坑)

前言 今天要分享的是基于Redisson实现信息发布与订阅&#xff08;以前分享过直接基于redis的实现&#xff09;&#xff0c;如果你是在多服务间基于redisson做信息传递&#xff0c;并且有服务压根就收不到信息&#xff0c;那你一定要看完。 今天其实重点是避坑&#xff0…

【华为数据之道学习笔记】3-9以特征提取为核心的非结构化数据管理

随着业务对大数据分析的需求日益增长&#xff0c;非结构化数据的管理逐 渐成为数据管理的重要组成部分。非结构化数据包括无格式文本、各类格式文档、图像、音频、视频等多种异构的格式文件&#xff0c;较之结构化数据&#xff0c;其更难标准化和理解&#xff0c;因此在存储、检…

第二证券:结构性行情或将延续 泛科技有望继续走强

展望未来&#xff0c;当时已进入重要的方针窗口期&#xff0c;能否有超预期的新方针推出是改变商场的要害。但复盘2023年的行情来看&#xff0c;过早买卖方针预期的成功率并不高&#xff0c;因而主张该方位以防御性资产为主&#xff0c;高股息资产从本年9月份至今现已调整了2个…

MMdetection3.0 训练DETR问题分析

MMdetection3.0 训练DETR问题分析 针对在MMdetection3.0框架下训练DETR模型&#xff0c;验证集AP值一直为0.000的原因作出如下分析并得出结论。 条件&#xff1a; 1、NWPU-VHR-10数据集&#xff1a;共650张&#xff0c;训练&#xff1a;验证611&#xff1a;39&#xff1b; 2、…

FFmpeg-基础组件-AVFrame

本章主要介绍FFmpeg基础组件AVFrame. 文章目录 1.结构体成员2.成员函数AVFrame Host内存的获取 av_frame_get_bufferAVFrame device内存获取av_hwframe_get_buffer&#xff08;&#xff09; 1.结构体成员 我们把所有的代码先粘贴上来&#xff0c;在后边一个一个解释。 typede…

[MySQL]SQL优化之sql语句优化

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、索引优化 回顾&#xff1a; &#x1f4d5;索引分类&#xff1a; &#x1f4d5;索引失效&#xff1a; &#x1f4d5;设计原则&#xff1a; &#x1f4d5;SQL性能分析 二、SQL优化 语句优化 &#x1f4d…

越南语翻译,人工翻译哪个值得信赖?

近年来&#xff0c;随着中越两国的交流日益频繁&#xff0c;为了促进双方的交流与理解&#xff0c;市场上对越南语翻译的需求也日益增加。那么&#xff0c;如何做好越南语翻译&#xff0c;人工翻译哪家公司值得信赖呢&#xff1f; 据了解&#xff0c;中文翻译越南语是一项颇具挑…

科技与艺术相结合,虚拟人裸眼3D动画亮相城市商圈

随着元宇宙概念的火爆&#xff0c;虚拟制作技术的快速发展&#xff0c;虚拟人可以将虚拟世界与现实世界相结合&#xff0c;为用户带来沉浸式体验。如虚拟人壬子希以裸眼3D动画的形式亮相城市商圈&#xff0c;助力文旅以科技与艺术相结合的形式&#xff0c;展现城市文化与科技成…

【数据结构(九)】顺序存储二叉树(2)

文章目录 1. 相关概念2. 顺序存储二叉树的遍历 1. 相关概念 从数据存储来看&#xff0c;数组存储方式和树的存储方式可以相互转换&#xff0c;即数组可以转换成树&#xff0c;树也可以转换成数组&#xff0c;看右面的示意图。 转换原则:     1.上图的二叉树的结点&#xff…

每日一练【长度最小的子数组】

一、题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 二、题目解析 经…

DeepDrive双转子径向磁通电机

DeepDrive公司开发的是一种高效、高性能、低成本的双转子径向磁通电机系统&#xff08;含控制器&#xff09;。该系统具有较高的成本效益和资源效率&#xff0c;并拥有更高的能效&#xff0c;能显著提升电动车续航能力&#xff0c;同时亦能有效控制生产成本&#xff0c;减少自然…

3_流量预测综述阅读_Cellular traffic prediction with machine learning: A survey

为了方便学习英语书写&#xff0c;总结的一些话用英语书写 ♥目录♥ 0、文献来源and摘要1、introduction2、prediction problems and datasets2.1 prediction problems2.2 dataset&#xff08;1&#xff09;Telecom Italia 意大利电信 2015&#xff08;2&#xff09;City Cell…

AI写文案工具大全介绍,免费的AI写文案工具

随着人工智能技术的不断发展&#xff0c;AI写文案成为一个备受关注的话题。本文将专注于AI写文案工具&#xff0c;深入探讨各类好用的AI写文案软件。 AI写文案工具介绍&#xff1a; OpenAIs GPT系列&#xff1a; GPT-3是由OpenAI开发的语言模型&#xff0c;能够生成高质量的文…