SpringBoot应用开发指南(01)

目录

  • 引言
  • 1. SpringBoot简介
    • 1.1 什么是SpringBoot
      • 1.1.1 背景
      • 1.1.2 优势
      • 1.1.3 核心概念
    • 1.1.3 特点
  • 2. SpringBoot入门
  • 2. SpringBoot集成MyBatis
  • 3. SpringBoot集成PageHelper
    • 3.1 什么是PageHelper
  • 通过切面实现分页
  • 4. SpringBoot集成Druid
  • 总结

在这里插入图片描述

引言

在当今软件开发领域,SpringBoot作为一个高效的Java开发框架,以其简洁、快速的特性受到了广泛关注。本文将深入探讨SpringBoot的一些高级特性,包括与持久层框架MyBatis、分页工具PageHelper以及数据库连接池Druid的集成。通过深入的学习和实践,你将更好地理解如何在实际项目中应用这些技术,提高开发效率和代码质量。

1. SpringBoot简介

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

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

1.1 什么是SpringBoot

Spring Boot 是由 Pivotal 团队提供的全新框架,2014 年 4 月发布 Spring Boot 1.0 2018 年 3 月 Spring Boot 2.0发布。它是对spring的进一步封装,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。怎么简化的呢?就是通过封装、抽象、提供默认配置等方式让我们更容易使用。

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

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

1.1.1 背景

SpringBoot的出现是为了简化Spring应用的搭建过程,通过默认配置和约定俗成的方式,减少开发人员在配置文件上的投入,从而提高开发效率。

1.1.2 优势

简化配置:通过约定大于配置的原则,SpringBoot极大地简化了应用的配置过程。
内嵌服务器:SpringBoot支持多种内嵌服务器,如Tomcat、Jetty等,使得应用可以独立运行,无需外部Web服务器。
自动化:通过自动配置和自动装配,SpringBoot可以根据项目的依赖自动配置很多功能。

1.1.3 核心概念

起步依赖:通过Maven或Gradle引入特定功能的依赖,简化了项目的依赖管理。
自动配置:SpringBoot根据项目的依赖自动配置应用上下文,简化了配置文件。
注解驱动:采用注解驱动的方式进行开发,减少了样板代码的编写。

1.1.3 特点

  • 独立运行的 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 的所有配置。

2. SpringBoot入门

点击创建文件

在这里插入图片描述

在这里插入图片描述

版本2.7.6,jdk1.8,图片选不到我的解决方法是在生成好之后更改pom文件
在这里插入图片描述

然后把application.properties改为application.yml,先下载插件
在这里插入图片描述
右击绿色的,然后左击第二个箭头,就会更改为yml
在这里插入图片描述
pom.xml
暂时先把MyBatis和MySQL注释掉,因为yml还没配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zking</groupId><artifactId>boot</artifactId><version>0.0.1-SNAPSHOT</version><name>boot</name><description>boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.7.6</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
<!--        <dependency>-->
<!--            <groupId>mysql</groupId>-->
<!--            <artifactId>mysql-connector-java</artifactId>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>org.mybatis.spring.boot</groupId>-->
<!--            <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!--            <version>2.3.0</version>-->
<!--        </dependency>--><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><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.6</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.zking.core.BootApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

然后运行启动项目就好了

2. SpringBoot集成MyBatis

配置映射

#  服务运行的端口server:port: 8080
spring:#数据源配置datasource:url: jdbc:mysql://localhost:3306/bookshopusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver#mybatis配置mybatis:#mapper.xml所在的位置mapper-locations: classpath*:mapper/*xml

然后添加数据库
在这里插入图片描述

  • 输入完成,进行测试的时候出现时差问题,下面的网址可以解决
    在这里插入图片描述

  • 解决方法网址:
    https://blog.csdn.net/liuqiker/article/details/102455077?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-102455077-blog-106429131.235%5Ev39%5Epc_relevant_anti_t3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-102455077-blog-106429131.235%5Ev39%5Epc_relevant_anti_t3&utm_relevant_index=6

  • 然后对表进行代码生成
    在这里插入图片描述

在这里插入图片描述
然后Finish完成
此时代码就生成完成了

mapper所在的包必须在启动类中开启扫描
在这里插入图片描述
这时候运行项目就可以运行成功了
在这里插入图片描述

3. SpringBoot集成PageHelper

3.1 什么是PageHelper

PageHelper是一个用于MyBatis的分页插件,可以帮助我们方便地进行分页查询。在这一小节中,我们将深入了解PageHelper的基本用法和高级特性。

集成:
pom文件配置

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

配置yml

pagehelper:#使用的方言helperDialect: mysql#开启分页合理化reasonable: true#mapper方法上的分页参数supportMethodsArguments: true#查询数量params: count=countSql

再创建好pageben

package 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));}}

BootController

