H2数据库
1.介绍
Java H2 是一个用 Java 编写的轻量级、开源的关系型数据库。它以其体积小、性能高、易于使用而闻名,常被用于开发和测试环境中,也适用于特定的生产环境。H2 数据库支持内存存储模式,这意味着数据可以直接存储在内存中,从而提供快速的数据访问速度。此外,H2 还支持磁盘持久化存储。
H2 的主要特点包括:
-
内存数据库:H2 可以将数据存储在内存中,提供比基于磁盘的数据库更快的数据访问速度。但如有需要,也可以将数据持久化存储在磁盘上。
-
JDBC API 支持:H2 支持 Java 数据库连接(JDBC)API,使其能够兼容广泛的 Java 应用程序。
-
SQL 支持:H2 提供了广泛的 SQL 支持,包括许多标准 SQL 功能和一些特定的自定义增强功能。
-
Web 控制台:H2 提供了一个基于网络的控制台,用于数据库管理,方便执行 SQL 查询和进行数据库操作。
-
嵌入式和服务器模式:在嵌入式模式中,数据库在您的应用程序内运行;在服务器模式中,它作为一个单独的进程运行,可以被多个应用程序访问。
-
跨平台:作为 Java 应用程序,H2 是跨平台的,可以在任何支持 Java 的系统上运行。
在 Java 项目中使用 H2,通常需要在项目的构建文件(如 Maven 或 Gradle)中添加它作为依赖。之后,您可以通过 JDBC 连接到 H2 数据库,创建表格、插入数据和执行查询,就像使用任何其他 SQL 数据库一样。
1.1.官方网站、GitHub仓库、社区
-
官方网站: H2 的官方网站提供了关于这个数据库的详细信息,包括它的主要特性、使用方法和下载链接。您可以通过 H2 Database 官网 来获取这些信息。
-
GitHub 仓库: 在 GitHub 上,您可以找到 H2 数据库的源代码,以及关于其开发和维护的更多细节。这对于希望深入了解 H2 内部工作原理的开发者特别有用。访问 H2 GitHub 仓库 来了解更多。
-
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
更多推荐
所有评论(0)