H2数据库

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  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/455733.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存内计算架构在通用视觉模型上的潜力应用

近年来&#xff0c;人工智能领域的通用视觉模型在自动驾驶、医疗图像分析、机器人视觉系统等场景中发挥了越来越重要的作用&#xff0c;它们通过模拟人类的视觉处理机制&#xff0c;有效地识别、理解和分析图像和视频数据。同时&#xff0c;新兴的存内计算架构显著优化了现有通…

SQLite database实现加密

注意&#xff1a;以下操作以VS2022为开发工具&#xff0c;以C#为开发语言。 数据加密原因 软件在使用的各个场景&#xff0c;很多都需要数据具有保密性&#xff0c;于是对于数据库就需要加密。特别是在某些特定领域或存储敏感数据尤其如此。 SQLite加密实现 SQLite加密有两种…

Arduino 串口绘图仪简单使用

1、工具所在位置 串口绘图仪实际上是从预设的串口获取值并将其绘制在xy轴图每获取到一组数据向左滑动一个单位&#xff0c;读取数据的速度起快&#xff0c;滑动就越快。 Y轴代表来自串口的值&#xff0c;可以是单个也可以是一组 。在读取串口数据时遇到"\n"&#xf…

Windows下Node.js下载安装及环境变量配置教程

Windows下Node.js下载安装及环境变量配置教程 安装版本&#xff1a;node-v18.19.0-x64.msi 文章目录 Windows下Node.js下载安装及环境变量配置教程一、Node.js和NPM简介二、下载地址三、安装步骤四、环境配置五、安装淘宝镜像总结 一、Node.js和NPM简介 1、Node.js &#xf…

Java设计模式大全:23种常见的设计模式详解(一)

本系列文章简介&#xff1a; 设计模式是在软件开发过程中&#xff0c;经过实践和总结得到的一套解决特定问题的可复用的模板。它是一种在特定情境中经过验证的经验和技巧的集合&#xff0c;可以帮助开发人员设计出高效、可维护、可扩展和可复用的软件系统。设计模式提供了一种在…

Java 学习和实践笔记(1)

2024年&#xff0c;决定好好学习计算机语言Java. B站上选了这个课程&#xff1a;【整整300集】浙大大佬160小时讲完的Java教程&#xff08;学习路线Java笔记&#xff09;零基础&#xff0c;就从今天开始学吧。 在这些语言中&#xff0c;C语言是最基础的语言&#xff0c;绝大多…

SQL 表信息 | 统计 | 脚本

介绍 统计多个 SQL Server 实例上多个数据库的表大小、最后修改时间和行数&#xff0c;可以使用以下的 SQL 查询来获取这些信息。 脚本 示例脚本&#xff1a; DECLARE Query NVARCHAR(MAX)-- 创建一个临时表用于存储结果 CREATE TABLE #TableSizes (DatabaseName NVARCHAR…

ResizeObserver的使用

这篇说下ResizeObserver API。ResizeObserver接口监视 Element 内容盒或边框盒或者 SVGElement 边界尺寸的变化。 ResizeObserver避免了通过回调函数调整大小时&#xff0c;通常创建的无限回调循环和循环依赖项。它只能通过在后续的帧中处理 DOM 中更深层次的元素来做到这一点…

CGAL-3D 凸包算法

3D 凸包算法 一、概述二、静态凸包构造1. Traits 特征类2. 极端点3. 半空间相交4. 凸性检验 三、动态凸包构造四、性能 一、概述 一个点集 S∈R3 是凸的&#xff0c;如果对于任意两点 p 和 q 在集合中&#xff0c;具有端点的线段 p 和 q 包含在 S。集合的凸包 P 包含点集 S 的最…

Java开发IntelliJ IDEA2023

IntelliJ IDEA 2023是一款强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为Java开发人员设计。它提供了许多特色功能&#xff0c;帮助开发人员更高效地编写、测试和调试Java应用程序。以下是一些IntelliJ IDEA 2023的特色功能&#xff1a; 智能代码编辑器&…

《动手学深度学习(PyTorch版)》笔记7.4

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

专业排版设计软件:QuarkXPress 2024 for mac中文激活版

QuarkXPress 2024 for Mac是一款功能强大、易于使用、高质量输出的专业排版软件。无论您是出版业的专家还是初学者&#xff0c;都可以通过QuarkXPress 2024轻松创建出令人惊叹的出版物。 软件下载&#xff1a;QuarkXPress 2024 for mac中文激活版下载 QuarkXPress 2023 for Mac…