package com.yuan.springbook20231212.controller;import com.github.pagehelper.PageHelper;
import com.yuan.springbook20231212.mapper.TBookMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import page.PageBean;/*** @author 叶秋* @site* @company 卓京公司* @create 2023-12-12 17:09*/
@RestController
@RequestMapping("/book")
public class BookController {@Autowiredprivate TBookMapper tBookMapper;@RequestMapping("/list")public Object list(PageBean pageBean){PageHelper.startPage(pageBean.getPage(),pageBean.getRows());return tBookMapper.selectlist();}}

分页成功
在这里插入图片描述

通过切面实现分页

需要用到两个类PageAspect,PageAnnotation

package 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 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;}}

Service层通过@PageAnnotation切入方法

package com.yuan.springbook20231212.Service.impl;import com.yuan.springbook20231212.Service.BookService;
import com.yuan.springbook20231212.mapper.TBookMapper;
import com.yuan.springbook20231212.pojo.TBook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import page.PageAnnotation;
import page.PageBean;import java.util.List;/*** @author 叶秋* @site* @company 卓京公司* @create 2023-12-12 20:51*/
@Service
public class BookServiceImpl implements BookService {@Autowiredprivate TBookMapper tBookMapper;@Override@PageAnnotationpublic List<TBook> selectlist(PageBean pageBean) {return tBookMapper.selectlist();}
}

Controller层

@RequestMapping("/list")public Object list(PageBean pageBean){PageHelper.startPage(pageBean.getPage(),pageBean.getRows());return bookService.selectlist(pageBean);}

这样就可以进行一个切面分页了

4. SpringBoot集成Druid

4.1 什么是Druid
Druid是一个高性能的数据库连接池,支持监控和扩展
pom配置

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

yml配置

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,必须配置大于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

数据库配置那里再加一个
type: com.alibaba.druid.pool.DruidDataSource
在这里插入图片描述
然后启动项目,输入下面网址
http://127.0.0.1:8080/druid/login.html,admin-admin
在这里插入图片描述

集成日志
yml

logging:level:com.yuan.springbook20231212.mapper: dubug

总结

通过本文的深入学习,无论是简化配置的SpringBoot,还是强大的MyBatis、PageHelper和Druid,它们的集成和使用都是提高开发效率、优化数据库操作和保障系统稳定性的关键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/216881.shtml

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

相关文章

Django回顾【六 】

目录 一、Cookie和Session 【1】Cookie 【2】Session 二、中间件 【1】 什么是中间件 【2】作用 【3】自定义中间件 三、CSRF认证相关 【1】CSRF是什么 【2】CSRF攻击原理 【3】CSRF攻击防范 四、auth的使用 【1】author是什么 【2】auth模块常用方法 authentic…

十大shell脚本任务(一)日志文件分析器

十大脚本任务&#xff1a; 日志文件分析器&#xff1a; 目标&#xff1a;编写一个脚本&#xff0c;自动分析服务器日志文件&#xff0c;提取关键错误信息&#xff0c;并发送通知。价值&#xff1a;实时监控系统状态&#xff0c;及时响应问题。 备份和恢复脚本&#xff1a; 目标…

P4 Qt基础控件——工具按钮toolButton(上)

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f33a;本篇简介 &#xff1a;这一章我们学一…

鸿蒙系统扫盲(五):再谈鸿蒙开发用什么语言?

前段时间&#xff0c;发表了鸿蒙系统扫盲&#xff08;三&#xff09;&#xff1a;鸿蒙开发用什么语言&#xff1f;这篇文章&#xff0c;收到一些网友的提问&#xff0c;一一解答了&#xff0c;还有网友对我进行了严厉的批评和尖锐的指责&#xff0c;说我有点颠倒是非&#xff0…

【lesson9】表的约束(2)

文章目录 表的约束的介绍列描述测试建表 zerofill测试建表插入测试 修改表插入测试 修改表插入测试 表的约束的介绍 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角…

WT588F02B-8S语音芯片在水波炉中的应用:提升用户体验与安全性

在现代家电领域&#xff0c;语音芯片的应用日益普及&#xff0c;为各类产品增添了人性化、智能化的元素。以水波炉为例&#xff0c;一种新型的家用电器&#xff0c;它结合了微波炉和烤箱的功能&#xff0c;通过采用WT588F02B-8S语音芯片&#xff0c;使得水波炉在操作、提示、安…

【Flink名称解释一】什么是cataLog

Catalog 提供了元数据信息&#xff0c;例如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息。 数据处理最关键的方面之一是管理元数据。 元数据可以是临时的&#xff0c;例如临时表、或者通过 TableEnvironment 注册的 UDF。 元数据也可以是持久化的&#x…

android项目实战之Android 11(API等级29)或更高版本,检测键盘的弹出和收起

如题 在Android 11&#xff08;API等级29&#xff09;或更高版本中&#xff0c;由于隐私限制&#xff0c;无法直接检测键盘的弹出和收起。这是由于Android系统对于键盘弹出和收起的检测进行了限制&#xff0c;以保护用户的隐私。 实现方案 public class KeyboardObserver { …

