輕量級(jí)嵌入式數(shù)據(jù)庫(kù)H2的愉快玩耍之旅

      網(wǎng)友投稿 1043 2022-05-29

      1.前言

      前面講一些Mybatis特性的時(shí)候總是要寫一些例子演示給粉絲。用Mysql或者其他很大的數(shù)據(jù)庫(kù)太重了,因?yàn)橹皇莻€(gè)demo而已。當(dāng)然也可以使用docker來(lái)安裝。但是還是需要依賴一些東西。有沒(méi)有非常小巧而且便于攜帶的數(shù)據(jù)庫(kù),而且能滿足很小場(chǎng)景的數(shù)據(jù)庫(kù)。當(dāng)然有。今天介紹一種純java編寫而且支持jdbc的嵌入式關(guān)系型數(shù)據(jù)庫(kù)H2。有些粉絲對(duì)這個(gè)感興趣希望能介紹一下,所以寫了這篇文章。

      2.H2數(shù)據(jù)庫(kù)特點(diǎn)

      非常快,開源,支持JDBC API

      嵌入式和服務(wù)器模式;

      內(nèi)存數(shù)據(jù)庫(kù)

      基于瀏覽器的控制臺(tái)應(yīng)用程序

      占用空間小,jar只有2MB大小

      以上只是官網(wǎng)列出的特點(diǎn)。其實(shí)還有跨平臺(tái)的優(yōu)勢(shì),支持目前常見(jiàn)的大部分平臺(tái)。還兼容常見(jiàn)的主流關(guān)系型數(shù)據(jù)庫(kù),比如DB2、Oracle、MS SQL Server、Mysql、PostgreSQL、HSQLDB、Ignite、Derby等。

      3.使用場(chǎng)景

      基于以上的特點(diǎn)。H2數(shù)據(jù)庫(kù)特別適用于快速構(gòu)建的小型應(yīng)用。數(shù)據(jù)量小的元數(shù)據(jù)管理,不需要大型數(shù)據(jù)庫(kù)支撐的業(yè)務(wù)場(chǎng)景都可以用。尤其在應(yīng)用開發(fā)中和單元測(cè)試中使用非常方便,而且節(jié)省系統(tǒng)資源。而且springboot的依賴池也收錄了H2數(shù)據(jù)庫(kù)。接下來(lái)我們通過(guò)springboot結(jié)合Mybatis來(lái)對(duì)H2數(shù)據(jù)庫(kù)進(jìn)行一些特性的講解演示。

      4.springboot中使用H2

      springboot使用H2數(shù)據(jù)庫(kù)非常簡(jiǎn)單。集成BOM下的H2依賴就可以了。這里為了演示我們還引入了Mybatis。

      當(dāng)然引入依賴還不夠我們還需要對(duì)其他參數(shù)進(jìn)行配置。當(dāng)然這些配置可以通過(guò)springboot的 application.yml配置來(lái)完成。我們知道H2支持像tomcat一樣內(nèi)嵌到springboot應(yīng)用中,也支持獨(dú)立的server進(jìn)程模式。通過(guò)不同的配置我們來(lái)演示一下。

      5.內(nèi)嵌模式

      內(nèi)嵌模式,就是把在應(yīng)用中引入H2,啟動(dòng)應(yīng)用的同時(shí),會(huì)把H2數(shù)據(jù)服務(wù)也啟動(dòng),應(yīng)用中既包含了H2數(shù)據(jù)庫(kù)的服務(wù)端,同時(shí)應(yīng)用又作為客戶端來(lái)連接H2數(shù)據(jù)庫(kù)。

      5.1 內(nèi)存模式連接

      內(nèi)存模式就是數(shù)據(jù)庫(kù)文件存在于內(nèi)存中,沒(méi)有持久化,當(dāng)應(yīng)用進(jìn)程關(guān)閉時(shí)數(shù)據(jù)庫(kù)與數(shù)據(jù)表會(huì)消失。為了獨(dú)立環(huán)境,我們利用springboot的profile特性來(lái)隔離不同模式的環(huán)境配置。我們定制一個(gè)名稱為application-inner.yml來(lái)測(cè)試內(nèi)嵌模式。配置如下:

      springboot項(xiàng)目 通過(guò)指定 --spring.profiles.active=inner啟動(dòng)后,輸入http://localhost:8080/h2-console,進(jìn)入H2數(shù)據(jù)的控制臺(tái):

      一定要注意紅框按照你配置文件中的spring.datasource.url來(lái)設(shè)置,不要用默認(rèn)值。如果沒(méi)有設(shè)置密碼直接點(diǎn)connect,設(shè)置密碼了輸入。進(jìn)入下列界面:

      因?yàn)槲覀冊(cè)诔跏蓟付薉DL 、 DML SQL腳本,創(chuàng)建了student表,而且插入了3條數(shù)據(jù)。所以會(huì)呈現(xiàn)出來(lái)。證明集成成功。同時(shí)我們執(zhí)行maven 工程的測(cè)試包也會(huì)成功完成Mybatis 單元測(cè)試。但是我們關(guān)閉應(yīng)用后數(shù)據(jù)會(huì)丟失因?yàn)檫@些數(shù)據(jù)存在于內(nèi)存中。內(nèi)存是會(huì)被回收的。不信你注釋掉 spring.datasource.schema、spring.datasource.data重啟看看。那么如何持久化呢?這就用到H2嵌入模式了。

      5.2 嵌入模式連接

      嵌入模式就是數(shù)據(jù)庫(kù)文件存在于應(yīng)用當(dāng)前的硬盤內(nèi),進(jìn)行了持久化,當(dāng)應(yīng)用進(jìn)程關(guān)閉時(shí)數(shù)據(jù)庫(kù)與數(shù)據(jù)表不會(huì)消失。我們只需要將5.1的yml配置中的 spring.datasource.url 改為jdbc:h2:file:E:/H2/mybatis 。然后啟動(dòng)重新登錄console。注意url要改為jdbc:h2:file:E:/H2/mybatis哦。發(fā)現(xiàn)數(shù)據(jù)都在,然后我們關(guān)閉再啟動(dòng)發(fā)現(xiàn)報(bào)錯(cuò)了:

      說(shuō)明數(shù)據(jù)庫(kù)中的數(shù)據(jù)沖突了。我們注釋掉DDL、DML初始化發(fā)現(xiàn)又能啟動(dòng)了。證明數(shù)據(jù)持久化了。url 中 file: 后綴你系統(tǒng)的可用路徑,H2就能把數(shù)據(jù)持久化到該路徑下。

      6.獨(dú)立進(jìn)程運(yùn)行

      H2數(shù)據(jù)庫(kù)也可以作為獨(dú)立進(jìn)程進(jìn)行啟動(dòng)。下載h2解壓后進(jìn)入到h2/bin/目錄下會(huì)有數(shù)據(jù)庫(kù)驅(qū)動(dòng)包,名叫h2-version.jar,version 為版本號(hào)。如果你不需要看源代碼,就這一個(gè)文件就夠用了,啟動(dòng)數(shù)據(jù)庫(kù)及連接數(shù)據(jù)庫(kù)所用的資源都在里面了。為了方便,我們將它改名為h2.jar。然后執(zhí)行以下命令就可以運(yùn)行了:

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

      你也可以通過(guò)上述命令 后加參數(shù) -? 來(lái)獲取相關(guān)的操作命令:

      輕量級(jí)嵌入式數(shù)據(jù)庫(kù)H2的愉快玩耍之旅

      jdbc鏈接為格式為:

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

      但是這種方式就感覺(jué)不到便利性了,所以不多介紹,有興趣可以去看官方文檔。

      7.兼容性

      開始我們提到H2可以兼容很多數(shù)據(jù)庫(kù)。如何兼容呢?通過(guò)url后綴MODE參數(shù)來(lái)設(shè)置,這里我們假如url為 jdbc:h2:~/test,總結(jié)一下自己使用:

      Oracle jdbc:h2:~/test;MODE=Oracle或SQL語(yǔ)句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語(yǔ)句SET MODE MSSQLServer

      其他不一一列舉,但是注意兼容也不是完全兼容,會(huì)有一些注意事項(xiàng)和微小的差別。一般不會(huì)出現(xiàn)問(wèn)題。進(jìn)一步了解可查閱官方文檔和其他資料。

      8.總結(jié)

      今天介紹了H2這種小巧而靈活方便的數(shù)據(jù)庫(kù)。介紹了H2的一些特性并和springboot、mybatis這些框架結(jié)合起來(lái)進(jìn)行開發(fā)和單元測(cè)試。后面還介紹了它的兼容性配置。目的就是為了方便大家在數(shù)據(jù)庫(kù)相關(guān)的java開發(fā)中快速的進(jìn)行搭建開發(fā)或者測(cè)試環(huán)境。希望以上的介紹能幫助到你。樣例已經(jīng)托管到碼云:https://gitee.com/felord/mybatis-test.git 切換到h2分支。多多關(guān)注我,有問(wèn)題可以私信。

      多多關(guān)注我的公眾號(hào),獲取更多原創(chuàng)干貨。

      嵌入式 數(shù)據(jù)庫(kù)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:TL138-EVM開發(fā)板介紹
      下一篇:華為云高校開發(fā)者青年班第七期——DevCloud的托馬斯商城部署——知識(shí)點(diǎn)總結(jié)
      相關(guān)文章
      亚洲乱码在线观看| 亚洲精品成人久久久| 美国毛片亚洲社区在线观看| 亚洲精品国产肉丝袜久久| 国产偷国产偷亚洲清高动态图| 亚洲嫩草影院在线观看| 亚洲AV永久纯肉无码精品动漫| 亚洲精品黄色视频在线观看免费资源| 精品国产成人亚洲午夜福利| 亚洲 欧洲 日韩 综合在线| 欧洲 亚洲 国产图片综合| 亚洲卡一卡2卡三卡4麻豆| 亚洲女人18毛片水真多| 亚洲伊人久久精品| ww亚洲ww在线观看国产| 在线观看亚洲AV日韩A∨| 在线aⅴ亚洲中文字幕| 2019亚洲午夜无码天堂| 狠狠色香婷婷久久亚洲精品| 亚洲综合一区二区三区四区五区| 亚洲国产成+人+综合| 337p日本欧洲亚洲大胆艺术| 精品亚洲麻豆1区2区3区| 亚洲春色另类小说| 亚洲一级特黄特黄的大片| 亚洲一级片在线播放| 亚洲综合偷自成人网第页色| 亚洲另类无码专区丝袜| 自拍偷区亚洲国内自拍| 亚洲6080yy久久无码产自国产| 亚洲欧美在线x视频| 亚洲成av人片一区二区三区| 亚洲无码视频在线| 亚洲人成网77777色在线播放| 亚洲成在人线av| 国产v亚洲v天堂无码网站| 亚洲AV永久青草无码精品| 亚洲男同帅GAY片在线观看| 亚洲国产精品碰碰| 亚洲日韩精品射精日| 亚洲一区二区三区高清|