在看一些项目demo时,都会看到使用H2数据库,试了后感觉真的很轻便,很爽,于是尝试一番,写个博客记录一下

1. 介绍

  1. H2数据库是一个开源的关系型数据库。H2是一个嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准,支持集群
  2. 提供JDBC、ODBC访问接口,提供了非常友好的基于web的数据库管理界面

2. 特性

  1. 免费、开源、快速;
  2. 嵌入式的数据库服务器,支持集群,可以随应用启动;
  3. 提供JDBC、ODBC访问接口,提供基于浏览器的控制台管理程序;

3. 连接模式

以嵌入式(本地)连接方式连接H2数据库

  这种连接方式默认情况下只允许有一个客户端连接到H2数据库,有客户端连接到H2数据库之后,此时数据库文件就会被锁定,那么其他客户端就无法再连接了,好处是可以将数据库中的数据持久化到文件中不丢失。
  连接语法:jdbc:h2:[file:][<path>]<databaseName>
  例如:
    jdbc:h2:~/test //连接位于用户目录下的test数据库
    jdbc:h2:file:/data/sample
    jdbc:h2:file:E:/H2/gacl(Windows only)

使用TCP/IP的服务器模式(远程连接)方式连接H2数据库

  这种连接方式就和其他数据库类似了,是基于Service的形式进行连接的,因此允许多个客户端同时连接到H2数据库
  连接语法:jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
  范例:jdbc:h2:tcp://localhost/~/test

内存模式

  H2数据库被称为内存数据库,因为它支持在内存中创建数据库和表,但如果使用H2数据库的内存模式,那么我们创建的数据库和表都只是保存在内存中,一旦服务器重启,那么内存中的数据库和表就不存在了
  连接语法:jdbc:h2:mem:<databaseName>
  范例:jdbc:h2:mem:test

4. SpringBoot集成H2数据库

  1. 添加h2的依赖
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <!--  <version>1.4.197</version> -->
    <scope>runtime</scope>
</dependency>
  1. 配置application.yml
spring:
  datasource:
    driver-class-name: org.h2.Driver
    # 这里每次服务启动就会加载schema和data的数据进行初始化,内容见附录
    schema: classpath:db/schema-h2.sql
    data: classpath:db/data-h2.sql
    # 这里使用的是嵌入式本地文件模式
    url: jdbc:h2:file:D:/Cache/IDEA2019.2.2/WorkSpace/SelfTest/mybatisplus-test/data/mybatis_plus
    username: root
    password: a123456
   # 配置h2的web-console服务
   h2:
    console:
      enabled: true
      path: /h2-console

在这里插入图片描述
在这里插入图片描述

  1. 配置完之后就可以使用了,非常方便,我们可以使用mybatisplus快速测试一下
    在这里插入图片描述
  2. H2的另一个很好的功能就是web console,当服务启动之后就可以直接在浏览器访问数据库了。登录到web界面,然后根据配置文件配置的jdbcurl,username,password填写,连接,就进入到了页面版的控制台。
    在这里插入图片描述
    在这里插入图片描述
  3. 使用内嵌模式的数据库,在项目运行时,通过客户端连接工具时连不上数据库的,会提示already in use,只能通过项目的web console连接。那把web console的路径暴露出去岂不是一件很不安全的事情?其实,web console 只能是服务器本机才能连接,其他机器是没有权限连的,所以大可不必担心这个问题

附录

1.连接语法

在这里插入图片描述

2. sql脚本内容

#schema-h2.sql
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

#data-h2.sql
DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