zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    PHP全路径无限分类原理
    SecureCRT上传bash: rz: command not found
    Android利用Fiddler进行网络数据抓包【怎么跟踪微信请求】
    Creating the Help Page in ASP.NET Web API
    Windows上怎么安装ELK
    安装ELK
    How to kill a process on a port on linux 怎么杀死 关掉一个端口
    How to install Mysql in the CentOS
    Hadoop: Setup Maven project for MapReduce in 5mn
    Install Ambari 2.2.0 from Public Repositories(Hadoop)
  • 原文地址:https://www.cnblogs.com/GarfieldEr007/p/10198032.html
Copyright © 2011-2022 走看看