文章目录
  1. 1. 简介H2
  2. 2. 依赖引入
  3. 3. 数据源初始化脚本引入
    1. 3.1. schema.sql
    2. 3.2. data.sql
  4. 4. application.properties中添加H2配置
  5. 5. 启动测试
  6. 6. 小结

最近在忙RocketMQ社区的线下开发者训练营的事情,需要准备一个实战课题的demo。

考虑到现场的环境复杂,比如:网络信号不一定很好,每个学员的机器环境不完全一致。因此我决定尽量减少外部组件的依赖,能用内置的就用内置:

缓存不使用Redis,而是用ConcurrentHashMap;数据库不用MySQL了,改用H2嵌入式数据库。

本文就重点整理一下H2嵌入式数据库的整合过程。

简介H2

首先简单的介绍下H2数据库。

H2是Thomas Mueller提供的一个开源的、纯java实现的关系数据库。

h2数据库特点

(1)性能、小巧

(2)同时支持网络版和嵌入式版本,另外还提供了内存版

(3)有比较好的兼容性,支持相当标准的sql标准

(4)提供了非常友好的基于web的数据库管理界面 –引自百度百科

度娘是这样介绍的,总结一下就是说H2支持标准的SQL,性能不错而且有一个管理界面,重要的,使用H2可以不依赖外部环境。

依赖引入

废话不多说,我们开搞。

首先建立一个SpringBoot应用,版本基于2.1.5.RELEASE, 具体过程按下不表,这个在笔者的历史文章中已经说过多次了。接着引入H2的Maven依赖,具体内容如下:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

ORM还是使用MyBatis,我们引入Mybatis的SpringBoot的starter如下:

<!--mybatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

数据源初始化脚本引入

接着我们将数据库的初始化脚本引入。

在classpath下建立一个目录 db ,也就是resources下。接着在resources中建立两个sql文件,schema.sql与data.sql。

schema.sql为数据库的初始化sql,也就是DML。data.sql中为初始化数据的sql,也就是DML,一般是insert语句。

具体内容如下:

schema.sql

DROP TABLE IF EXISTS t_seckill_product;

CREATE TABLE t_seckill_product (
id int primary key auto_increment,
gmt_create timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
gmt_update timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
prod_id varchar NOT NULL DEFAULT '-1' COMMENT '商品id',
prod_name varchar NOT NULL DEFAULT '-1' COMMENT '商品名称',
prod_status int NOT NULL DEFAULT '0' COMMENT '商品状态,0-上架,1-下架',
prod_stock int NOT NULL DEFAULT '0' COMMENT '商品库存',
prod_price DECIMAL(10, 3) NOT NULL DEFAULT  '0.000' COMMENT '商品售价'
);

这里以一个商品表为例。

data.sql

INSERT INTO t_seckill_product VALUES 
('1', '2019-06-14 13:57:36', '2019-06-14 13:57:54', 'pid_0001', 'iphoneX2019新款', '0', '100', '5999.000');

data.sql中为需要初始化加载的sql,如果没有则保持data.sql为空即可。但data.sql这个空文件需要有,否则会报错。

application.properties中添加H2配置

########################################################################
#
#     H2配置
#
#########################################################################
#db schema
spring.datasource.schema=classpath:db/schema.sql
#db data
spring.datasource.data=classpath:db/data.sql
#remote visit
spring.h2.console.settings.web-allow-others=true
#console url
spring.h2.console.path=/h2
#default true
spring.h2.console.enabled=true
spring.h2.console.settings.trace=true
#db url,default :jdbc:h2:mem:testdbsa
spring.datasource.url=jdbc:h2:mem:testdbsa
#driver default:org.h2.Driver
spring.datasource.driver-class-name=org.h2.Driver
#default sa
spring.datasource.username=sa
#default null
spring.datasource.password=

将H2的配置信息添加到application.properties中,默认用户名为sa,默认密码为空。

除了url、驱动、用户名、密码外,我们关注一下 spring.h2.console.path 这个配置,它表示H2管理界面的相对路径。

启动测试

启动应用,确认控制台输出正常,我的样例的端口是8070,访问 http://localhost:8070/h2 看到如下界面。

login

输入我们之前配置的用户名sa,点击connet,进入管理页面。可以看到,H2为我们提供了一个较为方面的操作UI,这里我以查询商品信息为例执行以下sql。

能够看到,H2为我们返回了友好的查询结果。

query

小结

到此我们就整合完成H2,然后就可以按照之前操作MySQL、Oracle等的方式去操作它了,更多的使用技巧就由聪明你继续探索吧!我们下篇文章再见。

文章目录
  1. 1. 简介H2
  2. 2. 依赖引入
  3. 3. 数据源初始化脚本引入
    1. 3.1. schema.sql
    2. 3.2. data.sql
  4. 4. application.properties中添加H2配置
  5. 5. 启动测试
  6. 6. 小结
Fork me on GitHub