工具篇 | H2数据库的使用和入门
引言
1.1 H2数据库概述
1.1.1 定义和特点
H2数据库是一款以 Java编写的轻量级关系型数据库。由于其小巧、灵活并且易于集成,H2经常被用作开发和测试环境中的便利数据库解决方案。除此之外,H2也适合作为生产环境中的嵌入式数据库。它不仅支持标准的SQL,还兼容JDBC API,既可以以嵌入式的形式运行,也可以作为服务器模式运行。
1.1.2 发展历程与应用场景
H2数据库源于Hypersonic SQL项目,经过一系列的重构和优化,最终演变成为现今的H2数据库。H2以其轻量化和高性能而闻名,无论是作为轻量级应用的内存数据库,还是大型应用的本地缓存数据库,都展现出极高的适应性。尤其是在开发阶段,H2凭借其快速部署和便捷管理,成为了许多开发人员的首选。
1.1.3 H2的优势与局限性
H2数据库的突出优势在于其轻量级和高性能。作为一款Java编写的数据库,H2能够无缝集成到任何Java开发的应用中,免去了繁琐的安装和配置过程。同时,H2通过支持多种运行模式和提供丰富的SQL功能,实现了卓越的数据管理能力。
然而,相较于传统的企业级数据库,H2在数据持久化、高并发处理和数据安全性等方面仍显示出一定的局限性。例如,对于需求巨大、数据量庞大和并发请求繁多的大型企业应用,H2可能不是主数据库的理想选择。
以下所有示例均已上传至Github上,大家可以将项目拉取到本地进行运行
Github示例(如果对Gradle还不熟练,建议翻看我之前的文章):gradle-spring-boot-demo
H2 Console的探索与使用
2.1 H2 Console 概述
2.1.1 定义与特性
H2 Console 是H2数据库的网页版管理界面,提供简单、直观的操作界面,允许用户方便地进行数据库管理和SQL执行,极大地提升了开发和测试的效率。
2.1.2 访问与界面
配置并启用后,用户可通过http://localhost:8080/h2-console
访问。其界面整洁,功能明确,使用户能够快速上手。第一次访问会进入如下界面:
2.2 使用H2 Console与DataGrip执行数据库操作
2.2.1 执行SQL语句
H2 Console中,用户可直接输入和执行SQL语句,如创建表、插入数据、查询数据等。例如:
SELECT * FROM MY_ENTITY
2.2.2 通过DataGrip进行远程连接
除了使用H2 Console,用户还可以选择使用DataGrip等数据库工具通过JDBC进行远程连接,实现更为丰富和专业的数据库操作和管理。可以照着配置直接进行配置
2.3 H2 Console的优势与局限性
2.3.1 优势
H2 Console最大的优势是其便捷性和直观性。不需额外软件,开发者可直接通过浏览器进行数据库操作,快速验证数据和设计。
2.3.2 局限性
虽然便利,H2 Console作为轻量级工具,其功能并不完善,不适合进行如性能调优和安全管理等复杂任务,与专业数据库管理软件相比有所不足。
H2数据库的应用场景与数据库比较
3.1 H2数据库的应用场景
3.1.1 开发与测试环境
H2数据库以其轻量级和易配置的特性,成为开发和测试环境中的理想选择。在这些环境中,开发者能快速、无障碍地集成和使用H2,无需关注繁琐的数据库安装和维护,能更加聚焦于业务逻辑的开发和测试。
🌟 提示: 在快速原型开发和迭代中,H2能极大提高开发效率。
3.1.2 嵌入式应用
对于嵌入式应用如移动或小型桌面应用,H2同样是一个极佳的选择,占用资源极少,部署简便。
🌟 提示: 在资源受限的应用场景中,H2可以有效地提供便捷的数据存储服务。
3.2 H2与其他数据库的比较
3.2.1 与MySQL比较
H2的轻便和简易配置与MySQL的丰富功能形成鲜明对比。H2适合简单、快速的开发和测试,而MySQL更适应大型、功能丰富的企业级应用。
特性 | H2 | MySQL |
---|---|---|
性能 | H2是一个轻量级的数据库,适合在小型应用或者开发环境中使用。在DDL操作以及启动/关闭实例时,H2的性能优于其他一些数据库。 | MySQL是一个基于服务器的数据库,通常用于生产部署。在大型数据仓库或更密集的应用中,MySQL可能会有其限制。 |
功能 | H2是一个全功能的关系数据库管理系统,支持SQL,并且可以嵌入到Java应用程序中或者作为数据库服务器使用。它支持预定义的数据类型(如浮点数或日期),支持二级索引,并且支持Java存储过程和用户定义的函数。然而,它不支持XML处理,没有分区方法,也不提供用户定义的Map/Reduce方法。 | MySQL是一个广泛使用的开源关系数据库管理系统,支持SQL以及专有扩展。它支持预定义的数据类型(如浮点数或日期),支持二级索引,并且支持存储过程。此外,它还支持XML处理,具有水平分区、使用MySQL Cluster或MySQL Fabric进行分片的分区方法,以及多源复制和源-副本复制的复制方法。然而,对于MyISAM存储引擎,它不支持引用完整性。 |
易用性 | H2得分为8.0/10,用户推荐度为8.0/10。H2适合运行应用测试,并且可以轻松地替换实际生产环境中使用的数据库解决方案。然而,如果预计应用程序将被大量用户使用或者应用程序较为复杂,则更适合使用MySQL。 | MySQL得分为8.5/10,用户推荐度为8.3/10,续订意愿为9.9/10,可用性为10.0/10。从我自己的角度和我每天执行的任务来看,MySQL是完美的选择。它具有合理的占用空间,速度足够快,并且提供了我需要的安全性和灵活性。 |
3.2.2 与SQLite比较
H2和SQLite都适合嵌入式应用,但H2提供更全面的SQL支持和更优的并发连接。SQLite在移动设备上可能表现更优。
特性 | H2 | SQLite |
---|---|---|
应用场景 | H2适合在小型应用或者开发环境中使用。在DDL操作以及启动/关闭实例时,H2的性能优于其他一些数据库。H2数据库支持内存模式,数据不被持久化,适合特殊使用场景(例如:快速原型开发,测试,高性能操作,只读数据库)。 | SQLite因为其轻量级和无需服务器的特性,常常被用于移动设备(如iPhone、Android等)中。对于特殊使用场景(例如:快速原型开发,测试,高性能操作,只读数据库),可能不需要持久化数据或数据的改变。SQLite数据库支持内存模式,数据不被持久化。 |
功能 | H2是一个全功能的关系数据库管理系统,支持SQL,并且可以嵌入到Java应用程序中或者作为数据库服务器使用。它支持预定义的数据类型(如浮点数或日期),支持二级索引,并且支持Java存储过程和用户定义的函数。然而,它不支持XML处理,没有分区方法,也不提供用户定义的Map/Reduce方法。 | SQLite是一个广泛使用的开源关系数据库管理系统,支持SQL以及专有扩展。它支持预定义的数据类型(如浮点数或日期),支持二级索引,并且支持存储过程。此外,它还支持XML处理,具有水平分区、使用SQLite Cluster或SQLite Fabric进行分片的分区方法,以及多源复制和源-副本复制的复制方法。然而,对于MyISAM存储引擎,它不支持引用完整性。 |
易用性 | H2得分为8.0/10,用户推荐度为8.0/10。H2适合运行应用测试,并且可以轻松地替换实际生产环境中使用的数据库解决方案。然而,如果预计应用程序将被大量用户使用或者应用程序较为复杂,则更适合使用MySQL。 | SQLite得分为8.5/10,用户推荐度为8.3/10,续订意愿为9.9/10,可用性为10.0/10。从我自己的角度和我每天执行的任务来看,SQLite是完美的选择。它具有合理的占用空间,速度足够快,并且提供了我需要的安全性和灵活性。 |
3.2.3 与PostgreSQL比较
与PostgreSQL相比,H2更为简单、轻便,但可能在性能和功能上略逊一筹。PostgreSQL以其丰富的特性和优异的性能,适合更为复杂的企业级应用。
特性 | H2 | PostgreSQL |
---|---|---|
应用场景 | H2是一个轻量级的数据库,适合在小型应用或者开发环境中使用。H2数据库支持内存模式,数据不被持久化,适合特殊使用场景(例如:快速原型开发,测试,高性能操作,只读数据库)。 | PostgreSQL是一个基于服务器的数据库,通常用于生产部署。在大型数据仓库或更密集的应用中,PostgreSQL可能会有其限制。 |
功能 | H2是一个全功能的关系数据库管理系统,支持SQL,并且可以嵌入到Java应用程序中或者作为数据库服务器使用。它支持预定义的数据类型(如浮点数或日期),支持二级索引,并且支持Java存储过程和用户定义的函数。然而,它不支持XML处理,没有分区方法,也不提供用户定义的Map/Reduce方法。 | PostgreSQL是一个广泛使用的开源关系数据库管理系统,支持SQL以及专有扩展。它支持预定义的数据类型(如浮点数或日期),支持二级索引,并且支持存储过程。此外,它还支持XML处理,具有水平分区、使用PostgreSQL Cluster或PostgreSQL Fabric进行分片的分区方法,以及多源复制和源-副本复制的复制方法。然而,对于MyISAM存储引擎,它不支持引用完整性。 |
易用性 | H2得分为8.0/10。H2适合运行应用测试,并且可以轻松地替换实际生产环境中使用的数据库解决方案。然而,如果预计应用程序将被大量用户使用或者应用程序较为复杂,则更适合使用MySQL。 | PostgreSQL得分为8.5/10。从我自己的角度和我每天执行的任务来看,PostgreSQL是完美的选择。它具有合理的占用空间,速度足够快,并且提供了我需要的安全性和灵活性。 |
3.3 总结
H2数据库凭借其便捷性和简洁性在开发、测试和嵌入式应用中表现卓越。虽然在某些方面与其他数据库相比有所不足,但其简单快捷的特性,使得H2在特定场景下成为优秀的选择。
Java中的H2应用(Spring Boot和Spring Data JPA)
在Java项目中,Spring Boot和Spring Data JPA已经成为了主流的开发框架和技术。H2数据库与这些技术的集成也非常简单和直观。在本章中,我们将深入探讨如何在基于Spring Boot的项目中使用H2数据库,并借助Spring Data JPA进行数据操作。
4.1 在Spring Boot项目中集成H2
4.1.1 添加依赖
要在Spring Boot项目中集成H2数据库,只需在项目的pom.xml
文件中添加以下依赖:
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId>
</dependency>
当然,我的项目使用的是Gradle只需要加入一行代码即可:
runtimeOnly 'com.h2database:h2'
🌟 提示: Spring Boot会自动管理H2的版本,无需指定。
4.1.2 配置H2数据库
对于Spring Boot项目,我们通常在application.properties
或application.yml
中进行H2数据库的配置。以yml配置为例:
spring:datasource:# http://localhost:8080/h2-console/# url: jdbc:h2:mem:testdburl: jdbc:h2:file:./data/testdbdriver-class-name: org.h2.Driverusername: sapassword: passwordh2:console:enabled: true
4.2 使用Spring Data JPA进行数据操作
4.2.1 引入配置与JPA依赖
spring:jpa:hibernate:ddl-auto: updateshow-sql: true
// build.gradle
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
4.2.1 定义实体类
在Spring Boot项目中,我们首先需要定义一个实体类,并使用JPA注解来映射数据库表:
@Data
@Entity
@Table(name = "my_entity")
public class MyEntity {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;
}
4.2.2 创建Repository接口
接下来,我们需要创建一个Repository接口,继承自JpaRepository
,以提供对Employee
实体的CRUD操作:
public interface MyRepository extends JpaRepository<MyEntity, Long> {
}
4.2.3 进行数据操作
有了Repository接口,我们就可以在Service或Controller层进行数据的增删查改操作,例如:
@Transactional(transactionManager = "transactionManagerOne",propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 30)public void createEntity(MyEntity myEntity) {myRepository.save(myEntity);}
4.3 总结
通过Spring Boot和Spring Data JPA,Java开发者可以更加高效且优雅地集成和使用H2数据库。这种集成方式不仅简化了代码,还为开发者提供了一种更符合现代开发模式的数据操作方法。
💡 温馨提示: 使用Spring Data JPA可以极大简化数据访问代码,提高开发效率。
注意事项与最佳实践
使用H2数据库时,虽然其简便和轻量级为我们提供了诸多便利,但也需要我们关注一些重要的注意事项和实践方法,以确保数据的安全性和系统的稳定性。
5.1 注意事项
5.1.1 数据备份
由于H2主要用于开发和测试环境,可能不会经常对其数据进行备份。但是,为防止数据丢失,定期备份仍然是必要的。
5.1.2 数据安全
- 密码保护: 尽管H2主要用于开发环境,但也应该对其设置复杂的密码,防止未授权访问。
- 加密: 如果H2用于存储敏感信息,应该考虑使用加密功能,来保护数据的安全。
5.1.3 使用内存模式时的数据持久化
当H2运行在内存模式时,如果不采取措施,数据将在应用重启后丢失。应该考虑使用合适的方法,例如定期将数据保存到文件,来避免这一问题。
5.2 最佳实践
- 优先使用嵌入模式: 对于开发和测试环境,优先使用嵌入模式,以简化配置和提高性能。
- 适度使用Server模式:在需要多个应用访问同一数据库,或需要远程访问数据库时,可以考虑使用Server模式。
- 避免在生产环境使用:H2数据库主要设计为一个轻量级的开发工具,因此不建议在生产环境中使用,以避免潜在的性能和安全问题。
- 定期更新H2版本:为了确保安全和性能,应该定期检查并更新H2数据库的版本,以获得最新的功能和修复。
6.3 总结
正确而高效地使用H2数据库需要我们关注一些关键的注意事项,并遵循一些最佳实践。虽然H2的轻量级和便捷性使其成为开发和测试环境中的理想选择,但在生产环境中,应该慎重考虑其适用性,以避免可能的风险。
总结
H2数据库作为一款轻量级、高性能的嵌入式数据库,为开发者在开发和测试环境中提供了极大的便利。本文从H2数据库的基础概念出发,深入探讨了其特性、应用场景以及如何在现代Java项目中,特别是Spring Boot和Spring Data JPA中进行集成和使用。
我们还探讨了H2 Console的使用,这是一个对于数据库管理极其有用的工具,可以帮助开发者更加直观地操作和理解数据库。本文还强调了在使用H2数据库时需要注意的关键事项,例如数据的备份、安全性和持久化,并分享了一些相关的最佳实践和建议。
最后,虽然H2数据库在某些场景下是一个极好的选择,但是在考虑其应用到生产环境时,应该进行充分的评估和测试,以确保其可以满足项目的实际需求,并符合性能和安全性的标准。
参考文献
- H2 Database Engine - 官方文档
- H2内存数据库使用教程详解 - 知乎
- H2数据库入门,看这篇就对了 - CSDN
- 通过官方文档学习 H2 数据库 - CSDN
相关文章:

