h2dabase基于内存的数据库,更常见于嵌入式数据库的使用场景,依赖小,功能齐全;一般来讲,正常的商业项目用到它的场景不多,但是在一些特殊的case中,还是比较有用的,比如用于单元测试,业务缓存,一些简单的示例demo等;本文将手把手教你创建一个继承h2dabase的项目,并支持从sql中导入预定好的schema和data
I. 项目创建
本文对应的示例demo,采用SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA进行开发
1. pom配置
关于如何创建一个springboot项目本文就不介绍了,在我们创建好的项目中,pom.xml文件如下
1 | <parent> |
重点关注一下dependency中的com.h2database,另外两个非必须,只是在后面的测试用例中会用到,推荐加上
从上面的引入也可以知道,我们将借助JPA来操作数据库
2. 属性配置
既然是连接数据库,当然少不了数据库的相关配置,在项目的资源路径下,新建配置文件application.properties
1 | # 数据库的相关配置 |
上面的配置方式,和我们的mysql数据库配置没有什么特别的,这里的url请注意一下
jdbc:h2:~/h2-db: 嵌入式使用姿势,会在用户根目录下生成一个名为h2-db.mv.db的文件(数据库的schema 和d column就存在里面)jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1: 内存模式,应用重启之后数据库会清空,所以在测试用例中,可以考虑用这种
除了上面嵌入式的使用姿势之外,h2-dabase还支持通过tcp方式,指定一个远程的目录
jdbc:h2:tcp://localhost/~/test
上面是h2dabase的基本配置,为了更友好的展示,我们开启了h2dabase的web console控制台
1 | ##h2 web console设置 |
最好开启一下jpa的sql语句
1 | spring.jpa.show-sql=true |
II. 实例测试
上面配置搞完之后,基本上就可以说是完成了h2dabase的集成了
0. 入口
1 |
|
SpringBoot应用的启动入口,上面执行之后,我们就可以通过http://localhost:8080/h2访问h2dabase的控制台,注意下面框处的内容,与前面的配置文件保持一致

登录之后,就是一个建议的数据库操作控制台了
1. Entity定义
下面这个属于JPA的知识点,对于jpa有兴趣的小伙伴,可以看一下前面的《JPA系列教程》
1 |
|
2. Repository接口
数据库操作接口,直接使用默认的curd即可,并没有额外的添加方法
1 |
|
3. 测试case
接下来给几个CURD的测试case,来演示一下我们的集成效果
1 |
|
实测case如下
1 | # 新增一条记录 |

4. sql文件导入
注意我们前面的所有步骤,没有任何一个地方有说明需要主动去创建一个名为test的表,这一点和我们熟悉的mysql是不一样的;
某些时候我们可能希望将准备好的sql文件来初始化数据库,这个时候可以如下操作
对应的sql文件
表结构 schema-h2.sql
1 | DROP TABLE IF EXISTS book_to_book_store; |
数据文件 data-h2.sql
1 | INSERT INTO author VALUES (next value for s_author_id, 'George', 'Orwell', '1903-06-25', 1903, null); |
上面两个文件准备好,接下来我们如何导入呢?
借助sql-maven-plugin方式,在pom配置文件中,添加下面这段
1 | <plugins> |
然后如下操作即可

导入成功之后,再到h2控制台,就可以查看对应的数据

II. 其他
0. 项目
- 工程:https://github.com/liuyueyi/spring-boot-demo
- 项目源码: https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/100-h2database
1. 一灰灰Blog
尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
下面一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
- 一灰灰Blog个人博客 https://blog.hhui.top
- 一灰灰Blog-Spring专题博客 http://spring.hhui.top
