轻量级嵌入式数据库H2的愉快玩耍之旅
点击蓝色“程序猿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的愉快玩耍之旅相关推荐
- Java嵌入式数据库H2学习总结(一)——H2数据库入门
一.H2数据库介绍 常用的开源数据库有:H2,Derby,HSQLDB,MySQL,PostgreSQL.其中H2和HSQLDB类似,十分适合作为嵌入式数据库使用,而其它的数据库大部分都需要安装独立的 ...
- springboot嵌入式数据库H2初探
H2 H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一 个十分方便的web控制台用于操作和管理数据库内容.H2还提供兼容模式,可以兼容一些主 流的数据库,具有比 ...
- java h2 数据库连接_Java开发的嵌入式数据库H2使用教程
H2是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中. H2最大的用途在于可以同应用程序打包在一起发布,这样可以非常方便地存储少量结构化数据. 它的另一个用途是用于单元 ...
- Java嵌入式数据库H2学习总结(二)——在Web应用程序中使用H2数据库
一.搭建测试环境和项目 1.1.搭建JavaWeb测试项目 创建一个[H2DBTest]JavaWeb项目,找到H2数据库的jar文件,如下图所示: H2数据库就一个jar文件,这个Jar文件里面包含 ...
- Java嵌入式数据库H2学习总结(三)——在Web应用中嵌入H2数据库
H2作为一个嵌入型的数据库,它最大的好处就是可以嵌入到我们的Web应用中,和我们的Web应用绑定在一起,成为我们Web应用的一部分.下面来演示一下如何将H2数据库嵌入到我们的Web应用中. 一.搭建测 ...
- 关于java嵌入式数据库的选择,强烈建议H2 嵌入式数据库
2019独角兽企业重金招聘Python工程师标准>>> 不听红薯言,吃亏在眼前. 先发表个人意见,Derby是垃圾,H2王道. 这段时间开发movingLife合租记账软件过程中,开 ...
- 嵌入式 db2 java_关于java嵌入式数据库的选择,强烈建议H2 嵌入式数据库
不听红薯言,吃亏在眼前. 先发表个人意见,Derby是垃圾,H2王道. 这段时间开发movingLife合租记账软件过程中,开始是在MYSQL上做开发,要发布的时候,一直想找个好点的嵌入式数据库.最初 ...
- java嵌入式数据库之hsqldb、derby、h2
比较三款嵌入式数据库 Hsqldb Derby H2 纯java 支持 支持 支持 内存模式 支持 不支持 支持 事务隔离 不支持 支持 支持 基于代价的优化方式 不支持 支持 支持 数据库加密 ...
- Java 生态圈中的嵌入式数据库,哪家强?
每天早上七点三十,准时推送干货 嵌入式数据库一个很陌生的词汇,以前只是听说,但是没有真正使用过,今天阿粉和大家一起来揭开它的面纱. 一.介绍 初次接触嵌入式数据库(Embedded Database) ...
最新文章
- linux LANG变量 定义系统的主语系环境
- 判断数据是否服从某一分布(二)——简单易用fitdistrplus包
- DNS抓包分析--wireshark
- 静态方法里面不能调用非静态属性
- Linux API函数总结
- Python中的numpy.sum()
- C++ (void)_r;什么意思
- Spring AOP原理之动态代理
- 网站或APP小程序调用短信验证码接口的流程
- Laravel文档梳理9、Blade模板
- 支付宝技术期末考:专业技术蓝军首次对外公开
- linux 命令行语法错误,sudo命令:解决使用Linux命令行时出现的错误提示
- Linux、UNIX设置开机自动运行命令、脚本配置
- COSO企业风险管理综合框架主要关注8大层面的企业风险
- Spring-Mybatis整合 第一个Spring-Mybatis程序
- OC和swift混合工程更新库时报:target has transitive dependencies that include statically linked binaries
- HDOJ 1495 倒可乐(BFS)
- 隐藏微信小程序左上角的返回或home按钮 wx.hideHomeButton
- 百度离职总结:如何做个好员工?
- 读书笔记 |余华 | 文城
热门文章
- golang 逐行 读文件
- linux shell 逻辑判断 [] [[]] -n -z 用法区别
- linux shell 查找某字符串 在文件的行数
- windows平台下 c++获取 系统版本 网卡 内存 CPU 硬盘 显卡信息
- Windows热键注册(反汇编方法 查看win32api 原理)
- JAVA编译显示存在不安全_java – 编译时出现“未经检查或不安全的操作”错误...
- qt 分辨率问题 安卓_Windows下基于Qt开发Android应用
- 计算机高二期末考试试题,高二年级计算机专业期末试题
- 线刷一加5t android 9,一加5/5T 氢OS 9.0稳定四版 侧边工具 通知特效 Magisk 极速流畅 简约实用-刷机之家...
- vuecli3 引入全局scss变量_vue-vue-cli3 sass全局变量配置