1. 程式人生 > >Java記憶體資料庫-H2介紹及例項(SpringBoot)

Java記憶體資料庫-H2介紹及例項(SpringBoot)

介紹

記憶體資料庫(Embedded database或in-momery database)具有配置簡單、啟動速度快、尤其是其可測試性等優點,使其成為開發過程中非常有用的輕量級資料庫。在spring中支援HSQL、H2和Derby三種資料庫。

這裡寫圖片描述

總的感覺H2很厲害的樣子,既然是這樣的話,我們先介紹H2的使用,然後在介紹HSQLDB的使用。

例項

(1)新建一個maven java project

新建一個spring-boot-h2工程。

(2)新增相關依賴

在pom.xml檔案新增相關依賴,核心的就是com.h2database,另外就是編碼需要用到的spring-boot-starter-web(編寫rest), spring-boot-starter-data-jpa(主要是使用@Entity管理實體類),具體的pom.xml檔案如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.kfit</groupId> <artifactId>spring-boot-h2</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-boot-h2</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- jdk版本號,Angel在這裡使用1.8,大家修改為大家本地配置的jdk版本號即可 --> <java.version>1.8</java.version> </properties> <!-- spring boot 父節點依賴, 引入這個之後相關的引入就不需要新增version配置, spring boot會自動選擇最合適的版本進行新增。 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.3.RELEASE</version> </parent> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <!-- spring boot web支援:mvc,aop... --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- spring data jpa --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 記憶體資料庫h2--> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies> </project>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

(3)編寫啟動類

啟動類程式碼我們已經寫了不下100遍了,這裡就不過多介紹,直接看原始碼:

package com.kfit;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 *
 * @author Angel --守護天使 * @version v.0.1 * @date 2016年9月5日 */ @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

(4)編寫測試類;

以上可以說都是準備工作,到這裡才是到了本節核心的地方,在具體提供原始碼之前,先說一下具體的一個思路:我們這裡要使用repository儲存資料到h2資料庫,我們需要提供一個實體類DemoInfo,其次就是具體的儲存資料類DemoInfoRepository,再者就是DemoInfoController進行編碼測試。你會發現我們這裡根本沒有配置jpa,h2配置檔案之類的,這個就是spring boot強大之處,已經提供了很多預設的配置,讓開發者能夠快速編寫一個hello例子。那麼我們每個具體的程式碼:

實體類:com.kfit.demo.bean.DemoInfo:

package com.kfit.demo.bean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity public class DemoInfo { @Id@GeneratedValue private long id; private String title; private String content; public DemoInfo() { } public DemoInfo(String title, String content) { this.title = title; this.content = content; } public long getId() { return id; } public void setId(longid) { this.id = id; } public String getTitle() { return title; } publicvoid setTitle(String title) { this.title = title; } public String getContent() { return content; } publicvoid setContent(String content) { this.content = content; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

DemoInfo的持久類:com.kfit.demo.repository.DemoInfoRepository

package com.kfit.demo.repository;

import org.springframework.data.repository.CrudRepository;
import com.kfit.demo.bean.DemoInfo;
public interface DemoInfoRepository extends CrudRepository<DemoInfo,Long>{ }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

訪問控制類:com.kfit.demo.web.DemoInfoController:

package com.kfit.demo.web;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.kfit.demo.bean.DemoInfo; import com.kfit.demo.repository.DemoInfoRepository; @RestController public class DemoInfoController { @Autowired private DemoInfoRepository demoInfoRepository; /** * 儲存資料. * @return */ @RequestMapping("/save") public String save(){ // 記憶體資料庫操作 demoInfoRepository.save(new DemoInfo("title1", "content1")); demoInfoRepository.save(new DemoInfo("title2", "content2")); demoInfoRepository.save(new DemoInfo("title3", "content3")); demoInfoRepository.save(new DemoInfo("title4", "content4")); demoInfoRepository.save(new DemoInfo("title5", "content5")); return "save ok"; } /** * 獲取所有資料. * @return */ @RequestMapping("/findAll") public Iterable<DemoInfo> findAll(){ // 記憶體資料庫操作 return demoInfoRepository.findAll(); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

這裡提供兩個訪問方法/save,/findAll。

到這裡基本的一個例子就編寫完畢了,我們就可以啟動App.java進行測試。

依次訪問:

http://127.0.0.1:8080/findAll 此時沒有資料;

http://127.0.0.1:8080/save 儲存測試資料;

http://127.0.0.1:8080/findAll 會看到save進入的資料;

重新啟動App.java,在訪問:

http://127.0.0.1:8080/findAll 此時沒有資料,說明了資料只儲存在記憶體中,重啟之後就釋放了之前存入的資料。

from: https://blog.csdn.net/csdn2193714269/article/details/73485533