【Spring Boot】快速入门

一、引言

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版本。

2、选择依赖

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

目录介绍

  • 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文件。

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

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

        <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>

4、运行

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

三、集成mybatis数据库连接

1、配置

在application.yml里面配置MySQLmybatis

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

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.Drivertype: com.zaxxer.hikari.HikariDataSourceurl: jdbc:mysql://localhost:3306/bookshop?useUnicode=true&characterEncoding=utf8username: rootpassword: 123456

确保你的pom.xml里面有mybatisMySQL的依赖

2、生成代码

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

用idea连接你的数据库右键你的数据表

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

选择Lombok

3、测试

在实体类添加有参无参

编写号调用的接口方法等

编写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 {@Autowiredprivate TBookService tBookService;// http://127.0.0.1:8080/book/name=lisi@RequestMapping("/list")public Object list() {List<TBook> tBooks = tBookService.selectAll();return tBooks;}}

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

启动测试:http://localhost:8080/book/list

四、集成pagehelper分页

1、配置插件及文件

pom.xml里面添加插件

        <!--   分页插件     --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency>

配置application.yml

#pagehelper分页插件配置
pagehelper:# 数据库方言helperDialect: mysql# 是否启用 reasonablereasonable: 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 {@Autowiredprivate TBookMapper tBookMapper;@Override
//    分页注解@PageAnnotationpublic List<TBook> selectAll(PageBean pageBean) {return tBookMapper.selectAll();}}

Controller层方法调用

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

运行结果:

五、集成druid数据库连接池

1、导入插件

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

2、配置

在yml里面配置

    type: com.alibaba.druid.pool.DruidDataSourcedruid:# 初始化时建立物理连接的个数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,必须配置大于0max-pool-prepared-statement-per-connection-size: 20# 配置监控统计拦截的filters,去掉后监控界面sql无法统计filter:stat:merge-sql: trueslow-sql-millis: 5000# 基础监控配置web-stat-filter:enabled: trueurl-pattern: /*exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"session-stat-enable: truesession-stat-max-count: 100stat-view-servlet:enabled: trueurl-pattern: /druid/*reset-enable: truelogin-username: admin #设置监控页面的登录名和密码login-password: adminallow: 127.0.0.1 #deny: 192.168.1.100

六、整合Log日志

1、配置

配置application.yml

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

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

七、打包

1、打包方式

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

2、更改配置

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

<skip>true</skip>改成false

3、打包

我们右键选择按照步骤进行操作

target里面找到我们的jar

4、运行

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

java -jar springboot01-0.0.1-SNAPSHOT.jar

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

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

🐉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压缩响应内容,减少传输的数据量。
    • 优化代码逻辑,避免冗余计算和重复查询。

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

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

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

相关文章

【RocketMQ-Install】Windows 环境下安装 RocketMQ 及基础命令的使用

【RocketMQ-Install】Windows 环境下 安装本地 RocketMQ 及基础命令的使用 1&#xff09;下载 RocketMQ 安装包1.1.官网下载&#xff08;推荐&#xff09;1.2.Git 下载1.3.安装环境要求说明 2&#xff09;Windows 安装3&#xff09;基础命令测试 1&#xff09;下载 RocketMQ 安…

多分类预测 | MATLAB实现CNN-LSTM-Attention多输入分类预测

分类预测 | MATLAB实现CNN-LSTM-Attention多输入分类预测 分类效果 需要源码和数据的私信&#xff08;微微有偿取哦&#xff09;

通义千问 Qwen-72B-Chat在PAI-DSW的微调推理实践

01 引言 通义千问-72B&#xff08;Qwen-72B&#xff09;是阿里云研发的通义千问大模型系列的720亿参数规模模型。Qwen-72B的预训练数据类型多样、覆盖广泛&#xff0c;包括大量网络文本、专业书籍、代码等。Qwen-72B-Chat是在Qwen-72B的基础上&#xff0c;使用对齐机制打造的…

主宰无双H5:WIN学习手工服务端通用视频教程及GM授权物品后台,支持三网H5玩法介绍

标题&#xff1a;主宰无双H5&#xff08;游戏源码&#xff09;&#xff1a;WIN学习手工服务端通用视频教程及GM授权物品后台&#xff0c;支持三网H5玩法的百科 一、引言 随着互联网的快速发展&#xff0c;H5游戏逐渐成为人们休闲娱乐的重要方式。主宰无双H5游戏源码作为一款深…

Android解决报错 superclass access check failed: class

Android解决报错 superclass access check failed: class 前言&#xff1a; 最近在打开之前的项目demo时&#xff0c;出现一个错误Cause: superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner 1.错误信息如下&#xff1a; Executio…

《Linux C编程实战》笔记:目录操作

目录的创建和删除 mkdir函数 #include <sys/stat.h> #include <sys/types.h> int mkdir(const char *pathname, mode_t mode); mkdir创建一个新的空目录。空目录中会自动创建.和..目录项。所创建的目录的存取许可权由mode (mode &~umask)指定。 新创建目录的…

[Linux] LVS负载均衡群集+NAT部署

一、LVS负载均衡群集知识 1.1 群集的的定义及意义 Cluster&#xff0c;集群&#xff08;也称群集&#xff09;由多台主机构成&#xff0c;但对外只表现为一一个整体&#xff0c;只提供一-个访问入口(域名或IP地址)&#xff0c; 相当于一台大型计算机。 群集的作用&#xff1…

vue3使用Mars3D写区块地图

效果图 引入相关文件 因为我也是第一次使用&#xff0c;所以我是把插件和源文件都引入了&#xff0c;能使用启动 源文件 下载地址&#xff1a; http://mars3d.cn/download.html 放入位置 在index.html中引入 <!--引入cesium基础lib--><link href"/static/C…

Kubernetes 容器编排 -- 1

前言 知识扩展 早在 2015 年 5 月&#xff0c;Kubernetes 在 Google 上的搜索热度就已经超过了 Mesos 和 Docker Swarm&#xff0c;从那儿之后更是一路飙升&#xff0c;将对手甩开了十几条街,容器编排引擎领域的三足鼎立时代结束。 目前&#xff0c;AWS、Azure、Google、阿里…

软考科目如何选择?

软考科目繁多&#xff0c;让许多学弟学妹感到困惑&#xff0c;不知道该选择哪个科目。以下是一些建议&#xff0c;可以根据个人实际需求选择备考的科目。 1、初级是可选的 软考初级非常简单&#xff0c;适合刚刚入门学习的朋友报考。对于一些有基础的朋友&#xff0c;建议直接…

【从零开始学习--设计模式--装饰者模式】

返回首页 前言 感谢各位同学的关注与支持&#xff0c;我会一直更新此专题&#xff0c;竭尽所能整理出更为详细的内容分享给大家&#xff0c;但碍于时间及精力有限&#xff0c;代码分享较少&#xff0c;后续会把所有代码示例整理到github&#xff0c;敬请期待。 此章节介绍装…

java实现局域网内视频投屏播放(二)爬虫

代码链接 视频播放原理 大多视频网站使用的是m3u8&#xff0c;m3u8其实不是一个真正的视频文件&#xff0c;而是一个视频播放列表&#xff08;playlist&#xff09;。它是一种文本文件&#xff0c;里面记录了一系列的视频片段&#xff08;segment&#xff09;的网络地址。这些…

原来定时发朋友圈设置这么简单?看完我也会了

目前微信作为最大的社交平台之一&#xff0c;吸引了众多使用者。你是否听过有些朋友感叹这么多微信号&#xff0c;需要每天手动发布朋友圈&#xff0c;任务很繁琐呢&#xff1f;是否希望可以事先设置好定时发送的功能&#xff0c;让朋友圈自动更新&#xff0c;省去手动发送的麻…

初探栈溢出(下)

0x04 漏洞利用 作为脚本小子&#xff0c;先跑一下写好了的exploit脚本。 打开HackSysEVDExploit.sln文件&#xff0c;直接在vs2019上编译即可。 将生成的HackSysEVDExploit.exe拷贝至win7&#xff0c;执行如下命令 直接可以获取system权限。 那么只跑一下脚本肯定不行&#…

世微 锂电池保护IC DW01 充电器检测过充保护SOT23-6

一、 描述 DW01A 是一个锂电池保护电路&#xff0c;为避免锂电池因过充电、过放电、电流过大导致电池寿命缩短或电池被损坏而设计的。它具有高精确度的电压检测与时间延迟电路。 二、 主要特点 工作电流低 过充检测 4.3V&#xff0c;过充释放 4.05V&#xff1b; 过放检测 2.4…

黑马头条--day01.环境搭建

一.前言 该项目学习自黑马程序员&#xff0c;由我整理如下&#xff0c;版权归黑马程序员所有 二.环境搭建 1.数据库 第一天&#xff0c;先创建如下库和表: sql文件如下: CREATE DATABASE IF NOT EXISTS leadnews_user DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_…

LeetCode(62)删除排序链表中的重复元素 II【链表】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 删除排序链表中的重复元素 II 1.题目 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1…

【JavaEE】锁的策略

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

20.Java程序设计-基于SSM框架的安卓掌上校园生活系统的设计与实现

摘要&#xff1a; 随着移动互联网技术的快速发展&#xff0c;校园生活信息化成为提高学校管理效率、方便学生生活的关键。本研究以基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的技术体系为基础&#xff0c;致力于设计与实现一款功能强大、高效稳定的安卓…

现代雷达车载应用——第2章 汽车雷达系统原理 2.6节 雷达设计考虑

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.6 雷达设计考虑 上述部分给出了汽车雷达基本原理的简要概述。在雷达系统的设计中&#xff0c;有几个方面是必不可少的&#xff0c;它们决定了雷达系…