SpringBoot入门教程

        Spring Boot 是由Spring框架团队推出的一款用来简化Spring应用程序创建和开发过程的框架,它基于Spring框架,使用约定优于配置,大大简化了Spring应用程序的配置和开发过程。在很多企业中,Spring Boot 已经被广泛应用,成为了构建微服务的首选框架之一。

        Spring Boot 入门的教程已经有很多了,本篇文章将讲解一些 Spring Boot 进阶的话题,旨在帮助读者更好的理解 Spring Boot 的高级特性,并能在实际项目中更好地运用。

一、Spring Boot自定义Starter

        Spring Boot 自定义 Starter 可以让我们将一些特定场景中常用的配置、依赖和代码封装起来,使得在这种场景下启动一个新的应用程序变得非常容易。Spring Boot 提供了对自定义 Starter 的支持,下面我们来看一个简单的例子。

首先,我们需要创建一个 Maven 项目,名为 my-spring-boot-starter。在 pom.xml 中添加以下依赖:

<dependencies><!-- Spring Boot 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>${spring.boot.version}</version></dependency>
</dependencies>

接下来,创建一个自定义的 Starter 类。这个 Starter 类只需要继承                 org.springframework.boot.autoconfigure.EnableAutoConfiguration 类即可:

@EnableAutoConfiguration
public class MySpringBootStarter {
}

        这个 Starter 类只是一个空类,不过它的存在可以让 Spring Boot 自动扫描到这个类,并且会自动进行一些配置,比如自动注入一些 Bean 等等。在本例中,由于我们没有做任何配置,所以没什么用处。

        我们先把这个 Starter 发布到本地仓库,然后就可以在其他项目中使用了。下面我们在一个新的 Spring Boot 项目中使用我们的 Starter:

在 pom.xml 中添加依赖:

<dependency><groupId>com.example</groupId><artifactId>my-spring-boot-starter</artifactId><version>0.0.1-SNAPSHOT</version>
</dependency>

  然后在 Application 类上添加注解:

@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

        这样,我们就完成了一个最简单的 Spring Boot 自定义 Starter。当然,实际的 Starter 中还可以包含一些配置类、Bean、拦截器等等,以满足不同场景的需求。

二、Spring Boot自动装配

        Spring Boot 自动装配是通过扫描 classpath 中的 jar 包来实现的。当 Spring Boot 从 classpath 中发现一个 jar 包时,它会尝试自动配置这个 jar 包中的 Bean,这样就可以极大地简化配置。

        在很多情况下,我们都用不到所有的自动配置。比如,如果我们使用 Spring Boot 的 WebMVC 功能,那么 Spring Boot 会自动配置 Tomcat 的嵌入式 Servlet 容器,这样就可以让我们快速地启动一个嵌入式的 Web 服务。但是,如果我们不需要 Tomcat 容器,而是想使用 Jetty 容器,这时候我们就可以通过禁用 Spring Boot 的 Tomcat 自动配置,然后自己手动配置 Jetty。

        下面我们来看一个例子,在 Spring Boot 中禁用 Tomcat 自动配置,然后手动配置 Jetty。

首先,在 pom.xml 中移除 Tomcat 的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>

然后添加 Jetty 的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

接下来,创建一个 Jetty 配置类:

@Configuration
public class JettyConfig {@Beanpublic Server server() {return new Server();}@Beanpublic JettyEmbeddedServletContainerFactory jettyEmbeddedServletContainerFactory(Server server) {JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory();factory.setServer(server);return factory;}
}

        在这个配置类中,我们创建了一个 Jetty 的 Server 实例,并将其注入到 JettyEmbeddedServletContainerFactory 中。这样,当我们启动 Spring Boot 应用程序时,它将使用我们自己创建的 Jetty 容器而不是默认的 Tomcat 容器。

三、Spring Boot集成MyBatis

        MyBatis 是一款优秀的 ORM 框架,它可以非常方便地使用 SQL 语句操作数据库。在实际项目中,我们经常使用 MyBatis 来访问数据库。下面我们来看一下如何在 Spring Boot 中集成 MyBatis。

        首先,我们需要在 pom.xml 中添加 MyBatis 和 MySQL 的依赖:

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.boot.version}</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version>
</dependency>

        接下来,我们需要配置数据源,让 MyBatis 和 MySQL 进行连接。在 Spring Boot 中,可以使用 application.properties 或 application.yml 进行配置。以下是一个使用 application.properties 配置数据源的例子:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

        在这里,我们指定了 MySQL 的 JDBC 驱动、连接 URL、用户名和密码。

        然后,我们需要创建一个 MyBatis 的配置文件 \src\main\resources\mybatis\mybatis-config.xml。这个配置文件中包含了 MyBatis 的一些基本配置。以下是一个简单的示例配置:

