1.介绍

Java H2 是一个用 Java 编写的轻量级、开源的关系型数据库。它以其体积小、性能高、易于使用而闻名,常被用于开发和测试环境中,也适用于特定的生产环境。H2 数据库支持内存存储模式,这意味着数据可以直接存储在内存中,从而提供快速的数据访问速度。此外,H2 还支持磁盘持久化存储。

H2 的主要特点包括:

  1. 内存数据库:H2 可以将数据存储在内存中,提供比基于磁盘的数据库更快的数据访问速度。但如有需要,也可以将数据持久化存储在磁盘上。

  2. JDBC API 支持:H2 支持 Java 数据库连接(JDBC)API,使其能够兼容广泛的 Java 应用程序。

  3. SQL 支持:H2 提供了广泛的 SQL 支持,包括许多标准 SQL 功能和一些特定的自定义增强功能。

  4. Web 控制台:H2 提供了一个基于网络的控制台,用于数据库管理,方便执行 SQL 查询和进行数据库操作。

  5. 嵌入式和服务器模式:在嵌入式模式中,数据库在您的应用程序内运行;在服务器模式中,它作为一个单独的进程运行,可以被多个应用程序访问。

  6. 跨平台:作为 Java 应用程序,H2 是跨平台的,可以在任何支持 Java 的系统上运行。

在 Java 项目中使用 H2,通常需要在项目的构建文件(如 Maven 或 Gradle)中添加它作为依赖。之后,您可以通过 JDBC 连接到 H2 数据库,创建表格、插入数据和执行查询,就像使用任何其他 SQL 数据库一样。

1.1.官方网站、GitHub仓库、社区

  1. 官方网站: H2 的官方网站提供了关于这个数据库的详细信息,包括它的主要特性、使用方法和下载链接。您可以通过 H2 Database 官网 来获取这些信息。

  2. GitHub 仓库: 在 GitHub 上,您可以找到 H2 数据库的源代码,以及关于其开发和维护的更多细节。这对于希望深入了解 H2 内部工作原理的开发者特别有用。访问 H2 GitHub 仓库 来了解更多。

  3. GitHub 中文社区: 在 GitHub 中文社区,您可以找到有关 H2 数据库的信息,包括项目介绍和使用教程,这可能对讲中文的用户更加友好。您可以通过 GitHub 中文社区 来访问相关信息。

2.Java SpringBoot集成H2数据库并应用

2.1. 代码

2.1.1. pom文件

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
    <modelVersion>4.0.0</modelVersion>  
  
    <groupId>org.example</groupId>  
    <artifactId>H2Demo</artifactId>  
    <version>1.0-SNAPSHOT</version>  
  
    <properties>        <maven.compiler.source>8</maven.compiler.source>  
        <maven.compiler.target>8</maven.compiler.target>  
    </properties>  
    <dependencies>        <!-- Spring Boot Starter Web, 包含了 Spring MVC -->        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-web</artifactId>  
            <version>2.3.12.RELEASE</version>  
        </dependency>  
        <!-- Spring Boot Starter Data JPA, 用于数据库操作 -->  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-data-jpa</artifactId>  
            <version>2.3.12.RELEASE</version>  
        </dependency>  
        <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->  
        <dependency>  
            <groupId>com.h2database</groupId>  
            <artifactId>h2</artifactId>  
            <version>2.1.214</version>  
        </dependency>  
    </dependencies>  
</project>

2.1.2.application.yml配置文件

server:  
  port: 6610  
  maxHttpHeaderSize: 10240000  
spring:  
  datasource:  
    # 内存存储  
#    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1  
    # 文件存储  
    url: jdbc:h2:file:E:/demodb  
    driverClassName: org.h2.Driver  
    username: sa  
    password:  
  h2:  
    console:  
      enabled: true  
      path: /h2-console  
  jpa:  
    show-sql: true  
    hibernate:  
      ddl-auto: update  
    properties:  
      hibernate:  
        dialect: org.hibernate.dialect.H2Dialect

2.1.3.代码

package xiaocai;  
  
/**  
 * @BelongsProject: H2Demo  
 * @BelongsPackage: xiaocai  
 * @Author: 蔡名洋  
 * @CreateTime: 2024-01-31  16:36  
 * @Description: TODO  
 * @Version: 1.0  
 */import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
  
@SpringBootApplication()  
public class App {  
  
    public static void main(String[] args) {  
        System.setProperty("user.timezone", "GMT +08");  
        SpringApplication.run(App.class, args);  
    }  
}
package xiaocai.controller;  
  
/**  
 * @BelongsProject: H2Demo  
 * @BelongsPackage: xiaocai.controller  
 * @Author: 蔡名洋  
 * @CreateTime: 2024-01-31  16:38  
 * @Description: TODO  
 * @Version: 1.0  
 */import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.*;  
import xiaocai.entity.Person;  
import xiaocai.repository.PersonRepository;  
  
import java.util.List;  
  
@RestController  
@RequestMapping("/persons")  
public class PersonController {  
  
    @Autowired  
    private PersonRepository personRepository;  
  
    @GetMapping(value = "getAllPersons")  
    public List<Person> getAllPersons() {  
        return (List<Person>) personRepository.findAll();  
    }  
  
    @PostMapping  
    public Person addPerson(@RequestBody Person person) {  
        return personRepository.save(person);  
    }  
}
package xiaocai.entity;  
  
import javax.persistence.Entity;  
import javax.persistence.GeneratedValue;  
import javax.persistence.GenerationType;  
import javax.persistence.Id;  
  
/**  
 * @BelongsProject: H2Demo  
 * @BelongsPackage: xiaocai.entity  
 * @Author: 蔡名洋  
 * @CreateTime: 2024-01-31  16:37  
 * @Description: TODO  
 * @Version: 1.0  
 */@Entity  
public class Person {  
  
    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO)  
    private Long id;  
    private String name;  
    private int age;  
  
    public Long getId() {  
        return id;  
    }  
  
    public void setId(Long id) {  
        this.id = id;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public int getAge() {  
        return age;  
    }  
  
    public void setAge(int age) {  
        this.age = age;  
    }  
}
package xiaocai.repository;  
  
/**  
 * @BelongsProject: H2Demo  
 * @BelongsPackage: xiaocai.repository  
 * @Author: 蔡名洋  
 * @CreateTime: 2024-01-31  16:37  
 * @Description: TODO  
 * @Version: 1.0  
 */import org.springframework.data.repository.CrudRepository;  
import xiaocai.entity.Person;  
  
public interface PersonRepository extends CrudRepository<Person, Long> {  
}

2.1.4.运行效果

http://localhost:6610/h2-console

在这里插入图片描述

localhost:6610/persons/getAllPersons

[
    {
        "id": 1,
        "name": "1",
        "age": 1
    },
    {
        "id": 2,
        "name": "2",
        "age": 2
    },
    {
        "id": 3,
        "name": "3",
        "age": 3
    }
]

3.重要的点

3.1.内存和物理存储


    # 内存存储  
#    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1  
    # 文件存储  
    url: jdbc:h2:file:E:/demodb  
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