????????Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Spring Boot还提供了强大的监控能力,可以监控应用程序的运行状态。这些特点使得Spring Boot成为Java开发人员的首选框架之一。
- 独立运行:Spring Boot可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs。
- 无XML配置:Spring Boot简化了配置过程,它采用约定优于配置的方式,通过自动化配置和默认设置来简化开发者的配置工作,减少了繁琐的配置代码。同时,它也支持外部化配置,应用程序的配置更加灵活和可管理。
- 嵌入式Web容器:Spring Boot内置了多种常用的Web容器,如Tomcat、Jetty、Undertow等,使得构建独立的Web应用程序变得更加简单。
- 自动管理依赖:Spring Boot通过提供一系列的"starter"依赖,自动管理应用程序的依赖关系,简化了依赖管理的工作。
- 丰富的开发者工具:Spring Boot提供了丰富的开发者工具,如热部署、自动重启、自动配置报告等,提高了开发效率。
- 可扩展性:基于Spring框架,Spring Boot支持丰富的扩展点和插件,使得应用程序的功能可以方便地进行扩展和定制。
- 新建项目
- 选择好你项目的位置和项目名。
- 设置阿里的服务器:start.aliyun.com。
- 选择你的语言Java和类型maven。
- 选择你的jdk版本。
我们选择一些必要的一些依赖,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:? 用于存放程序的各种依赖模块的配置信息,比如:服务端口,数据库连接配置等。
把我们的配置文件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>
进入我们的主程序入口,运行即可。
在application.yml里面配置MySQL、mybatis。
配置你的数据库和用户、密码,还有你的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.Driver type: com.zaxxer.hikari.HikariDataSource url: jdbc:mysql://localhost:3306/bookshop?useUnicode=true&characterEncoding=utf8 username: root password: 123456
确保你的pom.xml里面有mybatis和MySQL的依赖
确保你的idea里面有以下这个插件
用idea连接你的数据库右键你的数据表
- 项目路径
- 生成路径
- 基本路径
- 包名
选择Lombok
在实体类添加有参无参
编写号调用的接口方法等
编写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 { @Autowired private 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
在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
# 是否启用 reasonable
reasonable: true
# 是否支持方法参数
supportMethodsArguments: true
# 参数
params: count=countSql
编写分页实体
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; } }
编写接口类,调用分页注解:? ??@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 { @Autowired private TBookMapper tBookMapper; @Override // 分页注解 @PageAnnotation public List<TBook> selectAll(PageBean pageBean) { return tBookMapper.selectAll(); } }
Controller层方法调用
@RequestMapping("/list") public Object list2(PageBean pageBean) { List<TBook> tBooks = tBookService.selectAll(pageBean); return tBooks; }
运行结果:
<!-- 连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.16</version>
</dependency>
在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
配置application.yml
#日志配置。 logging: level: com.example.springboot01.mapper: debug
重新运行即可,可看到SQL语句等
在pom文件里面如果没有填写需要打包的方式,可以自己进行添加。可选择jar包和war包
在pom.xml文件里面更改配置。
把<skip>true</skip>改成false
我们右键选择按照步骤进行操作
在target里面找到我们的jar包
把我们打好的jar包放到随意的一个地方运行命令
java -jar springboot01-0.0.1-SNAPSHOT.jar
springboot01-0.0.1-SNAPSHOT.jar:为你的jar包名。
我们进入浏览器进行访问即可
在Spring Boot面试中,面试官通常会问一些关于Spring Boot基础知识、配置、应用场景、最佳实践以及性能优化等方面的问题。以下是一些常见的面试问题及回答建议:
什么是Spring Boot?
回答:Spring Boot是一个基于Java的开源框架,它旨在简化Spring应用程序的创建和部署。通过使用约定大于配置的方法,Spring Boot可以自动配置大部分常见的设置,让开发者能够快速搭建应用程序框架并专注于业务逻辑。
Spring Boot有哪些优点?
回答:Spring Boot的优点包括:
- 简化开发:通过自动配置和约定大于配置的方法,减少了开发者的配置工作量。
- 快速构建:提供了大量内置的功能和库,加快了应用程序的开发速度。
- 易于部署:内置了嵌入式服务器,可以轻松地将应用程序部署到云端或本地服务器。
- 丰富的插件:支持各种第三方库和插件,方便扩展功能。
Spring Boot的核心概念是什么?
回答:Spring Boot的核心概念包括自动配置、约定大于配置、分离关注点、单一职责原则等。其中,自动配置是通过使用Java Config或XML配置文件来定义应用程序的组件和属性;约定大于配置是指Spring Boot根据约定来自动配置应用程序,减少开发者的手动配置工作;分离关注点是指将应用程序拆分为多个独立的模块,降低耦合性;单一职责原则是指每个组件应该只负责一个功能,提高代码的可读性和可维护性。
如何创建一个Spring Boot应用程序?
回答:创建一个Spring Boot应用程序需要以下几个步骤:
- 添加依赖:在pom.xml文件中添加Spring Boot Starter依赖。
- 创建主类:创建一个包含main()方法的类作为应用程序的入口。
- 配置文件:在src/main/resources目录下创建application.properties或application.yml文件,用于配置应用程序的属性。
- 创建控制器:创建Java类并使用@RestController或@Controller注解来定义应用程序的路由和请求处理方法。
如何配置Spring Boot应用程序?
回答:在Spring Boot中,可以通过application.properties或application.yml文件来配置应用程序。常见的配置包括数据库连接、端口号、日志级别等。同时,也可以使用@Configuration类来定义自定义的配置类,并在其中声明Bean组件和属性。
Spring Boot中有哪些常用的注解?
回答:Spring Boot中常用的注解包括@Component、@Service、@Repository、@Controller、@RequestMapping等。这些注解可以用于定义组件、请求处理方法、路由等。此外,还有@Autowired、@Qualifier等注解用于实现依赖注入等功能。
Spring Boot的最佳实践有哪些?
回答:Spring Boot的最佳实践包括:
- 使用Lombok库减少模板代码的编写。
- 使用@Valid注解进行表单验证。
- 使用@RequestParam注解获取请求参数。
- 使用@RequestBody注解获取请求体中的数据。
- 使用@GetMapping和@PostMapping注解替代@RequestMapping注解来简化请求处理方法的定义。
如何优化Spring Boot应用程序的性能?
回答:优化Spring Boot应用程序的性能可以考虑以下几个方面:
- 使用适当的缓存策略,如使用Redis缓存数据库查询结果等。
- 优化数据库查询语句,避免使用SELECT *语句,只查询需要的字段。
- 使用Gzip压缩响应内容,减少传输的数据量。
- 优化代码逻辑,避免冗余计算和重复查询。
我的分享就到这里!!!感谢大家在评论区交流