当前位置: 首页 > article >正文

SpringBoot--入门使用

目录

SpringBoot简介

什么是SpringBoot

相比Spring,SpringBoot的有哪些特点

SpringBoot入门使用

创建SpringBoot项目

配置项目名称

启动SpringBoot

SpringBoot整合依赖,配置开发环境

SpringBoot整合jdbc

SpringBoot整合mybatis

配置开启log日志

SpringBoot配置分页插件

整合druid数据库连接池


SpringBoot简介

  Spring Boot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能,降低了复杂性,同时支持基于JVM的多种开源框架,可以缩短开发时间,使开发更加简单和高效。

众所周知 Spring 应用需要进行大量的配置,各种 XML 配置和注解配置让人眼花缭乱,且极容易出错,因此 Spring 一度被称为“配置地狱”。为了简化 Spring 应用的搭建和开发过程,Pivotal 团队在 Spring 基础上提供了一套全新的开源的框架,它就是Spring Boot。

只是为了提升Spring开发者的工具,特点:敏捷式、快速开发。

什么是SpringBoot

SpringBoot 基于 Spring 开发。SpringBoot 本身并不提供 Spring 框架的核心特性以及扩展功能,也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具

  关于 SpringBoot 有一句很出名的话就是约定大于配置。采用 Spring Boot 可以大大的简化开发模式,它集成了大量常用的第三方库配置,所有你想集成的常用框架,它都有对应的组件支持,例如 Redis、MongoDB、Jpa、kafka,Hakira 等等。SpringBoot 应用中这些第三方库几乎可以零配置开箱即用,大部分的 SpringBoot 应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。

相比Spring,SpringBoot的有哪些特点

  • 独立运行的 Spring 项目  Spring Boot 可以以 jar 包的形式独立运行,Spring Boot 项目只需通过命令“ java–jar xx.jar” 即可运行。

  • 内嵌 Servlet 容器    Spring Boot 使用嵌入式的 Servlet 容器(例如 Tomcat、Jetty 或者 Undertow 等),应用无需打成 WAR 包 。

  • 提供 starter 简化 Maven 配置   Spring Boot 提供了一系列的“starter”项目对象模型(POMS)来简化 Maven 配置。

  • 提供了大量的自动配置   Spring Boot 提供了大量的默认自动配置,来简化项目的开发,开发人员也通过配置文件修改默认配置。

  • 自带应用监控  Spring Boot 可以对正在运行的项目提供监控。

  • 无代码生成和 xml 配置  Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。

SpringBoot入门使用

创建SpringBoot项目

目录介绍,这里有一个忘记标记了,springboot启动成功后,默认访问static种的index.html文件

 在springboot之中,默认的总配置文件是properties文件,但是properties文件的格式并不美观,所以我们可以将其修改成yml文件

如下图

配置项目名称

首先springboot访问后端请求是不需要添加项目名称的,但是如果非要添加的话也可以,只需要在yml文件种添加以下代码

#spring启动项目访问后台请求是不需要加上项目名字的,如果需要加上项目名字也可以
#项目名
#  servlet:
#    context-path: 项目名
#    集成数据库配置文件

启动SpringBoot

SpringBoot内嵌入了一个tomcat如果想要启动项目,需要找到我们的SpringBoot启动类,直接启动即可

出现以下效果代表启动成功了

SpringBoot整合依赖,配置开发环境

SpringBoot整合jdbc

导入所需依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>

配置.yml总配置文件

spring:datasource:url: jdbc:mysql://localhost:3306/bookshop?useUnicode=true&characterEncoding=UTF-8&SSL=falseusername: rootpassword: 123456#    配置驱动driver-class-name: com.mysql.jdbc.Driver

此时我们已经能够连接mysql了,但是没有配置好我们的mybatis持久层框架

SpringBoot整合mybatis

导入依赖

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version>
</dependency>

配置SpringBoot总配置文件