Typescript中Partial数据类型在项目中的实际应用

在TypeScript中&#xff0c;Partial是一个内置的泛型类型&#xff0c;用于将给定的类型T 的所有属性转换为可选属性。换句话说&#xff0c;Partial<T> 可以帮助我们将一个类型中的所有属性变为可选属性&#xff0c;这在某些情况下非常有用。 例如&#xff1a;设有一个接…

2023-12-12 AIGC-AI如何处理信息和提问

摘要: 2023-12-12 AI如何处理信息和提问 AI如何处理信息和提问 对于基于自然语言处理&#xff08;NLP&#xff09;的模型&#xff0c;如ChatGPT这样的大型语言模型。这个过程可以分为几个关键步骤&#xff1a; 1. 接收和解析输入 接收输入&#xff1a;当用户提出一个问题时&…

经典策略筛选-20231212

策略1&#xff1a; 龙头战法只做最强&#xff1a;国企改革 ----四川金顶 1、十日交易内出现 涨停或 &#xff08;涨幅大于7个点且量比大于3&#xff09; 2、JDK MACD RSI OBV BBI LWR MTM 六指标共振 3、均线多头 4、 筹码峰 &#xff08;锁仓&#xff09; 5、现价>…

最强文生图跨模态大模型:Stable Diffusion

文章目录 一、概述二、Stable Diffusion v1 & v22.1 简介2.2 LAION-5B数据集2.3 CLIP条件控制模型2.4 模型训练 三、Stable Diffusion 发展3.1 图形界面3.1.1 Web UI3.1.2 Comfy UI 3.2 微调方法3.1 Lora 3.3 控制模型3.3.1 ControlNet 四、其他文生图模型4.1 DALL-E24.2 I…

Unity光照模型实践

光照作为3D渲染中最重要的部分之一&#xff0c;如何去模拟真实环境的光照是重要的研究内容&#xff0c;但是现实环境光照过于复杂&#xff0c;有很多经典好用的光照模型去近似真实光照。 根据基础的Phong模型 最终某个点的结果为 环境光Ambient 漫反射光Diffuse 高光Specula…

一文讲解关于MCU启动原理的几个关键问题

MCU最开始一启动后去哪里读代码&#xff1f; CPU上电启动后被设计为去地址0x00000000位置处读取代码&#xff1b;首先会连续读取两个字&#xff0c;分别是栈指针初始值和复位异常处理函数的地址&#xff1b;然后跳去执行复位异常处理函数。 当然在一些早期的ARM处理器设计中&a…

在Spring Cloud中使用组件Ribbon和Feign,并分别创建子模块注册到Eureka中去

ok&#xff0c;在上篇文章中我们讲了在Spring cloud中使用Zuul网关&#xff0c;这篇文章我们将Spring Cloud的五大核心组件的Ribbon和Feign分别创建一个微服务模块。 题外话&#xff0c;本篇博客就是配置子模块&#xff0c;或者说是微服务&#xff0c;然后将微服务正式启动之前…

Stimulus—需求形式化建模和验证工具

产品概述 Stimulus是法国达索公司产品&#xff0c;其目的是通过需求建模分析来验证需求的正确性。Stimulus的核心理念是运用“自然语言”对功能性需求进行建模&#xff0c;并通过仿真来查找需求中的缺陷&#xff0c;例如需求一致性、不二义性和完整性检查等。借助Stimulus可以在…

media-ctl 生成拓扑和数据流图

文章目录 前言一、加载驱动模块二、media-ctl 生成拓扑和数据流图1.media-ctl工具将pipeline拓扑生成dot文件2.将dot文件转换为png图片总结参考资料前言 本文主要介绍在Linux下如何通过media-ctl 工具生成生成V4L2 和 Media 框架的拓扑和数据流图 硬件环境:PC 软件环境:ubun…

2023-12-05 Qt学习总结9

点击 <C 语言编程核心突破> 快速C语言入门 Qt学习总结 前言二十五 QFile文件操作总结 前言 要解决问题: 学习qt最核心知识, 多一个都不学. 二十五 QFile文件操作 QFile是Qt提供的文件读写类&#xff0c;支持对文件进行读写、复制、重命名、删除等操作。常用C函数如下&…

用C语言实现字符串的逆置

第一种方法&#xff1a; 用指针像交换两个数一样&#xff0c;创建一个临时变量&#xff0c;从而实现字符串的逆置&#xff01; void Reverse(char* str) {char* left str;//指向字符串数组的左指针char* right str strlen(str) - 1;//指向字符串数组的右指针&#xff0c;因…

内核上项目【通信】

文章目录 目的操作步骤逆向分析实现代码参考文献 目的 在Win7 64位系统上编写驱动利用ExRegisterAttributeInformationCallback注册回调进行通信 操作步骤 1.利用MmGetSystemRoutineAddress获取ExRegisterAttributeInformationCallback中ExpDisSetAttributeInformation、Exp…