点击蓝色“程序猿DD”关注我

回复“资源”获取独家整理的学习资料!

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分支。多多关注我,有问题可以私信。

留言交流不过瘾?添加微信:zyc_enjoy

根据指引加入各种主题讨论群

每日一问

今日问题

(留言说说你的答案吧,明日推文公布答案)

昨日答案

需要4飞机. 假设需要三架飞机,编号为1,2,3. 三架同时起飞, 飞到1/8 圈处, 1号飞机,给2号,3号,飞机各加上1/8 圈的油, 刚好飞回基 地,此时1号,2号满油,继续前飞; 飞到2/8 圈时候,2号飞机给1号飞机加油1/8圈油量,刚好飞回基地, 3号飞机满油,继续向前飞行, 到达6/8处无油; 此时重复2号和三号飞机的送油.3号飞机反方向飞行到1/6圈时, 加油1/6圈给给2号飞机,  2号飞机向前飞行X圈, 则3号飞机可向前继续送油, 1/6 –2X 圈. 此时3号刚好飞回, 2号 满油.当X= 1/6-2X时候获得最大. X =1/18. 1/6 + 1/18= 2/ 9.   少于1/4. 所以不能完成. 类比推,当为4架时, 恰好满足条件.

(昨日问题可在昨日推文的文末查看)

推荐阅读

  • 开发部署提速8倍!这款IDE插件了解一下?

  • 攻破MySQL性能瓶颈必知的调优技巧

  • 如何模拟将CPU、IO打满?

  • Spring Cloud Alibaba 发布第一个正式版本,顺利完成孵化!

  • 用命令行在控制台里玩斗地主,试过没?

来星球聊聊技术人的斜杠生活

点一点“阅读原文”小惊喜在等你

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

  1. Java嵌入式数据库H2学习总结(一)——H2数据库入门

    一.H2数据库介绍 常用的开源数据库有:H2,Derby,HSQLDB,MySQL,PostgreSQL.其中H2和HSQLDB类似,十分适合作为嵌入式数据库使用,而其它的数据库大部分都需要安装独立的 ...

  2. springboot嵌入式数据库H2初探

    H2 H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一 个十分方便的web控制台用于操作和管理数据库内容.H2还提供兼容模式,可以兼容一些主 流的数据库,具有比 ...

  3. java h2 数据库连接_Java开发的嵌入式数据库H2使用教程

    H2是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中. H2最大的用途在于可以同应用程序打包在一起发布,这样可以非常方便地存储少量结构化数据. 它的另一个用途是用于单元 ...

  4. Java嵌入式数据库H2学习总结(二)——在Web应用程序中使用H2数据库

    一.搭建测试环境和项目 1.1.搭建JavaWeb测试项目 创建一个[H2DBTest]JavaWeb项目,找到H2数据库的jar文件,如下图所示: H2数据库就一个jar文件,这个Jar文件里面包含 ...

  5. Java嵌入式数据库H2学习总结(三)——在Web应用中嵌入H2数据库

    H2作为一个嵌入型的数据库,它最大的好处就是可以嵌入到我们的Web应用中,和我们的Web应用绑定在一起,成为我们Web应用的一部分.下面来演示一下如何将H2数据库嵌入到我们的Web应用中. 一.搭建测 ...

  6. 关于java嵌入式数据库的选择,强烈建议H2 嵌入式数据库

    2019独角兽企业重金招聘Python工程师标准>>> 不听红薯言,吃亏在眼前. 先发表个人意见,Derby是垃圾,H2王道. 这段时间开发movingLife合租记账软件过程中,开 ...

  7. 嵌入式 db2 java_关于java嵌入式数据库的选择,强烈建议H2 嵌入式数据库

    不听红薯言,吃亏在眼前. 先发表个人意见,Derby是垃圾,H2王道. 这段时间开发movingLife合租记账软件过程中,开始是在MYSQL上做开发,要发布的时候,一直想找个好点的嵌入式数据库.最初 ...

  8. java嵌入式数据库之hsqldb、derby、h2

    比较三款嵌入式数据库   Hsqldb Derby H2 纯java 支持 支持 支持 内存模式 支持 不支持 支持 事务隔离 不支持 支持 支持 基于代价的优化方式 不支持 支持 支持 数据库加密 ...

  9. Java 生态圈中的嵌入式数据库,哪家强?

    每天早上七点三十,准时推送干货 嵌入式数据库一个很陌生的词汇,以前只是听说,但是没有真正使用过,今天阿粉和大家一起来揭开它的面纱. 一.介绍 初次接触嵌入式数据库(Embedded Database) ...

最新文章

  1. linux LANG变量 定义系统的主语系环境
  2. 判断数据是否服从某一分布(二)——简单易用fitdistrplus包
  3. DNS抓包分析--wireshark
  4. 静态方法里面不能调用非静态属性
  5. Linux API函数总结
  6. Python中的numpy.sum()
  7. C++ (void)_r;什么意思
  8. Spring AOP原理之动态代理
  9. 网站或APP小程序调用短信验证码接口的流程
  10. Laravel文档梳理9、Blade模板
  11. 支付宝技术期末考:专业技术蓝军首次对外公开
  12. linux 命令行语法错误,sudo命令:解决使用Linux命令行时出现的错误提示
  13. Linux、UNIX设置开机自动运行命令、脚本配置
  14. COSO企业风险管理综合框架主要关注8大层面的企业风险
  15. Spring-Mybatis整合 第一个Spring-Mybatis程序
  16. OC和swift混合工程更新库时报:target has transitive dependencies that include statically linked binaries
  17. HDOJ 1495 倒可乐(BFS)
  18. 隐藏微信小程序左上角的返回或home按钮 wx.hideHomeButton
  19. 百度离职总结:如何做个好员工?
  20. 读书笔记 |余华 | 文城

热门文章

  1. golang 逐行 读文件
  2. linux shell 逻辑判断 [] [[]] -n -z 用法区别
  3. linux shell 查找某字符串 在文件的行数
  4. windows平台下 c++获取 系统版本 网卡 内存 CPU 硬盘 显卡信息
  5. Windows热键注册(反汇编方法 查看win32api 原理)
  6. JAVA编译显示存在不安全_java – 编译时出现“未经检查或不安全的操作”错误...
  7. qt 分辨率问题 安卓_Windows下基于Qt开发Android应用
  8. 计算机高二期末考试试题,高二年级计算机专业期末试题
  9. 线刷一加5t android 9,一加5/5T 氢OS 9.0稳定四版 侧边工具 通知特效 Magisk 极速流畅 简约实用-刷机之家...
  10. vuecli3 引入全局scss变量_vue-vue-cli3 sass全局变量配置