H2-内存数据库

一、H2数据库

1、简介

H2 数据库是一个用 Java 开发的嵌入式(内存级别)数据库,它本身只是一个类库,也就是只有一个 jar 文件,可以直接嵌入到项目中。

H2数据库又被称为内存数据库,因为它支持在内存中创建数据库和表。所以如果我们使用H2数据库的内存模式,那么我们创建的数据库和表都只是保存在内存中,一旦服务器重启,那么内存中的数据库和表就不存在了。

2、H2的用途

  • 最常使用的用途就在于可以同应用程序一起打包发布,可以非常方便地存储少量的结构化数据;
  • 可以用于单元测试。启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态;
  • 可以作为缓存,即当做内存数据库,作为NoSQL的一个补充。当某些场景下数据模型必须为关系型,可以拿它充当Memcached使用,作为后端MySQL/Oracle的一个缓冲层,缓存一些不经常变化但需要频繁访问的数据,比如字典表、权限表。

3、H2的3种运行模式

3.1、内嵌模式(Embedded Mode)

使用 JDBC 的本地连接。在内嵌模式下,应用程序和数据库在同一个JVM中,通过JDBC进行连接。可以实现持久化,但同时只能有一个客户端连接。内嵌模式性能会比较好。

这是最快也是最容易的连接方式。缺点是数据库可能只在任何时候在一个虚拟机(和类加载器)中打开。与所有模式一样,支持持久性和内存数据库。对并发打开数据库的数量或打开连接的数量没有限制。

3.2、服务器模式(Server Mode)

使用 JDBC 或 ODBC 在 TCP/IP 上的远程连接。

使用服务器模式和内嵌模式一样,只不过它可以跑在另一个进程里。

服务器模式比嵌入式模式慢,因为所有数据都通过TCP/IP传输。与所有模式一样,支持持久性和内存数据库。对每个服务器并发打开的数据库数量或打开连接的数量没有限制。

3.3、混合模式

混合模式是内嵌模式和服务器模式的组合。第一个应用通过内嵌模式与数据库建立连接,同时也作为一个服务器启动,于是另外的应用(运行在不同的进程或是虚拟机上)可以同时访问同样的数据。第一个应用程序的本地连接与嵌入式模式的连接性能一样的快,而其它连接理论上会略慢。

服务器可以从应用程序内(使用服务器API)启动或停止,或自动(自动混合模式)。当使用自动混合模式时,所有想要连接到数据库的客户端(无论是本地连接还是远程连接)都可以使用完全相同的数据库URL来实现。

4、H2的2种连接方式

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

这种连接方式默认情况下只允许有一个客户端连接到H2数据库。当有客户端连接到H2数据库之后,此时数据库文件就会被锁定,那么其他客户端就无法再连接了。

连接语法:

jdbc:h2:[file:][<path>]<databaseName>
例如:
//连接位于用户目录下的test数据库
jdbc:h2:~/test
jdbc:h2:file:/data/sample
jdbc:h2:file:E:/H2/gacl(Windows only)

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

这种连接方式和其他数据库连接方式类似,是基于Service的形式进行连接的,因此允许多个客户端同时连接到H2数据库。

连接语法:

jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
范例:
jdbc:h2:tcp://localhost/~/test

二、安装搭建H2数据库平台

H2虽然是一个内存数据库,但要想使用它,我们也得先进行安装配置一下。尤其是H2的Web控制台,可以帮助我们查看保存到内存中的数据信息,所以接下来我就先带各位安装配置一下这个Web控制台。

1、H2 数据库下载地址

下载地址1
下载地址2

2、windows下启动软件

我们可以进入到h2的目录下,点击h2.bat或者h2w.bat或者h2.jar,运行软件。

3、创建数据库

我们可以在windows窗口右下角黄色小图标处,右键点击H2控制台的图标,选择”Create a new database…“,创建一个新的数据库。然后进入到控制台设置界面,设置数据库的存放路径和数据库名(如demo),访问的用户名和密码,点击Create,则创建出test数据库(如下图)。
在这里插入图片描述

4、数据库文件

test.mv.db为信息文件,在用户目录下是个文本文件,可以用记事本打开
test.trace.db为错误信息文件,是个文本文件,可以用记事本打开,它在控制台连接后产生。
在这里插入图片描述

5、数据库管理界面

点击测试或连接(Connect),则进入数据库管理界面(如下图)。
在这里插入图片描述

6、数据库配置

可以点击【Preferences】按钮,进入到H2的配置界面,这里可以设置端口号等信息:
点击【Save】,会在当前用户目录下创建数据库配置文件 .h2.server.properties (windows即用户目录,Linux即home目录)。
点击【Translate】,会在h2/bin 目录下,创建一个 translation.properties 文件。
点击【Shutdown】,关闭h2控制台,停止h2数据库服务(屏幕右下角黄色小图标没了)。
如果没有手动配置 .h2.server.properties 文件,以 web-server 方式首次启动 H2 后,既用鼠标左键点击屏幕右下角H2控制台黄色小图标,就会出现web控制台界面,点击【Save】 按钮后就会在当前用户目录下自动创建该文件,或者每次连接【Connect】后,都会在当前用户目录下自动创建该文件。

