通过Spring Boot了解H2 InMemory数据库

介绍

基本上,数据库设置涉及几个步骤,然后才能在应用程序中通过已配置的数据源使用它。 在实际项目实施中,这实际上是必需的。 但是,在某些情况下,我们只需要为某些事情完成POC,而整个数据库设置工作仍然是必须的。 同样,对于单元测试,理想的是在数据库中拥有我们自己的记录集,使其独立,而不受部署环境中数据更改的影响。 对于此类用例,内存数据库是理想的解决方案。

内存数据库在应用程序启动时创建,而数据库在应用程序停止时销毁。

Spring Boot轻松集成了H2数据库。 因此,您可以轻松,快速地在真实数据库和内存数据库之间切换。

注意,H2 InMemory数据库是用Java编写的关系DBMS。

让我们看一下快速演示。

实作

让我们从Spring initializr生成Spring Boot项目。 确保添加Web,JPA,H2和DevTools依赖关系,如下所示。

H2内存数据库

让我们看一下生成的pom文件。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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.jcombat</groupId><artifactId>h2demo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>h2demo</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.0.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

我们还注意到application.properties文件生成为–

application.properties

# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2# Datasource
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

属性spring.h2.console.enabled = true启用位于http:// localhost:8080 / h2的Web控制台

H2内存数据库

单击“连接”,然后进入页面,在该页面中可以看到数据库中的可用表。

H2内存数据库

您可能想知道,如何创建Student表。 神奇之处在于data.sql位于src / main / resources。 只需确保您在data.sql文件中具有插入语句,如下所述–

data.sql

insert into STUDENT
values(10001,'Ajay', 'AAA1');insert into STUDENT
values(10002,'Ajit', 'AAA2');

Spring Boot自动配置检查data.sql文件中的值,并为您做必要的事情,即创建STUDENT表并执行insert语句。 聪明!

让我们检查一下如何处理这些学生记录。

为此,让我们现在创建Student实体类。

学生.java

