SpringBoot 使用 H2 文本数据库构建轻量级应用

前言

给大家推荐一个网站,是开发者的知识库,涵盖 Java 程序员需要掌握的核心知识。有兴趣的小伙伴可以收藏。
http://farerboy.com

什么是H2文本数据库

H2 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

H2 官网:
++http://www.h2database.com/html/main.html++

有哪些用途

  • H2最大的用途在于可以同应用程序打包在一起发布,这样可以非常方便地存储少量结构化数据。
  • 它的另一个用途是用于单元测试。启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态。
  • H2的第三个用处是作为缓存,作为NoSQL的一个补充。当某些场景下数据模型必须为关系型,可以拿它当Memcached使,作为后端MySQL/Oracle的一个缓冲层,缓存一些不经常变化但需要频繁访问的数据,比如字典表、权限表。不过这样系统架构就会比较复杂了。

H2的产品优势

  • 纯Java编写,不受平台的限制;
  • 只有一个jar文件,适合作为嵌入式数据库使用;
  • h2提供了一个十分方便的web控制台用于操作和管理数据库内容;
  • 功能完整,支持标准SQL和JDBC。麻雀虽小五脏俱全;
  • 支持内嵌模式、服务器模式和集群。

集成案例

添加H2和JPA的依赖

复制代码
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

配置H2和JPA注入参数

复制代码
spring:
  datasource:
    data: classpath:db/data.sql
    driverClassName: org.h2.Driver
    password: sa
    platform: h2
    schema: classpath:db/schema.sql
    url: jdbc:h2:mem:dbtest
    username: sa
  h2:
    console:
      enabled: true
      path: /h2
      settings:
        web-allow-others: true
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

其中资源下还需要配置数据库的表结构schema.sql

复制代码
create table if not exists tb_user (
USER_ID int not null primary key auto_increment,
USER_NAME varchar(100)
);

以及数据文件 data.sql, 默认插入一条'赵一'的数据

复制代码
INSERT INTO tb_user (USER_ID,USER_NAME) VALUES(1,'赵一');

实体关联表

给User添加@Entity注解,和@Table注解

复制代码
package tech.farerboy.springboot.h2.entity;

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

@Entity
@Table(name = "tb_user")
public class User {

    @Id
    private int userId;
    private String userName;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}

Dao继承JpaRepository

复制代码
package tech.farerboy.springboot.h2.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import tech.farerboy.springboot.h2.entity.User;

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {

}

一些思考

这里补充一些H2数据库的知识点(特别是如何用H2做单元测试), 可以跳过。

H2数据库通常如何使用?

  • 嵌入式模式 (上文例子)

在嵌入式模式下,应用程序使用JDBC从同一JVM中打开数据库。这是最快也是最容易的连接方式。缺点是数据库可能只在任何时候在一个虚拟机(和类加载器)中打开。与所有模式一样,支持持久性和内存数据库。对并发打开数据库的数量或打开连接的数量没有限制。

  • 服务器模式

当使用服务器模式(有时称为远程模式或客户机/服务器模式)时,应用程序使用 JDBC 或 ODBC API 远程打开数据库。服务器需要在同一台或另一台虚拟机上启动,或者在另一台计算机上启动。许多应用程序可以通过连接到这个服务器同时连接到同一个数据库。在内部,服务器进程在嵌入式模式下打开数据库。

服务器模式比嵌入式模式慢,因为所有数据都通过TCP/IP传输。与所有模式一样,支持持久性和内存数据库。对每个服务器并发打开的数据库数量或打开连接的数量没有限制。

  • 混合模式

混合模式是嵌入式和服务器模式的结合。连接到数据库的第一个应用程序在嵌入式模式下运行,但也启动服务器,以便其他应用程序(在不同进程或虚拟机中运行)可以同时访问相同的数据。本地连接的速度与数据库在嵌入式模式中的使用速度一样快,而远程连接速度稍慢。

服务器可以从应用程序内(使用服务器API)启动或停止,或自动(自动混合模式)。当使用自动混合模式时,所有想要连接到数据库的客户端(无论是本地连接还是远程连接)都可以使用完全相同的数据库URL来实现。

相关推荐
卷无止境几秒前
除了开发api,FastAPI其实也可以配合jinja2模板写页面
后端·python·fastapi
吴声子夜歌6 分钟前
Java面试——基础
java·开发语言·面试
newerp7 分钟前
Redis 操作与缓存策略
后端·程序员·go
newerp10 分钟前
GORM ORM 基础
后端·程序员·go
小岛前端16 分钟前
AI Skills 已经封神,但新的问题却越来越严重!
前端·后端·github
拖孩20 分钟前
一个人 + AI 做的小程序,上线 15 天赚了 10 块 5
前端·后端·微信小程序
newerp22 分钟前
CRUD 操作与预处理语句
后端·程序员·go
智码看视界26 分钟前
Day 56:AI辅助开发全面提效:Copilot + Cursor的Java开发
java·单元测试·copilot·cursor·后端开发·代码审查·ai辅助开发
tachibana227 分钟前
把RAGAS跑起来
数据库·人工智能·ai·架构·大模型·llm·rag
wei_shuo28 分钟前
KES 数据同步与ETL实战:数据集成、转换与实时同步方案
后端