工具篇 | H2数据库的使用和入门
引言 1.1 H2数据库概述 1.1.1 定义和特点 H2数据库是一款以 Java编写的轻量级关系型数据库。由于其小巧、灵活并且易于集成,H2经常被用作开发和测试环境中的便利数据库解决方案。除此之外,H2也适合作为生产环境中的嵌入式数据库。它不仅支持标准的SQL…...

PHP脚本导出MySQL数据库
背景:有时候需要同步数据库的表结构和部分数据,同步全表数据非常大,也不适合。还有一个种办法是使用数据库的dump命令执行备份,无法进入服务器?没有权限怎么办? 这里只要能访问服务器中的 information_sch…...
生成随机单据号
背景:全局生成4位字符2222-9ZZ9 实现方式: 使用redis的原子自增 google的retry保证,生成4位数 1、pom <dependency><groupId>com.github.rholder</groupId><artifactId>guava-retrying</artifactId><v…...

【计算机网络笔记五】应用层(二)HTTP报文
HTTP 报文格式 HTTP 协议的请求报文和响应报文的结构基本相同,由四部分组成: ① 起始行(start line):描述请求或响应的基本信息;② 头部字段集合(header):使用 key-valu…...

安装Python3.x--Windows
1 下载安装包 确定安装是干什么,要下哪个版本(如果是配置项目环境,最好按项目需求的版本来装) 1.1 官网链接 https://www.python.org 最新版本 指定版本 2 安装说明 点击下载exe,运行自定义安装路径,下…...