#mybatis配置
mybatis:
#配置SQL映射文件路径
mapper-locations: classpath:mapper/*.xml
#配置别名
type-aliases-package: com.wenhao.boot_1.pojo

当我们配置好这一步之后,就可以连接数据库,生成对应的实体类以及对应的mapper文件了

在idea最右侧有一个火药桶样式的图标,点击它

写好配置信息后连接数据库

连接成功后,右键表格,点击图中的按钮,生成文件

然后就会出现这个界面

完成之后,我们对应的左侧目录就会在启动类所处的同级目录下生成相应的mapper文件和实体类,mapper类的映射文件则会生成在rescouce目录下

此时我们可以启动一下项目试试看看会不会报错

这个错误告诉我们在控制层的类中,需要一个mapper类,但是找不到那个mapper类,为什么呢,因为我们并没有配置扫描器呀,所以我们需要在启动类中配置mapper扫描器

这个扫描器会自动扫描mapper包中,标注了@Repository注解的类,将其注入到其中,然后启动就不会报错了

配置开启log日志

在.yml文件中配置以下代码即可

#log日志配置
logging:level:#指定项目目录输入日志信息com.wenhao.boot_1.mapper: debug

测试,我自己写了一个查询方法,访问看看能不能拿到想要的数据

 在这里可以提一个小玩意

这个别名是从哪里来的呢?

就是这里,指定了在哪个包下面的类会生成一个别名 

SpringBoot配置分页插件

导入切面,以及分页依赖

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

在.yml文件中配置分页参数

pagehelper:
#  指定sql方言helperDialect: mysql
#  指定是否合理化查询reasonable: true
#  表示是否支持通过方法参数来传递分页查询的参数,例如直接在方法中传入 pageNum 和 pageSize 参数。supportMethodsArguments: true
#指定用于查询总数的 SQL 语句,通常是使用 count(*) 的方式来统计记录总数,但也可以自定义统计总数的 SQL 语句。params: count=countSql

配置完成后,我们可以结合aop来使用,这样减少代码的重复

首先我们可以定义一个自定义的注解类

package com.wenhao.boot_1.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.wenhao.boot_1.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 {/*** 切入点定义,指定使用 @PageAnnotation 注解的方法为切入点*/@Pointcut("@annotation(PageAnnotation)")public void cut() {}/*** 环绕通知,在切入点方法执行前后进行处理* @param point 切入点信息* @return 切入点方法的返回值* @throws Throwable 异常*/@Around("cut()")public Object aroundHandler(ProceedingJoinPoint point) throws Throwable {// 获取切入点方法的参数Object[] args = point.getArgs();// 默认的分页信息对象PageBean pageBean = new PageBean().setOpen(false);// 遍历参数,找到类型为 PageBean 的参数for (Object arg : args) {if (arg instanceof PageBean) pageBean = (PageBean) arg;}// 使用 PageHelper 进行分页设置PageHelper.startPage(pageBean.getPage(), pageBean.getRows(), pageBean.isOpen());// 执行切入点方法Object val = point.proceed();// 如果开启了分页功能,则设置总记录数到 PageBean 对象中if (pageBean.isOpen()) {Page<?> page = (Page<?>) val;pageBean.setTotal(page.getTotal());}// 返回切入点方法的返回值return val;}}

最后还有一个pagebean实体类

package com.wenhao.boot_1.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.wenhao.boot_1.controller;import com.wenhao.boot_1.mapper.TBookMapper;
import com.wenhao.boot_1.page.PageAnnotation;
import com.wenhao.boot_1.page.PageBean;
import com.wenhao.boot_1.pojo.TBook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @ 用户  liwen* @当前日期 2023/12/12* @当前项目名称 boot_1*/
@RestController
@RequestMapping("/book")
public class BookController  {@Autowiredprivate  TBookMapper bookMapper;@PageAnnotation@RequestMapping("/query")public List<TBook> list(PageBean pageBean){List<TBook> selectbook = bookMapper.selectbook();return selectbook;};}

往后台发送请求

可以看到此时我拿到的是第2页的数据,分页成功了

整合druid数据库连接池

各大数据库连接池对比,我只能说,阿里云开发值得信任

功能

dbcp

druid

c3p0

tomcat-jdbc

HikariCP

是否支持PSCache

监控

jmx

jmx/log/http

jmx,log

jmx

jmx

扩展性

sql拦截及解析

支持

代码

简单

中等

复杂

简单

简单

更新时间

2019.02

2019.05

2019.03

2019.02

最新版本

2.60

1.1.17

0.9.5.4

3.3.1

特点

依赖于common-pool

阿里开源,功能全面

历史久远,代码逻辑复杂,且不易维护

优化力度大,功能简单,起源于boneCP

连接池管理

LinkedBlockingDeque

数组

FairBlockingQueue

threadlocal+CopyOnWriteArrayList

导入依赖

  <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.15</version></dependency>

在.yml文件中配置

spring:datasource:type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://localhost:3306/bookshop?useUnicode=true&characterEncoding=UTF-8&SSL=falseusername: rootpassword: 123456#    配置驱动driver-class-name: com.mysql.jdbc.Driverdruid:#2.连接池配置#初始化连接池的连接数量 大小,最小,最大initial-size: 5min-idle: 5max-active: 20#配置获取连接等待超时的时间max-wait: 60000#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒min-evictable-idle-time-millis: 30000validation-query: SELECT 1 FROM DUALtest-while-idle: truetest-on-borrow: truetest-on-return: false# 是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭   个人建议如果想用SQL防火墙 建议打开pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filter:stat:merge-sql: trueslow-sql-millis: 5000#3.基础监控配置web-stat-filter:enabled: trueurl-pattern: /*#设置不统计哪些URLexclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"session-stat-enable: truesession-stat-max-count: 100stat-view-servlet:enabled: trueurl-pattern: /druid/*reset-enable: true#设置监控页面的登录名和密码login-username: adminlogin-password: adminallow: 127.0.0.1#deny: 192.168.1.100#pagehelper分页插件配置

 Ok,大功告成,

启动SpringBoot项目访问Druid,访问地址:http://localhost:端口号/项目名称/druid/

 在这里我们可以进行整个项目的监控,不得不感叹阿里云的强大

值得一提的是,在SpringBoot项目中,和springmvc相关的包都要处在和启动类同级的目录下,否则springBoot无法进行识别,如下图

http://www.lryc.cn/news/2412608.html

相关文章:

  • Node入门
  • 介绍Vant入门及使用方法
  • 国产化的接口测试、接口自动化测试工具apifox的介绍及使用
  • C/C++之(一)洛谷刷题及洛谷评测
  • 抓包工具(二)Wireshark 的下载、安装、使用、快捷键
  • Json文件格式化方法
  • Node.js环境配置
  • 【系统功能开发篇】若依管理系统功能介绍
  • nodejs详细安装步骤(保姆级教程)
  • poj 1204 Word Puzzles
  • 测试基础---测试用例01
  • 1350. 院系无效的学生 1355. 活动参与者 1369. 获取最近第二次的活动 1378. 使用唯一标识码替换员工ID1398. 购买了产品 A 和产品 B 却没有购买产品 C 的顾客
  • eCharts基础详解
  • Vscode 配置C/C++开发环境
  • 我用两个月时间,终于把CSDN付费资源项目玩明白了!
  • AVR单片机网址推荐 .
  • 经典智力题
  • Selenium + Webdriver 学习(六) 自动选择、检查下拉列表
  • smplayer 中文字幕乱码,进度条及拖放MKV
  • 四年背的单词 笔记目录
  • KVM 虚拟化详解
  • nrf52832 sdk15.2.0 dfu升级攻略
  • SanDisk U盘加密软件 在其他u盘使用
  • springboot笔记整理(超详细,手把手教程!)
  • 真正的RISC-V开发板——VEGA织女星开发板开箱评测
  • ROS学习笔记-安装、环境搭建、初步体验与基本包命令
  • 2020-12-21细雨算法2.0解读
  • 一款免费无限制的AI视频生成工具火了!国内无障碍访问!目前真正免费无限制,可以用来制作抖音短视频,视频效果体验不逊色于pika和runway,以及其他的免费AI在线人工智能大模型, 附教程
  • 计算机专业毕业设计题目大全——各种类型系统设计大全
  • 磁盘分区格式FAT32与NTFS