项目案例代码: github/h2db

H2 是一个纯 Java 开发的嵌入式数据库,它可以作为内存数据库将数据保存在内存中,也可以持久化保存在硬盘中

H2 最主要的一个特征在于它足够轻,轻到只用一个 jar 包便可以启动

<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <version>1.4.196</version>
</dependency>

以 Mysql 为例,传统的数据库要启动一般包含下面几个步骤

下载安装 Mysql

创建应用、设置源地址、建立连接并编码

而 H2 可以省略安装的操作,并且极大简化建库建表跟编码的工作

咋一看,好像没啥特别的作用,但在下面这几个应用场景中还是用 h2 最为合适

案例型项目:纯粹为了验证某一种技术方案可行性而编写的 demo 项目

各种项目下的测试单元:测试单元如果涉及到数据库的操作,那么这种情况下使用 h2 并将数据临时存储在内存种是最合适不过的

client-server 类型的项目

H2 作为一款嵌入式数据库,同时支持两种运行模式:In-memory DataBae 与 Persisted Database

前者是在系统启动时,将数据库直接创建在内存中,系统每次重启都会清除所有数据库相关信息(案例演示跟测试单元中常用这种模式)

后者则是将数据持久化保存在硬盘中,当然现在并不推荐这种方式(毕竟要持久化保存数据的话,还是 mysql 这些来的靠谱)

假设要创建一个名为 test_base 的数据库,如果我们以 In-memory DataBae 的模式启动,那么按照下述编写代码即可:

String JDBC_DRIVER = "org.h2.Driver";
String url = "jdbc:h2:mem:test_base";
String user = "sa";
String passwd = "";
//注册JDBC驱动类
Class.forName(JDBC_DRIVER);
//建立链接
Connection conn = DriverManager.getConnection(url, user, passwd);

如果要以 Persisted Database 模式启动,将 url 改为: jdbc:h2:./data/db/test_base 即可(更详细的代码请参考 h2db-basic 的代码)

注意这里的"./data/db/"表示操作系统的相对目录,test_base 为数据库名

除了上述直接用原生的写法之外,h2 也可以在 Spring Boot、Mybatis 等框架下运行

h2 在 Spring Boot 下的运行请参考 h2db-spring 的代码

h2 在 Spring Boot 下结合 Mybatis 运行请参考 h2db-spring-ibatis 的代码

h2 结合测试单元的使用案例请参考 h2db-spring-ibatis 的代码

Spring Boot and H2 in memory database - Why, What and How?

Spring Boot and Spring JDBC With H2 - DZone Java Learn how to integrate an H2 database into your Spring Boot Project with Spring Initializr. Also learn how to set up CRUD methods in Java and how to use JDBC. dzone.com - dzone.com baomidou/mybatis-plus An powerful enhanced toolkit of MyBatis for simplify development - baomidou/mybatis-plus GitHub - github.com