论坛首页 编程语言技术论坛

73. Spring Boot使用内存数据库H2和HSQLDB【从零开始学Spring Boot】

浏览 2680 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2016-09-05  

应广大网友的要求,写了这么一篇文章。对于已经入门了童鞋来说的话,这个自然也就很简单了,对于刚刚入门的还是有点难度的,好吧,这里就简单介绍下。

       内存数据库(Embedded databasein-momery database)具有配置简单、启动速度快、尤其是其可测试性等优点,使其成为开发过程中非常有用的轻量级数据库。在spring中支持HSQLH2Derby三种数据库。

       哪个更好呢,我也不是很清楚,这里在官网找到了一个汇总(这个总结时间,没有体现出来,所以大小在做对比的时候,要小心,在百度上的对比资料都比较早了,所以不知道现在具体的都发展到什么程度了,在stackoverflow有这么一篇文章:Which is better H2 or HSQLDB,地址:http://stackoverflow.com/questions/2746201/which-is-better-h2-or-hsqldb )。

 


<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

H2

Derby

HSQLDB

MySQL

PostgreSQL

Pure Java

(Java编写)

Yes

Yes

Yes

No

No

Memory Mode

(支持内存模式)

Yes

Yes

Yes

No

No

Encrypted Database

(支持数据库加密)

Yes

Yes

Yes

No

No

ODBC Driver

(支持ODBC驱动)

Yes

No

No

Yes

Yes

Fulltext Search

(支持全文搜索)

Yes

No

No

Yes

Yes

Multi Version Concurrency

(支持多版本并发控制)

Yes

No

Yes

Yes

Yes

Footprint (jar/dll size)

(体积)

~1 MB

~2 MB

~1 MB

~4 MB

~6 MB

具体地址:http://www.h2database.com/html/main.html

       总的感觉H2很厉害的样子,既然是这样的话,我们先介绍H2的使用,然后在介绍HSQLDB的使用。

       那么本节的大体思路是:

1)新建一个maven java project;

2)添加相关依赖;

3)编写启动类;

4)编写测试类;

5)使用HSQLDB进行操作;

6)显示SQL语句;

7)实现h2数据库本地化;

 

       接下来我们看下每个步骤具体的实现。

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>

 

3)编写启动类;

       启动类代码我们已经写了不下100遍了,这里就不过多介绍,直接看源码:

package com.kfit;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

 

/**

 *

 * @author Angel --守护天使

 * @version v.0.1

 * @date 201695

 */

@SpringBootApplication

publicclass App {

    publicstaticvoid 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>{

   

}

 

访问控制类:

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics