伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

轻量级嵌入式数据库H2的愉快玩耍之旅

来源:本站原创 浏览:133次 时间:2021-08-13

1.前言

 前面讲一些Mybatis特性的时候总是要写一些例子演示给粉丝。用Mysql或者其他很大的数据库太重了,因为只是个demo而已。当然也可以使用docker来安装。但是还是需要依赖一些东西。有没有非常小巧而且便于携带的数据库,而且能满足很小场景的数据库。当然有。今天介绍一种纯java编写而且支持jdbc的嵌入式关系型数据库H2。有些粉丝对这个感兴趣希望能介绍一下,所以写了这篇文章。


2.H2数据库特点

  • 非常快,开源,支持JDBC API

  • 嵌入式和服务器模式;

    内存数据库

  • 基于浏览器的控制台应用程序

  • 占用空间小,jar只有2MB大小

以上只是官网列出的特点。其实还有跨平台的优势,支持目前常见的大部分平台。还兼容常见的主流关系型数据库,比如DB2、Oracle、MS SQL Server、Mysql、PostgreSQL、HSQLDB、Ignite、Derby等。


3.使用场景

基于以上的特点。H2数据库特别适用于快速构建的小型应用。数据量小的元数据管理,不需要大型数据库支撑的业务场景都可以用。尤其在应用开发中和单元测试中使用非常方便,而且节省系统资源。而且springboot的依赖池也收录了H2数据库。接下来我们通过springboot结合Mybatis来对H2数据库进行一些特性的讲解演示。

4.springboot中使用H2

springboot使用H2数据库非常简单。集成BOM下的H2依赖就可以了。这里为了演示我们还引入了Mybatis。


当然引入依赖还不够我们还需要对其他参数进行配置。当然这些配置可以通过springboot的 application.yml配置来完成。我们知道H2支持像tomcat一样内嵌到springboot应用中,也支持独立的server进程模式。通过不同的配置我们来演示一下。


5.内嵌模式

内嵌模式,就是把在应用中引入H2,启动应用的同时,会把H2数据服务也启动,应用中既包含了H2数据库的服务端,同时应用又作为客户端来连接H2数据库。


5.1 内存模式连接

内存模式就是数据库文件存在于内存中,没有持久化,当应用进程关闭时数据库与数据表会消失。为了独立环境,我们利用springboot的profile特性来隔离不同模式的环境配置。我们定制一个名称为application-inner.yml来测试内嵌模式。配置如下:





springboot项目 通过指定 --spring.profiles.active=inner启动后,输入http://localhost:8080/h2-console,进入H2数据的控制台:


����,����

一定要注意红框按照你配置文件中的spring.datasource.url来设置,不要用默认值。如果没有设置密码直接点connect,设置密码了输入。进入下列界面:



因为我们在初始化指定了DDL 、 DML SQL脚本,创建了student表,而且插入了3条数据。所以会呈现出来。证明集成成功。同时我们执行maven 工程的测试包也会成功完成Mybatis 单元测试。但是我们关闭应用后数据会丢失因为这些数据存在于内存中。内存是会被回收的。不信你注释掉 spring.datasource.schema、spring.datasource.data 重启看看。那么如何持久化呢?这就用到H2嵌入模式了。


5.2 嵌入模式连接

嵌入模式就是数据库文件存在于应用当前的硬盘内,进行了持久化,当应用进程关闭时数据库与数据表不会消失。我们只需要将5.1的yml配置中的 spring.datasource.url 改为jdbc:h2:file:E:/H2/mybatis 。然后启动重新登录console。注意url要改为jdbc:h2:file:E:/H2/mybatis哦。发现数据都在,然后我们关闭再启动发现报错了:


说明数据库中的数据冲突了。我们注释掉DDL、DML初始化发现又能启动了。证明数据持久化了。url 中 file: 后缀你系统的可用路径,H2就能把数据持久化到该路径下。


6.独立进程运行


H2数据库也可以作为独立进程进行启动。下载h2解压后进入到h2/bin/目录下会有数据库驱动包,名叫h2-version.jar,version 为版本号。如果你不需要看源代码,就这一个文件就够用了,启动数据库及连接数据库所用的资源都在里面了。为了方便,我们将它改名为h2.jar。然后执行以下命令就可以运行了:

java -cp h2.jar  org.h2.tools.Server

你也可以通过上述命令 后加参数 -? 来获取相关的操作命令:



jdbc链接为格式为:

jdbc:h2:tcp://{host::localhost}[:{port::9092}]/{database::default}[;<;,user={user:param},password={password:param},{:identifier}={:param}>]

但是这种方式就感觉不到便利性了,所以不多介绍,有兴趣可以去看官方文档。


7.兼容性

开始我们提到H2可以兼容很多数据库。如何兼容呢?通过url后缀MODE参数来设置,这里我们假如url为 jdbc:h2:~/test,总结一下自己使用:


  • Oracle

    jdbc:h2:~/test;MODE=Oracle或SQL语句SET MODE Oracle

  • Mysql

    jdbc:h2:~/test;MODE=MySQL;DATABASE_TO_LOWER=TRUE

  • PostgreSQL jdbc:h2:~/test;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE

  • MSSQLServer

    jdbc:h2:~/test;MODE=MSSQLServer或SQL语句SET MODE MSSQLServer


其他不一一列举,但是注意兼容也不是完全兼容,会有一些注意事项和微小的差别。一般不会出现问题。进一步了解可查阅官方文档和其他资料。


8.总结

今天介绍了H2这种小巧而灵活方便的数据库。介绍了H2的一些特性并和springboot、mybatis这些框架结合起来进行开发和单元测试。后面还介绍了它的兼容性配置。目的就是为了方便大家在数据库相关的java开发中快速的进行搭建开发或者测试环境。希望以上的介绍能帮助到你。样例已经托管到码云:https://gitee.com/felord/mybatis-test.git 切换到h2分支。多多关注我,有问题可以私信。



  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net