Spring Boot 与 H2 数据库:轻量级应用的理想选择!

举报
bug菌 发表于 2025/07/16 15:47:41 2025/07/16
【摘要】 🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8 📜 前言:为什么选择H2数据库?在现代软件开发中,尤其是在构建小型应...

🏆本文收录于「滚雪球学SpringBoot」专栏(全网一个名),手把手带你零基础入门Spring Boot,从入门到就业,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

📜 前言:为什么选择H2数据库?

在现代软件开发中,尤其是在构建小型应用、原型开发、单元测试和快速验证场景时,选择一个合适的数据库变得尤为重要。对于这些场景,传统的数据库管理系统可能会显得过于庞大和复杂,而H2数据库作为一个轻量级的嵌入式数据库,其出色的性能、易用性和高灵活性使它成为开发和测试中的理想选择。

H2数据库是一个开源的、纯Java编写的关系型数据库,它提供了内存模式和持久化模式两种运行模式,非常适合在Spring Boot项目中进行集成。无论是快速的原型开发,还是高效的单元测试,H2数据库都能够极大地简化数据库的配置与管理,快速启动应用,且性能表现优异。

在Spring Boot中,H2数据库的集成非常简单,我们可以通过配置文件轻松地切换内存模式与持久化模式,为开发者提供了灵活的数据存储选择。本文将详细介绍如何在Spring Boot中与H2数据库结合,构建轻量级应用,如何根据不同的场景配置内存模式与持久化模式,以及如何利用H2数据库进行高效的开发与测试。

🧑‍💻 1️⃣ 基于Spring Boot与H2数据库构建轻量级应用

🛠️ 什么是H2数据库?

H2是一个轻量级、快速、开源的关系型数据库,它的特点包括:

  • 内存模式支持:H2可以完全在内存中运行,无需磁盘存储,适合用于临时数据存储或快速开发验证。
  • 持久化模式支持:H2也可以将数据持久化到磁盘中,适合长期存储小型应用的数据。
  • 高性能:作为内存数据库,H2具有非常高的读写性能,启动非常迅速,且对内存和CPU的占用非常低。
  • SQL兼容:H2支持标准SQL,能够兼容大多数基于SQL的数据库操作。

🛠️ 步骤 1:引入H2数据库依赖

在Spring Boot项目中集成H2数据库,首先需要在pom.xml中添加H2数据库的相关依赖:

<dependencies>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.200</version>  <!-- H2数据库的版本 -->
        <scope>runtime</scope>  <!-- 仅在运行时需要 -->
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>  <!-- JPA支持 -->
    </dependency>
</dependencies>
  • h2:这是H2数据库的核心依赖,包含了内存数据库和持久化数据库的实现。
  • spring-boot-starter-data-jpa:这是Spring Boot对JPA(Java Persistence API)的支持,自动配置了数据库连接、事务管理等功能,简化数据库操作。

🛠️ 步骤 2:配置Spring Boot与H2数据库

application.properties中配置H2数据库的连接信息。Spring Boot支持内存模式和持久化模式两种配置方式。

内存模式配置

内存模式下的H2数据库不会在磁盘上持久化数据,适合用于临时存储和开发环境,应用关闭后数据会丢失。

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1  # 使用内存模式
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa  # 默认用户名
spring.datasource.password=  # 默认无密码
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect  # 设置Hibernate方言
spring.h2.console.enabled=true  # 启用H2数据库控制台
  • jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1:表示H2数据库在内存中运行,数据库名为testdbDB_CLOSE_DELAY=-1表示数据库在应用关闭后不删除。
  • spring.h2.console.enabled=true:启用H2控制台,能够通过浏览器访问http://localhost:8080/h2-console查看和操作数据库。

持久化模式配置

持久化模式下的H2数据库会将数据保存到文件系统中,关闭应用时数据不会丢失,适合用于小型应用。

spring.datasource.url=jdbc:h2:file:./data/testdb;DB_CLOSE_ON_EXIT=FALSE  # 使用文件模式
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
  • jdbc:h2:file:./data/testdb:表示H2数据库文件存储在./data/testdb路径下。
  • DB_CLOSE_ON_EXIT=FALSE:表示数据库在应用关闭后不会自动关闭,数据会被持久化。

🛠️ 步骤 3:创建实体类

在Spring Boot中,通常使用JPA(Java Persistence API)与数据库进行交互。JPA可以将Java对象映射到数据库表。以下是一个简单的实体类示例:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
}

代码解析:

  • @Entity:标注该类为JPA实体类,Spring Boot会自动为其生成对应的数据库表。
  • @Id:标注为主键字段,Spring Boot会自动生成主键ID。

🛠️ 步骤 4:创建Repository接口

Spring Data JPA提供了便捷的数据访问方式,我们可以创建一个Repository接口来简化数据库操作。

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    User findByName(String name);  // 根据名字查询用户
}