<configuration><settings><setting name="cacheEnabled" value="true"/><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="false"/><setting name="multipleResultSetsEnabled" value="true"/><setting name="useColumnLabel" value="true"/><setting name="autoMappingBehavior" value="PARTIAL"/><setting name="defaultExecutorType" value="SIMPLE"/><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
</configuration>

        在这个配置文件中,我们设置了一些 MyBatis 的默认配置选项,比如启用缓存、启用懒加载、使用驼峰命名法等等。

        接下来,我们需要编写 Mapper 接口和对应的 SQL 映射文件。Mapper 接口用于定义对数据库的操作,而 SQL 映射文件用于描述具体的 SQL 语句,以及参数、返回类型等。以下是一个 Mapper 接口和对应的 SQL 映射文件的例子:

@Mapper
public interface UserMapper {@Select("select * from user where id=#{id}")User getUserById(int id);@Insert("insert into user(id,name,age) values(#{id},#{name},#{age})")int addUser(User user);
}

        Mapper中如果定义了SQL,那么就不需要定义Mapper.xml,Mapper.xml如下:

<mapper namespace="com.example.demo.dao.UserMapper"><resultMap id="UserMap" type="com.example.demo.entity.User"><id column="id" property="id" javaType="int"/><result column="name" property="name" javaType="String"/><result column="age" property="age" javaType="int"/><resultMap/>

        至此,SpringBoot开发的流程就结束了,下期再见!

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

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

相关文章

浅谈安科瑞可编程电测仪表在老挝某项目的应用

摘要&#xff1a;本文介绍了安科瑞多功能电能表在老挝某项目的应用。AMC系列交流多功能仪表是一款专门为电力系统、工矿企业、公用事业和智能建筑用于电力监控而设计的智能电表。 Abstract&#xff1a;This article introduces the application of the multi-function energy …

Arrays.asList(T... a)导致的事故

&#x1f4da;项目场景: 修改数据时&#xff0c;允许将非必填字段清空。 ⛔问题描述: 由于使用的是Mybatis-Plus&#xff0c;只能使用LambdaUpdateWrapper或UpdateWrapper通过set(column,val)来将字段清空&#xff1b;因为字段太多导致大量set放在一个方法&#xff0c;不符合…

深度学习今年来经典模型优缺点总结,包括卷积、循环卷积、Transformer、LSTM、GANs等

文章目录 1、卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;1.1 优点1.2 缺点1.3 应用场景1.4 网络图 2、循环神经网络&#xff08;Recurrent Neural Networks&#xff0c;RNNs&#xff09;2.1 优点2.2 缺点2.3 应用场景2.4 网络图 3、长短…

L1-010:比较大小

题目描述 本题要求将输入的任意3个整数从小到大输出。 输入格式: 输入在一行中给出3个整数&#xff0c;其间以空格分隔。 输出格式: 在一行中将3个整数从小到大输出&#xff0c;其间以“->”相连。 输入样例: 4 2 8输出样例: 2->4->8 程序代码 #include<stdio.h&…

基于YOLOv8深度学习的安全帽目标检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Git——使用Git进行程序开发

主要介绍个人开发提交记录的主要流程&#xff0c;包括以下内容&#xff1a; 索引- 提交的暂存区。查看工作的状态和内部变更。如何读取用于描述变更的已扩展统一diff格式。支持查询和交互的提交&#xff0c;修改提交。创建、显示和选择&#xff08;切换&#xff09;分支。切换…

面试:如何故意减慢网站速度?

面试问题&#xff1a;假设你为你的客户建立了一个网站。但他没有定期支付费用。现在你想放慢他的网站速度&#xff0c;但又不想让他立即发现。你会怎么做&#xff1f; 我&#xff1a;用较慢的算法和其他与编码相关的选项替换代码中使用的算法。 面试问题&#xff1a;问在这种情…

婴儿专用洗衣机有必要买吗?宝宝洗衣机洗衣服

我们都知道刚出生的宝宝抵抗力较弱&#xff0c;很容易因为细菌感染然后生病&#xff0c;宝宝接触最多的就是衣服&#xff0c;我们在手洗的过程很难把衣服上的细菌清洗掉&#xff0c;而使用我们传统的洗衣机很容易造成细菌的第二次感染&#xff0c;很容易将宝宝的抵抗力弄得越来…

如何通过linux调用企业微信发送告警消息

