【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.hqwc.cn/news/278961.html

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

相关文章

如何在Centos 7环境下安装MySQL并登录

目录 先获取MySQL官方yum源 然后正常使用yum命令下载mysql即可完成MySQL的下载 使用mysql客户端登录mysqld服务端 能够登录mysql客户端后&#xff0c;我们最后还需要做一点配置 先获取MySQL官方yum源&#xff08;包括对yum源的介绍&#xff09; 介绍一下yum源 yum源就是一…

超燃超欢乐!修仙喜剧动画《师兄啊师兄》第二季稳健开播

12月14日&#xff0c;备受瞩目的《师兄啊师兄》第二季终于稳健开播&#xff01;首播两集连放&#xff0c;同时第一季全13集限免&#xff0c;不仅便于新观众丝滑入坑&#xff0c;老观众也可以二刷重温&#xff0c;可以说是非常良心了&#xff01; 《师兄啊师兄》改编自人气网络小…

指针(笔记2)

一、const修饰指针 变量是可以修改的&#xff0c;如果把变量的地址交给一个指针变量&#xff0c;通过指针变量也可以修改这个变量。 我们希望给一个变量加上一些限制&#xff0c;不能被修改&#xff0c;那么这就由const起作用。 1.const修饰变量 (1)const如果放在&#xff…

基于Qt的登录页面设计

题目&#xff1a; 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和…

【数据结构和算法】判断子序列

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;双指针 三、代码 3.1 方法一&#xff1a;双指针 3.1.1 Java易懂版&#xff1a;…

K8s可视化kuboard 部署

创建资产 [rootkube-master ~]# kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml 查看对应资源 [rootkube-master ~]# kubectl get pod -n kuboard NAME READY STATUS RESTARTS AGE kuboard-agent-2-5c4f886…

基于JSP+Servlet+Mysql的建设工程监管信息

基于JSPServletMysql的建设工程监管信息 一、系统介绍二、功能展示1.企业信息列表2.录入项目信息3.项目信息列表 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目名称&#xff1a;基于JSPServlet的建设工程监管信息 项目架构&#xff1a;B/S架构 开发语言&#xff1a;…

论文阅读——GroupViT

GroupViT: Semantic Segmentation Emerges from Text Supervision 一、思想 把Transformer层分为多个组阶段grouping stages&#xff0c;每个stage通过自注意力机制学习一组tokens&#xff0c;然后使用学习到的组tokens通过分组模块Grouping Block融合相似的图片tokens。通过这…

软考科目如何选择?

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

UE5 动画 Sequencer-学习笔记

P2. 课程介绍 资料&#xff1a;https://www.bilibili.com/video/BV1Ag411873f?p2&vd_source707ec8983cc32e6e065d5496a7f79ee6 Sequencer不仅可以做互动动画&#xff0c;还可以导出视频与序列帧 P3-4. 界面介绍 https://www.bilibili.com/video/BV1Ag411873f?p3&spm_…

【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 安…

MAC如何判断是型号x64、ARM64

文章目录 前言如何操作解决办法&#xff1a; [MAC 知识](https://blog.csdn.net/qq_40374604/category_11129661.html) 前言 自从 MAC M1 出来后&#xff0c;MAC 分为英特尔芯片和苹果自家的芯片&#xff0c;导致很多软件安装也要区分版本。 比如&#xff0c;微信开发者工具 …