【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.rhkb.cn/news/218720.html

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

相关文章

Qt 文字描边(基础篇)

项目中有时需要文字描边的功能 1.基础的绘制文字 使用drawtext处理 void MainWindow::paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);painter.setRenderHint(QPainter::SmoothPixmapTransform, true);painte…

lwIP 细节之六:connected、sent、poll 回调函数是何时调用的

使用 lwIP 协议栈进行 TCP 裸机编程&#xff0c;其本质就是编写协议栈指定的各种回调函数。将你的应用逻辑封装成函数&#xff0c;注册到协议栈&#xff0c;在适当的时候&#xff0c;由协议栈自动调用&#xff0c;所以称为回调。 注&#xff1a;除非特别说明&#xff0c;以下内…

RTMP流设置超时时间失败

使用FFmpeg(版本是5.0.3&#xff09;将rtmp流作为输入&#xff0c;设置超时时间&#xff08;使用-timeout参数&#xff09;&#xff0c;结果报错&#xff1a;Cannot open Connection tcp://XXX:1935?listen&listen_timeout 通过./ffmpeg -help full 命令查看FFmpeg帮助&am…

Flutter工具安装与环境搭建

1、下载 Flutter SDK&#xff0c;下载完成后&#xff0c;在需要放置SDK的地方解压即可。 注意&#xff1a; 请勿将 Flutter 有特殊字符或空格的路径下。请勿将 Flutter 安装在需要高权限的文件夹内&#xff0c;例如 C:\Program Files\。 2、配置环境变量 例如&#xff1a; …

YOLOv8改进 | 2023主干篇 | 替换LSKNet遥感目标检测主干 (附代码+修改教程+结构讲解)

一、本文介绍 本文给大家带来的改进内容是LSKNet&#xff08;Large Kernel Selection, LK Selection&#xff09;&#xff0c;其是一种专为遥感目标检测设计的网络架构&#xff0c;其核心思想是动态调整其大的空间感受野&#xff0c;以更好地捕捉遥感场景中不同对象的范围上下…

[Linux] Apache的配置与运用

一、web虚拟主机的构台服务器上运行多个网站&#xff0c;每个网站实际上并不独立占用整个服务器&#xff0c;因此称为"虚拟"虚拟主机的虚拟主机服务可以让您充分利用服务器的硬件资源&#xff0c;大大降低了建立和运营网站的成本 Httpd服务使构建虚拟主机服务器变得容…

Axure元件基本介绍进阶

Axure元件基本介绍进阶 1.Axure元件基本介绍1.在 Axure 中&#xff0c;元件是构建原型的基本构成单元&#xff0c;能够帮助设计师快速创建、重复使用和管理设计元素。以下是 Axure 中元件的基本介绍&#xff1a;1.基本元件&#xff1a; 2.基本元件的使用一.【举例说明】积木&am…

如何禁止服务器自动休眠

如何禁止服务器自动休眠 有时候服务器自己休眠&#xff0c;导致系统web站点无法访问&#xff0c;下面是解决办法&#xff01; 禁止服务器自动进入休眠状态的具体方法可能会因使用的Linux发行版而有所不同。以下是一些通用的方法&#xff0c;你可以根据你的系统选择适用的&#…

DS考研真题总结——客观题(1)

开始整理真题中的客观小题&#xff0c;至于和算法有关的大题统一最后整理~ 定义背诵&#xff1a;数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效…

深度学习基本概念

1.全连接层 全连接层就是该层的所有节点与输入节点全部相连&#xff0c;如图所 示。假设输入节点为X1&#xff0c; X 2&#xff0c; X 3&#xff0c;输出节点为 Y 1&#xff0c; Y 2&#xff0c; Y 3&#xff0c; Y 4。令 矩阵 W 代表全连接层的权重&#xff0c; W 12也就代表 …

初级数据结构(五)——树和二叉树的概念

文中代码源文件已上传&#xff1a;数据结构源码 <-上一篇 初级数据结构&#xff08;四&#xff09;——队列 | NULL 下一篇-> 1、树结构&#xff08;Tree&#xff09; 1.1、树结构的特点 自然界中的树由根部开始向上生长&#xff0c;随机长出分支&…

ArcGIS Pro SDK文件选择对话框

文件保存对话框 // 获取默认数据库var gdbPath Project.Current.DefaultGeodatabasePath;//设置文件的保存路径SaveItemDialog saveLayerFileDialog new SaveItemDialog(){Title "Save Layer File",OverwritePrompt true,//获取或设置当同名文件已存在时是否出现…

鸿蒙开发编辑器设置

首先需要知道如何打开设置页面&#xff0c;以下所有设置都需要在设置界面中进行修改&#xff0c;有三种方式可以打开&#xff0c; 1、编辑器左上角file菜单下的Setting菜单。 2、编辑器右上角的设置按钮 3、按快捷键 ctrlalts 注意不要和其他软件案件重复。 一、设置每次打开…

Netty常见的设计模式

简介 设计模式在软件开发中起着至关重要的作用&#xff0c;它们是解决常见问题的经过验证的解决方案。而Netty作为一个优秀的网络应用程序框架&#xff0c;同样也采用了许多设计模式来提供高性能和可扩展性。在本文中&#xff0c;我们将探讨Netty中使用的一些关键设计模式&…

记录一次API报文替换点滴

1. 需求 各位盆友在日常开发中&#xff0c;有没有遇到上游接口突然不合作了&#xff0c;临时需要切换其他接口的情况&#xff1f;这不巧了&#xff0c;博主团队近期遇到了&#xff0c;又尴尬又忐忑。 尴尬的是临时通知不合作了&#xff0c;事前没有任何提醒&#xff1b; 忐忑…

CentOS关闭 swap分区

临时关闭swap分区: swapoff -a # 永久关闭swap分区: sed -ri s/.*swap.*/#&/ /etc/fstab 或者 vim /etc/fstab free -m

MyBatis 四大核心组件之 ParameterHandler 源码解析

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

深入理解JVM设计的精髓与独特之处

这是Java代码的执行过程 从软件工程的视角去深入拆解&#xff0c;无疑极具吸引力&#xff1a;首个阶段仅依赖于源高级语言的细微之处&#xff0c;而第二阶段则仅仅专注于目标机器语言的特质。 不可否认&#xff0c;在这两个编译阶段之间的衔接&#xff08;具体指明中间处理步…

Python函数和模块的使用

我的博客 文章首发于公众号&#xff1a;小肖学数据分析 在开发过程中&#xff0c;函数和模块帮助我们将复杂的代码逻辑分解为可管理的部分&#xff0c;提升代码的可读性、可维护性和重用性。 本文将介绍如何在Python中有效利用函数和模块&#xff0c;提供详细的示例。 函数的…

el-date-picker 选择一个或多个日期

el-date-picker可选择多个日期 type“dates” 加个s即可 <div><span>el-date-picker选择多个日期</span><el-date-pickertype"dates"v-model"dateList"placeholder"选择一个或多个日期"></el-date-picker></di…