【云圖說(shuō)】第235期 DDS讀寫兩步走 帶您領(lǐng)略只讀節(jié)點(diǎn)的風(fē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)的操作命令:
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)容。