H2 Server Properties

#Fri May 06 18:41:20 CST 2022
webSSL=false
webAllowOthers=false
webPort=8082
10=Generic DB2|com.ibm.db2.jcc.DB2Driver|jdbc\:db2\://localhost/test|
11=Generic Oracle|oracle.jdbc.driver.OracleDriver|jdbc\:oracle\:thin\:@localhost\:1521\:XE|sa
12=Generic MS SQL Server 2000|com.microsoft.jdbc.sqlserver.SQLServerDriver|jdbc\:microsoft\:sqlserver\://localhost\:1433;DatabaseName\=sqlexpress|sa
13=Generic MS SQL Server 2005|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc\:sqlserver\://localhost;DatabaseName\=test|sa
14=Generic PostgreSQL|org.postgresql.Driver|jdbc\:postgresql\:test|
15=Generic MySQL|com.mysql.cj.jdbc.Driver|jdbc\:mysql\://localhost\:3306/test|
16=Generic MariaDB|org.mariadb.jdbc.Driver|jdbc\:mariadb\://localhost\:3306/test|
17=Generic HSQLDB|org.hsqldb.jdbcDriver|jdbc\:hsqldb\:test;hsqldb.default_table_type\=cached|sa
18=Generic Derby (Server)|org.apache.derby.client.ClientAutoloadedDriver|jdbc\:derby\://localhost\:1527/test;create\=true|sa
19=Generic Derby (Embedded)|org.apache.derby.iapi.jdbc.AutoloadedDriver|jdbc\:derby\:test;create\=true|sa
0=Generic JNDI Data Source|javax.naming.InitialContext|java\:comp/env/jdbc/Test|sa
1=Generic Teradata|com.teradata.jdbc.TeraDriver|jdbc\:teradata\://whomooz/|
2=Generic Snowflake|com.snowflake.client.jdbc.SnowflakeDriver|jdbc\:snowflake\://accountName.snowflakecomputing.com|
3=Generic Redshift|com.amazon.redshift.jdbc42.Driver|jdbc\:redshift\://endpoint\:5439/database|
4=Generic Impala|org.cloudera.impala.jdbc41.Driver|jdbc\:impala\://clustername\:21050/default|
5=Generic Hive 2|org.apache.hive.jdbc.HiveDriver|jdbc\:hive2\://clustername\:10000/default|
6=Generic Hive|org.apache.hadoop.hive.jdbc.HiveDriver|jdbc\:hive\://clustername\:10000/default|
7=Generic Azure SQL|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc\:sqlserver\://http://name.database.windows.net\:1433|
8=Generic Firebird Server|org.firebirdsql.jdbc.FBDriver|jdbc\:firebirdsql\:localhost\:c\:/temp/firebird/test|sysdba
9=Generic SQLite|org.sqlite.JDBC|jdbc\:sqlite\:test|sa
20=Generic H2 (Server)|org.h2.Driver|jdbc\:h2\:tcp\://localhost/~/test|sa
21=Generic H2 (Embedded)|org.h2.Driver|jdbc\:h2\:~/test|sa

7、数据库工具

点击【Tools】,可以对H2数据库进行备份、还原、恢复、集群、运行脚本、删除文件等操作。

三、SpringBoot集成H2数据库

1、添加pom依赖

        <!--H2内存数据库-->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- 简化JPA进行数据持久化的开发 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

2、修改application.properties

spring.jpa.database=h2
spring.jpa.show-sql=true
# ddl执行方式,update create 等
spring.jpa.hibernate.ddl-auto=update

spring.datasource.platform=h2 #表明使用的数据库平台是h2(已过期)
spring.datasource.url=jdbc:h2:./data/test;AUTO_SERVER=TRUE
# spring.datasource.url=jdbc:h2:file:d:/data/test;AUTO_RECONNECT=TRUE(持久化配置)
spring.datasource.username=sa
spring.datasource.password=123456
spring.datasource.driverClassName=org.h2.Driver

# 进行该配置后,h2 web consloe就可以在远程访问了。否则只能在本机访问。
spring.h2.console.settings.web-allow-others=true

# 进行该配置,你就可以通过YOUR_URL/h2访问h2 web consloe。YOUR_URL是你程序的访问URl。
spring.h2.console.path=/h2-consloe

# 进行该配置,程序开启时就会启动h2 web consloe。当然这是默认的,如果你不想在启动程序时启动h2 web consloe,那么就设置为false。
spring.h2.console.enabled=true

3、实体关联表

给User添加@Entity注解,和@Table注解

@Entity
@Table(name = "tb_user")
public class H2User {
    @Id
    private int userId;
    private String userName;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

}

4、Dao继承JpaRepository

@Repository
public interface H2UserRepository extends JpaRepository<H2User, Integer> {
}

参考资料

H2内存数据库使用教程详解
SpringBoot入门 - 添加内存数据库H2

  • 23
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值