package com.jcombat.entity;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;@Entity
public class Student {@Id@GeneratedValueprivate Long id;private String name;private String section;public Student() {}public Student(Long id, String name, String section) {this.id = id;this.name = name;this.section = section;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSection() {return section;}public void setSection(String section) {this.section = section;}}

要访问数据库,让我们编写一个简单的JPA接口,该接口提供执行基本DB操作所需的帮助程序功能。

StudentRepository.java

package com.jcombat.repository;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;import com.jcombat.entity.Student;@Repository
public interface StudentRepository extends JpaRepository<Student, Long> {}

现在让我们使用Command Line Runner定制Spring Boot入口点类,以便我们能够从命令行执行Spring Boot应用程序。

package com.jcombat.h2demo;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;import com.jcombat.repository.StudentRepository;@SpringBootApplication
@EntityScan("com.jcombat.entity")
@EnableJpaRepositories("com.jcombat.repository")
public class H2demoApplication implements CommandLineRunner {// mvn spring-boot:runprivate Logger LOG = LoggerFactory.getLogger("H2demoApplication");StudentRepository studentRepository;@Autowiredpublic H2demoApplication(StudentRepository studentRepository) {this.studentRepository = studentRepository;}public static void main(String[] args) {SpringApplication.run(H2demoApplication.class, args);}@Overridepublic void run(String... args) throws Exception {LOG.info("Student count in DB: {}", studentRepository.count());}
}

执行应用程序

要运行该应用程序,您可以直接从Eclipse IDE进行操作,也可以通过以下命令从命令行进行操作–

mvn spring-boot:run

执行后,我们会在控制台上看到以下输出–

下载源代码

H2内存数据库

翻译自: https://www.javacodegeeks.com/2018/11/understandin-inmemory-database-spring.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql多数据源事务_多数据源一致性事务解决方案

spring 多数据源配置spring 多数据源配置一般有两种方案&#xff1a;1、在spring项目启动的时候直接配置两个不同的数据源&#xff0c;不同的sessionFactory。在dao 层根据不同业务自行选择使用哪个数据源的session来操作。2、配置多个不同的数据源&#xff0c;使用一个session…

www.how2j.com_HOW-TO:快速开始使用Spring 4.0,以构建简单的REST-Like API(演练)

www.how2j.comHOW-TO&#xff1a;快速开始使用Spring 4.0&#xff0c;以构建简单的REST-Like API&#xff08;演练&#xff09; 关于使用Spring MVC创建Web API的另一篇教程。 不太复杂。 只是一个演练。 生成的应用程序将提供简单的API&#xff0c;将Mongo作为其持久性&#x…

flutter 返回指定界面_Flutter页面路由导航及传参

转载请注明出处: https://learnandfish.com/概述 每个应用都有很多个页面&#xff0c;在flutter中同样也有很多页面&#xff0c;被称之为路由(Router)&#xff0c;页面之间的跳转通过导航器(Navigator)进行管理。其中 Navigator.push 和 Navigator.pop 是最简单的跳转到新页面和…

正确的工作流程:我应该使用哪个OAuth 2.0流程?

什么是OAuth 2.0 OAuth 2.0是一个已被广泛采用的委托授权框架&#xff0c;已经存在了很多年&#xff0c;并且似乎已经存在。 如果您不熟悉OAuth 2.0的基本概念&#xff0c;可以使用 川崎孝彦写的优秀文章 。 这只是OAuth 2.0各方的简要提醒&#xff1a; 资源所有者–受保护资…

mysql workbench入门_5分钟入门MySQL Workbench

接下来进入下一步&#xff0c;使用Workbench执行sql文件&#xff1a;1.打开Workbench&#xff0c;主页面上点击要connect的连接。2.注意系统偏好设置里&#xff0c;MySQL是running的状态&#xff0c;否则无法执行。创建数据库&#xff1a;点击创建数据库按钮&#xff0c;输入数…

使用Spring Boot和Vue进行有益的开发

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 Vue是一个Web框架&#xff0c;由于它的精简和刻薄&#xff0c;最近引起了很多关注。 …

mysql mydumper_系统运维|Mydumper-MySQL数据库备份工具

Mydumper 是 MySQL 数据库服务器备份工具&#xff0c;它比 MySQL 自带的 mysqldump 快很多。它还有在转储的同时获取远程服务器二进制日志文件的能力。Mydumper 的优势并行能力 (因此有高速度) 和性能 (高效的代码避免了耗费 CPU 处理能力的字符集转换过程)更容易管理输出 (每个…

vue调用手机相机相册_详解Vue调用手机相机和相册以及上传

组件选中{{imgList.length}}张文件&#xff0c;共{{bytesToSize(this.size)}}javaScript代码export default {name: "cameras-and-albums",data(){return{imgList: [],datas: new FormData(),files:0,size:0}},methods:{//调用相册&相机fileClick() {$(#upload_f…

红旗linux mysql_恢复 - 红旗Linux案例精选:Amanda集中备份实例详细讲解_数据库技术_Linux公社-Linux系统门户网站...

五、恢复假定我们需要恢复cp3上一些丢失的数据&#xff0c;首先用amandabackup帐号登录cp2机器&#xff0c;创建/etc/amanda/amanda-client.conf文件&#xff0c;内容如下&#xff1a;## amanda.conf - sample Amanda client configuration file.## This file normally goes in…

linuxpip安装python包_Windows+Linux安装Python包管理工具pip

WindowsLinux安装Python包管理工具pipWindows安装Python包管理工具pippip是一个Python包管理工具&#xff0c;主要是用于安装PyPI上的软件包&#xff0c;可以替代easy_install工具。一、前期准备首先确认windows机器上面是否已经安装好了python。在cmd中输入python --version和…

mysql 深胡_Mysql胡说八道

mysql索引今天看了一些关于MySQL相关的东西&#xff0c;来做一些碎碎念&#xff0c;写这些可能只是觉得自己看东西老爱忘23333.先来看一组MySQL数据&#xff0c;如图我们要查看最后id11的数据&#xff0c;如果我们不加索引的话会怎样呢&#xff1f;他会一条一条的比对&#xff…

java public main_实例分析Java中public static void main(String args[])是什么意思

本文实例讲述了Java中public static void main(String args[])的来龙去脉。分享给大家供大家参考&#xff0c;具体如下&#xff1a;public static void main(String[] args)这绝对不是凭空想出来的&#xff0c;也不是没有道理的死规定&#xff0c;而是java程序执行的需要。jvm在…

java浏览文件夹_一个用java实现简单的文件浏览器

[java]代码库import java.awt.*;import java.awt.event.*;import java.net.URL;import javax.swing.*;//文件浏览器public class HTTPBrowserDemo extends JFrame {private static final long serialVersionUID -5794029080886644211L;JTextField jtfAddress; // 输入文件地址…

java奥运会安排赛程问题_记录奥运-当今五大Java记录框架之间的竞赛

java奥运会安排赛程问题开发人员&#xff1a;Takipi会告诉您何时新代码在生产中中断– Log4J vs SLF4J简单vs Logback vs Java Util日志记录vs LOG4J2 日志记录实际上是每个服务器端应用程序中古老且固有的部分。 这是应用程序以持久且可读的方式输出实时状态的主要方法。 某些…

为什么在子类中不重写超类的实例变量

当我们在父类和子类中创建一个具有相同名称的变量&#xff0c;并尝试使用持有子类对象的父类引用访问它时&#xff0c;我们会得到什么&#xff1f; 为了理解这一点&#xff0c;让我们考虑下面的示例&#xff0c;其中在Parent和Child类中声明一个具有相同名称的变量x 。 class…

cocos lua调用java_【Tech-Lua】Cocos-2dx-Lua调用java的小白教程(三)

上周五下班前&#xff0c;打包成功了。我很高兴&#xff0c;周六去踢场足球&#xff0c;周日去现场看了最后一分钟掉球的恒大&#xff0c;度过了一个愉快的周末。然后&#xff0c;噩梦的周一开始了。我再次打包&#xff0c;打算打包就安装&#xff0c;但结果是失败的。为何&…

github上java项目_GitHub上10,000个最受欢迎的Java项目-以下是他们使用的顶级库

github上java项目随着Java开发人员使用既成熟又高度发展的语言来工作&#xff0c;无论何时编写新代码&#xff0c;我们都将面临一个持续的困境–使用大家都在谈论的热门新技术&#xff0c;或者坚持使用久经考验的库&#xff1f; 由于Java应用程序的很大一部分是商业性质的&…

char java 回文_LeetCode刷题笔记(Java)---第1-18题

题目来自LeetCode文章目录全部章节1-18题19-40题41-60题61-80题81-100题101-120题121-140题1.两数之和2.两数相加3.无重复字符串的最长子串4.寻找两个有序数组的中位数5.最长回文子串6.Z 字形变换7.整数反转8.字符串转换整数 (atoi)9.回文数10.正则表达式匹配11.盛最多水的容器…

使用PostgreSQL使用Spring Boot和JPA构建基本应用

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 每个不平凡的应用程序都需要一种保存和更新数据的方法&#xff1a;可通过HTTP访问的资…

通过示例了解Apache Ignite Baseline拓扑

点燃基准拓扑或BLT表示群集中的一组服务器节点&#xff0c;这些服务器节点将数据持久存储在磁盘上。 其中&#xff0c;N1-2和N5服务器节点是具有本机持久性的Ignite集群的成员&#xff0c;这些集群使数据能够持久存储在磁盘上。 N3-4和N6服务器节点是Ignite群集的成员&#x…