Spring Boot 2 實戰:H2數據庫集成以及使用

1.前言

前面講一些Mybatis特性的時候老是要寫一些例子演示給粉絲。用Mysql或者其餘很大的數據庫過重了,由於只是個demo而已。固然也可使用docker來安裝。可是仍是須要依賴一些東西。有沒有很是小巧並且便於攜帶的數據庫,並且能知足很小場景的數據庫。固然有。今天介紹一種純java編寫並且支持jdbc的嵌入式關係型數據庫H2。java

2.數據庫H2

H2數據庫的特色:git

  • 很是快,開源,支持JDBC API
  • 嵌入式和服務器模式;內存數據庫
  • 基於瀏覽器的控制檯應用程序
  • 佔用空間小,jar只有2MB大小

以上只是官網列出的特色。其實還有跨平臺的優點,支持目前常見的大部分平臺。還兼容常見的主流關係型數據庫,好比DB二、Oracle、MS SQL Server、Mysql、PostgreSQL、HSQLDB、Ignite、Derby等。web

3.使用場景

基於以上的特色。H2數據庫特別適用於快速構建的小型應用。尤爲在應用開發中和單元測試中使用很是方便,並且節省系統資源。並且springboot的依賴池也收錄了H2數據庫。接下來咱們經過springboot結合Mybatis來對H2數據庫進行一些特性的講解演示。spring

4.springboot中使用H2

springboot使用H2數據庫很是簡單。集成BOM下的H2依賴就能夠了。這裏爲了演示咱們還引入了Mybatis。sql

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

固然引入依賴還不夠咱們還須要對其餘參數進行配置。固然這些配置能夠經過springboot的 application.yml(application.properties)來完成。咱們知道H2支持像tomcat同樣內嵌到springboot應用中,也支持獨立的server進程模式。經過不一樣的配置咱們來演示一下。docker

5.內嵌模式

內嵌模式,就是把在應用中引入H2,啓動應用的同時,會把H2數據服務也啓動,應用中既包含了H2數據庫的服務端,同時應用又做爲客戶端來鏈接H2數據庫。數據庫

5.1 內存模式鏈接

內存模式就是數據庫文件存在於內存中,沒有持久化,當應用進程關閉時數據庫與數據表會消失。爲了獨立環境,咱們利用springboot的profile特性來隔離不一樣模式的環境配置。咱們定製一個名稱爲application-inner.yml來測試內嵌模式。配置以下:瀏覽器

spring:
  datasource:
    #  驅動
    driver-class-name: org.h2.Driver
    # h2 內存數據庫 內存模式鏈接配置 庫名: mybatis
    url: jdbc:h2:mem:mybatis
    # 初始化數據表 DDL
    schema: classpath:sql/init.sql
    #  初始化數據 DML
    data: classpath:sql/data.sql
  h2:
    #    開啓console 訪問 默認false
    console:
      enabled: true
      settings:
        #      開啓h2 console 跟蹤 方便調試  默認 false
        trace: true
        #      容許console 遠程訪問 默認false
        web-allow-others: true
      #  h2 訪問路徑上下文
      path: /h2-console
# 日誌
logging:
  level:
    cn:
      felord: debug

# mybatis 配置
mybatis:
  mapper-locations: classpath:mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true
  type-aliases-package: cn.felord.mybatis.entity
  type-handlers-package: cn.felord.mybatis.type

springboot項目 經過指定 --spring.profiles.active=inner啓動後,輸入http://localhost:8080/h2-console,進入H2數據的控制檯tomcat

b42401d0b5f00881bf70438e9b557da0.png

必定要注意紅框按照你配置文件中的spring.datasource.url來設置,不要用默認值。若是沒有設置密碼直接點connect,設置密碼了輸入。進入下列界面:springboot

5f223442b3ed9f6e4fbf012eba0f826b.png

由於咱們在初始化指定了DDL 、 DML SQL腳本,建立了student表,並且插入了3條數據。因此會呈現出來。證實集成成功。同時咱們執行maven 工程的測試包也會成功完成Mybatis 單元測試。可是咱們關閉應用後數據會丟失由於這些數據存在於內存中。內存是會被回收的。不信你註釋掉 spring.datasource.schema 或者spring.datasource.data 重啓看看。那麼如何持久化呢?這就用到嵌入模式了。

5.2 嵌入模式鏈接

嵌入模式就是數據庫文件存在於應用當前的硬盤內,進行了持久化,當應用進程關閉時數據庫與數據表不會消失。咱們只須要將5.1的yml配置中的 spring.datasource.url 改成jdbc:h2:file:E:/H2/mybatis 。而後啓動從新登陸console。注意url要改成jdbc:h2:file:E:/H2/mybatis哦。發現數據都在,而後咱們關閉再啓動發現報錯了:

error.png

說明數據庫中的數據衝突了。咱們註釋掉DDL、DML初始化發現又能啓動了。證實數據持久化了。url 中 file: 後綴你係統的可用路徑,H2就能把數據持久化到該路徑下。

5.3兼容性

開始咱們提到H2能夠兼容不少數據庫。如何兼容呢?經過url後綴MODE參數來設置,總結一下本身使用:

  • 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
  • MS SQL Server jdbc:h2:~/test;MODE=MSSQLServer或SQL語句SET MODE MSSQLServer

其餘不一一列舉,可是注意兼容也不是徹底兼容,會有一些注意事項和微小的差異。通常不會出現問題。進一步瞭解可查閱官方文檔和其餘資料。

總結

今天介紹了H2這種小巧而靈活方便的數據庫。介紹了H2的一些特性並和springboot、mybatis這些框架結合起來進行開發和單元測試。後面還介紹了它的兼容性配置。目的就是爲了方便你們在數據庫相關的java開發中快速的進行搭建開發或者測試環境。但願以上的介紹能幫助到你。多多關注我,有問題能夠私信。該項目demo已經託管到碼雲:https://gitee.com/felord/myba... 切換到h2分支。

關注公衆號:Felordcn或者https://felord.cn獲取更多資訊

相關文章
相關標籤/搜索