介绍
内存数据库(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.0modelVersion>
<groupId>com.kfitgroupId>
<artifactId>spring-boot-h2artifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>spring-boot-h2name>
<url>http://maven.apache.orgurl>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<java.version>1.8java.version>
properties>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>1.3.3.RELEASEversion>
parent>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-jpaartifactId>
dependency>
<dependency>
<groupId>com.h2databasegroupId>
<artifactId>h2artifactId>
<scope>runtimescope>
dependency>
dependencies>
project>
(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);
}
}
(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;
}
}
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>{
}
访问控制类: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 findAll(){
// 内存数据库操作
return demoInfoRepository.findAll();
}
}
这里提供两个访问方法/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 此时没有数据,说明了数据只保存在内存中,重启之后就释放了之前存入的数据。
转自 http://412887952-qq-com.iteye.com/blog/2322756