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