坐标休斯顿,TDengine 受邀参与第九届石油天然气数字化大会
美国中部时间 9 月 14 日至 15 日,第九届石油天然气数字化大会在美国德克萨斯州-休斯顿-希尔顿美洲酒店举办。本次大会汇聚了数百名全球石油天然气技术高管及众多极具创新性的数据技术方案商,组织了上百场硬核演讲,技术专家与行业从业者共聚一…...

labview 混合信号图 多曲线分组
如果你遇到了混合信号图 多曲线分组显示的问题,本文能给你帮助。 在文章的最好,列出了参考程序下载链接。 一个混合信号图中可包含多个绘图区域。 但一个绘图区域仅能显示数字曲线或者模拟曲线之一,无法兼有二者。 以下显示的分两组&#…...

客户端负载均衡_负载均衡策略
以前的Ribbon有多种负载均衡策略 RandomRule - 随性而为 解释: 随机 RoundRobinRule - 按部就班 解释: 轮询 RetryRule - 卷土重来 解释: 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试。 Weigh…...

使用Python+Flask/Moco框架/Fiddler搭建简单的接口Mock服务
一、Mock测试 1、介绍 mock:就是对于一些难以构造的对象,使用虚拟的技术来实现测试的过程mock测试:在测试过程中,对于某些不容易构造或者不容易获取的对象,可以用一个虚拟的对象来代替的测试方法接口mock测试&#x…...