一、前期准备 1、企业微信具备管理企业权限。 2、服务器有公网IP或者可以将本机端口通过net映射到公网。 二、通过脚本向企业微信发送消息 1、创建sh脚本用来发送消息。 vim 2.sh 注意&#xff1a;脚本中xxxx信息需要在企业微信管理后台获取。 #!/bin/bash # 设置企业…

2023年计网408

第33题 33.在下图所示的分组交换网络中&#xff0c;主机H1和H2通过路由器互连&#xff0c;2段链路的带宽均为100Mbps、 时延带宽积(即单向传播时延带宽)均为1000bits。若 H1向 H2发送1个大小为 1MB的文件&#xff0c;分组长度为1000B&#xff0c;则从H1开始发送时刻起到H2收到…

MySQL 学习笔记(刷题篇)

SQL进阶挑战 聚合分组查询 SQL123 select tag, difficulty, round((sum(score) - max(score) - min(score) ) / (count(score) - 2) ,1) as clip_avg_score from examination_info as ei, exam_record as er where ei.exam_id er.exam_id and ei.tag SQL and ei.diffi…

代码随想录刷题题Day2

刷题的第二天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C / Python Day2 任务 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵 II 1 有序数组的平方&#xff08;重点&#xff1a;双指针…

将项目放到gitee上

参考 将IDEA中的项目上传到Gitee仓库中_哔哩哔哩_bilibili 如果cmd运行ssh不行的话&#xff0c;要换成git bash 如果初始化后的命令用不了&#xff0c;直接用idea项放右键&#xff0c;用git工具操作

XXL-Job详解(二):安装部署

目录 前言环境下载项目调度中心部署执行器部署 前言 看该文章之前&#xff0c;最好看一下之前的文章&#xff0c;比较方便我们理解 XXL-Job详解&#xff08;一&#xff09;&#xff1a;组件架构 环境 Maven3 Jdk1.8 Mysql5.7 下载项目 源码仓库地址链接: https://github.…

前端对浏览器的理解

浏览器的主要构成 用户界面 &#xff0d; 包括地址栏、后退/前进按钮、书签目录等&#xff0c;也就是你所看到的除了用来显示你所请求页面的主窗口之外的其他部分。 浏览器引擎 &#xff0d; 用来查询及操作渲染引擎的接口。 渲染引擎 &#xff0d; 用来显示请求的内容&#…

中国丙烯基弹性体PBE市场调研与预测报告(2023版)

内容简介&#xff1a; 丙烯基弹性体&#xff08;PBE&#xff09;是以丙烯为主要原料&#xff0c;加入少量乙烯&#xff08;或α-烯烃&#xff09;单体经溶液聚合而得到的以无定形区域为主的低结晶聚合物。与传统的乙丙橡胶不同&#xff0c;PBE的乙烯含量通常低于20%&#xff0…

某60区块链安全之薅羊毛攻击实战一学习记录

区块链安全 文章目录 区块链安全薅羊毛攻击实战一实验目的实验环境实验工具实验原理实验内容薅羊毛攻击实战一 实验步骤EXP利用 薅羊毛攻击实战一 实验目的 学会使用python3的web3模块 学会分析以太坊智能合约薅羊毛攻击漏洞 找到合约漏洞进行分析并形成利用 实验环境 Ubun…

JVM类加载与运行时数据区

目录 一、类加载器 jvm类的加载过程 第一阶段&#xff1a;加载 第二阶段&#xff1a;链接阶段 第三阶段&#xff1a;初始化阶段&#xff1a; 双亲委派机制 沙箱安全机制 运行时数据区 栈-Xss1m 堆 TLAB 逃逸分析 方法区 常量池中有什么 StringTable为什么要调整位…

c# statusStrip 显示电脑主机名、IP地址、MAC地址

控件&#xff1a; ToolStripStatusLabel 主机名&#xff1a; Dns.GetHostName() IP地址&#xff1a; Dns.GetHostAddresses(Dns.GetHostName())[0].ToString() 当前程序的版本&#xff1a; Assembly.GetExecutingAssembly().GetName().Version.ToString() 获取系统版本 …

VS Code C++可视化调试配置Natvis,查看Qt、STL变量内容

VS Code C可视化调试配置Natvis 使用GlobalVisualizersDirectory Windows下 C:\Users\YourName\.vscode\extensions\ms-vscode.cpptools-1.18.5-win32-x64\debugAdapters\vsdbg\bin\Visualizers\Linux下 ~\.vscode\extensions\ms-vscode.cpptools-1.18.5-win32-x64\debugAd…