【Spring Boot】快速入门

news/2024/11/20 9:11:19/

一、引言

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.ppmy.cn/news/1271502.html

相关文章

1_系统安全

系统权限 一、安装系统 1. 选择稳定版操作系统 2. 最小化安装 3. 不要安装 gcc,make 4. 安装完系统后更新系统 [rootlocalhost ~]# yum -y update 二、文件 ( 目录 ) 权限 1. 基本权限 rwx 对于目录&#xff0c;默认权限777-umask 对于文件&#xff0c;默认权限66…

【起草】【第九章】ChatGPT 在文旅主题乐园的应用

希望主题乐园的数字化从业人员&#xff0c;可以在评论区下方留言&#xff0c;用于完善chatGPT的应用场景 【9.1】场景&#xff1a;借助GPT思考如何通过AIGC技术赋能主题乐园&#xff0c;提升用户体验和满意度、重游率&#xff1b; 1. 欢迎信息&#xff1a;ChatGPT可以被用于创建…

什么是质量工程?

质量工程是在精益、敏捷、DevOps等实践基础上进一步发展出的系统化赋能软件开发流程、构建既快又好的开发框架的实践。原文: What is Quality Engineering 我们基于古法语"definer"的定义&#xff0c;通过澄清边界、要素和相互作用的方式来构建某个概念&#xff0c;本…

TrustZone之总线请求

接下来&#xff0c;我们将查看系统中的总线请求者&#xff0c;如下图所示&#xff1a; 系统中的A型处理器具有TrustZone感知&#xff0c;并在每个总线访问中发送正确的安全状态。然而&#xff0c;大多数现代SoC还包含非处理器总线请求者&#xff0c;例如GPU和DMA控制器。 与完成…

MySQL事务与MVCC详解

前置概念之事务 在开始MVCC的讨论之前&#xff0c;我们必须了解一些关于事务的概念。 什么是事务 现在我们开发的一个功能需要进行操作多张表&#xff0c;假如我们遇到以下几种情况: 某个逻辑报错数据库连接中断某台服务器突然宕机… 这时候我们数据库执行的操作可能才到一…

[算法基础 ~排序] Golang 实现

文章目录 排序什么是排序排序的分类1. 冒泡1.1 冒泡排序1.2. 快速排序 2. 选择2.1 简单选择排序2.2 堆排序 3. 插入3.1 直接插入3.2 折半插入3.3 希尔排序 4. 归并排序代码实现 5. 基数排序 排序图片就不贴了吧 排序 什么是排序 以下部分动图来自CSDN ::: tip 稳定性的概念 …

git 的使用

git reset详解-CSDN博客 git reset 命令详解 git revert命令详解。-CSDN博客 关于Git分支中HEAD和Master的理解 - 知乎 (zhihu.com) 一文带你精通 Git&#xff08;Git 安装与使用、Git 命令精讲、项目的推送与克隆&#xff09;-CSDN博客 Git 常用操作&#xff08;5&#xff…

【AI工具】GitHub Copilot IDEA安装与使用

GitHub Copilot是一款AI编程助手&#xff0c;它可以帮助开发者编写代码&#xff0c;提供代码建议和自动完成功能。以下是GitHub Copilot在IDEA中的安装和使用步骤&#xff1a; 安装步骤&#xff1a; 打开IDEA&#xff0c;点击File -> Settings -> Plugins。在搜索框中输…