【Vue】Mock.js介绍和使用与首页导航栏左侧菜单搭建
目录 一、Mock.js 1.1 mockjs介绍 1.2 mock.js安装与配置 1.2.1 安装mock.js 1.2.2 引入mock.js 1.3 mock.js的使用 1.3.1 准备模拟数据 1.3.2 定义拦截路由 1.3.3 测试 二、首页导航栏左侧菜单搭建 2.1 自定义界面组件 (完整代码) 2.2 配置路由 2.3 组件显示折叠和…...

离散小波变换(概念与应用)
目录 概念光伏功率预测中,如何用离散小波变换提取高频特征概念 为您简单地绘制一些示意图来描述离散小波变换的基本概念。但请注意,这只是一个简化的示意图,可能不能完全捕捉到所有的细节和特性。 首先,我将为您绘制一个简单的小波函数和尺度函数的图像。然后,我会提供一…...

代码随想录day49:动态规划part10
121.买卖股票的最佳时机 贪心: class Solution { public:int maxProfit(vector<int>& prices) {int low INT_MAX;int result 0;for (int i 0; i < prices.size(); i) {low min(low, prices[i]); // 取最左最小价格result max(result, prices[i…...
fofa搜索使用
fofa搜索使用 文章目录 fofa搜索使用网站fofa搜索语法多条件查询 网站fofa https://fofa.info/搜索语法 1.title”beijing”从标题中搜索“北京2.headerQ"thinkphp”从http响应头中搜索“thinkphp3.body”管理后台”从html正文中搜索“管理后台4.domain”163.com”从子域…...
husky+lint-staged+eslint+prettier+stylelint+commitlint
概念: husky,暴露出git的hook钩子,在这些钩子执行一些命令,lint-staged,只在git的暂存区有修改的文件进行lint操作,执行一些校验脚本eslint,prettier,styelint有npm包还有对应的scode插件,其中npm包是用于执行那些诸如入eslint --fix "src/**/*.{js,jsx,…}"的脚本命…...

图像处理与计算机视觉--第四章-图像滤波与增强-第一部分
目录 1.灰度图亮度调整 2.图像模板匹配 3.图像裁剪处理 4.图像旋转处理 5.图像邻域与数据块处理 学习计算机视觉方向的几条经验: 1.学习计算机视觉一定不能操之过急,不然往往事倍功半! 2.静下心来,理解每一个函数/算法的过程和精髓&…...
【go】字符串切片与字符串出入数据库转化
文章目录 需求代码入库出库 需求 将请求数据存入数据库与从数据库读取数据返回在出库不使用反序列化情况下 请求结构体 type NoticegroupsCreateReq struct {Name string json:"name" binding:"required"UserIds []string json:"user_ids…...

Redis中是如何实现分布式锁的?
分布式锁常见的三种实现方式: 数据库乐观锁; 基于Redis的分布式锁; 基于ZooKeeper的分布式锁。 本次面试考点是,你对Redis使用熟悉吗?Redis中是如何实现分布式锁的。 要点 Redis要实现分布式锁,以下条件应…...

似然和概率
前言 高斯在处理正态分布的首次提出似然,后来英国物理学家,费歇尔 概率是抛硬币之前,根据环境推断概率 似然则相反,根据结果推论环境 P是关于x的函数,比如x为正面朝上的结果,或者反面朝上的结果…...

php代码审计篇熊海cms代码审计
文章目录 自动审计逐个分析首页index.php文件包含漏洞后台逻辑漏洞cookie绕过登录后台sql报错注入存储型XSS 结束吧 自动审计 看到有很多 逐个分析 首页index.php文件包含漏洞 读一下代码,可以看到很明显的一个文件包含 <?php //单一入口模式 error_repor…...

Android Camera2获取摄像头的视场角(FOV)信息
一、概念 FOV(Field of View)是一个用于描述视野范围的术语。它通常用于计算设备(如摄像机、虚拟现实头显或眼睛)所能捕捉到的可见区域。 水平FOV(Horizontal FOV):描述视野在水平方向上的范围…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...