代码解析:

  • JpaRepository<User, Long>:继承自JpaRepository,它提供了CRUD操作的实现,无需手动编写SQL查询。
  • findByName:自定义查询方法,按name字段查找用户。

🛠️ 步骤 5:创建控制器

接下来,创建一个RESTful控制器类,使用UserRepository进行数据库操作并返回结果:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping("/users")
    public List<User> getUsers() {
        return userRepository.findAll();  // 获取所有用户
    }
}

代码解析:

  • @RestController:标注该类为RESTful控制器,Spring Boot会自动处理请求和响应。
  • userRepository.findAll():查询所有用户数据并返回。

🛠️ 步骤 6:访问H2数据库控制台

Spring Boot内置了H2数据库控制台。启动Spring Boot应用后,可以通过浏览器访问http://localhost:8080/h2-console来查看和管理数据库。在登录时,使用配置文件中设置的数据库URL(jdbc:h2:mem:testdb)、用户名(sa)和密码(空密码)即可。

🧑‍💻 2️⃣ 使用Spring Boot与H2数据库进行开发与测试

🛠️ H2数据库的内存模式与持久化模式

H2数据库支持两种运行模式,内存模式和持久化模式,开发者可以根据需要选择合适的模式:

内存模式

  • 适用于开发和测试环境,数据存储在内存中,关闭应用后数据丢失。
  • 配置:jdbc:h2:mem:testdb

持久化模式

  • 适用于小型应用,数据持久化到文件中,应用关闭后数据不会丢失。
  • 配置:jdbc:h2:file:./data/testdb

🛠️ 步骤 1:内存模式配置

内存模式下的H2数据库非常适合用于开发和测试,因为它不需要实际的磁盘存储,启动非常快速。你可以通过以下方式配置内存模式:

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
  • jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1:表示使用内存数据库testdbDB_CLOSE_DELAY=-1表示数据库在关闭后不删除。

🛠️ 步骤 2:持久化模式配置

持久化模式下的H2数据库将数据保存到文件系统中,在关闭应用时,数据依然保留。可以通过以下方式配置持久化模式:

spring.datasource.url=jdbc:h2:file:./data/testdb;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
  • jdbc:h2:file:./data/testdb:表示H2数据库文件存储在本地,路径为./data/testdb
  • DB_CLOSE_ON_EXIT=FALSE:表示数据库在应用关闭后不会自动关闭,数据会被持久化。

🛠️ 步骤 3:配置测试模式

H2数据库非常适合用于单元测试。在Spring Boot中,可以通过配置@DataJpaTest注解来创建一个基于H2的测试环境。以下是一个简单的测试类:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import static org.junit.jupiter.api.Assertions.assertEquals;

@DataJpaTest
public class UserRepositoryTests {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void testCreateUser() {
        User user = new User();
        user.setName("John Doe");
        user.setEmail("john.doe@example.com");
        userRepository.save(user);

        User foundUser = userRepository.findByName("John Doe");
        assertEquals("John Doe", foundUser.getName());
    }
}

代码解析:

  • @DataJpaTest:这是Spring Boot测试的一个注解,它会自动配置H2数据库,加载JPA相关配置。
  • userRepository.save(user):保存一个用户。
  • userRepository.findByName("John Doe"):根据name查找用户。

🚀 小结:构建轻量级应用与高效测试

通过本文的介绍,我们学习了如何将Spring Boot与H2数据库结合使用,构建一个轻量级的应用程序。H2数据库提供了内存模式和持久化模式两种灵活的选择,适合于开发、测试和小型应用。我们还介绍了如何在Spring Boot中使用JPA与H2数据库进行开发和测试,如何在内存模式和持久化模式下进行配置。

Spring Boot与H2的结合,使得开发人员可以在短时间内搭建一个完整的应用,并能够利用H2数据库进行高效的测试,快速验证功能。在开发过程中使用内存模式,而在生产环境中则使用持久化模式,以实现更持久的数据存储。

🚀 总结:轻量级数据库的完美选择

H2数据库作为一个轻量级的关系型数据库,具有非常高的灵活性和易用性,适合用于小型应用、开发环境、原型开发以及单元测试。通过Spring Boot与H2的集成,开发者可以快速构建和测试应用,并充分利用Spring Boot的自动化配置和JPA功能。

无论是在开发、测试,还是小型应用中,H2数据库都能提供极大的便利。通过内存模式,我们能够快速搭建测试环境;而持久化模式则保证了长期数据存储的稳定性。希望本文能够帮助你更好地理解和利用Spring Boot与H2数据库,为你在轻量级应用和测试中的使用提供指导。

🧧福利赠与你🧧

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学SpringBoot」专栏(全网一个名),bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门SpringBoot,就像滚雪球一样,越滚越大, 无边无际,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

✨️ Who am I?

我是bug菌(全网一个名),CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主/价值贡献奖,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。