介紹
內存數據庫(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