Spring Boot H2数据库示例

时间:2020-02-23 14:35:47  来源:igfitidea点击:

在本教程中,我们将看到如何创建与H2数据库集成的Spring引导应用程序。

什么是h2数据库?

H2是开源数据库。
它的尺寸非常快,更小。
它是内存数据库,并在内存中保留所有数据。
如果启动并停止应用程序,所有数据将被删除,因为它不会持久。
虽然有一个选择持续存在磁盘上的数据以及H2数据库。

不建议使用H2数据库进行生产环境,适用于需要非常简单的数据库的小型应用程序。

使用的工具

  • Spring Boot 2.2.2.Release.
  • Spring JDBC 5.2.2.1.Release.
  • Hikaricp 3.4.1.
  • Maven 3.
  • Java 8.

github源代码:

Download

以下是创建Spring Boot H2数据库示例的步骤。

项目结构

创建新的Spring Boot项目

第1步:转到start.spring.io并创建一个具有以下依赖项的项目

  • Spring网
  • H2数据库
  • Spring数据JPA.

这是相同的屏幕截图。

maven配置

第2步:我们应该有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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.2.RELEASE</version>
		<relativePath  <!-- lookup parent from repository -->
	</parent>
	<groupId>org.igi.theitroad</groupId>
	<artifactId>SpringBootH2Example</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>SpringBootH2Example</name>
	<description>Demo project for Spring Boot</description>
 
	<properties>
		<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>com.h2database</groupId>
			<artifactId>h2</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
	</dependencies>
 
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
 
</project>

spring-boot-starter-parent为我们提供任何Spring项目所需的所有Maven默认值。

H2数据库配置

正如我们已经知道的,Spring引导是自以为是,它将基于类路径中可用的依赖项进行大量自动配置。

在这种情况下,我们在我们的类路径中有H2依赖关系,因此Spring启动会自动配置一些默认属性,如 URLusernamepassword

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

如果我们对这些默认值很好,我们不必配置任何内容。
它使用架构名称为 testdb

我们可以重写(overwriting)默认值吗?
哦,是的,可以

重写(overwriting)H2 Databse默认值

我们可以始终在application.properties中重写(overwriting)任何属性。
例如:假设我们想要重写(overwriting)属性 spring.h2.console.enable并想要改变它 true我们可以在application.properties中将此属性放在下面。

spring.h2.console.enable=true

模型

第3步:创建名为Model类 Movie.java

package org.igi.theitroad.model;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
 
@Entity
public class Movie {
 
	    @Id
	    @GeneratedValue
	    private int id;
	    private String name;
	    private String genre;
		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getGenre() {
			return genre;
		}
		public void setGenre(String genre) {
			this.genre = genre;
		}
}

@entity用于制作持久性POJO类。
对于此Java类,我们将在数据库中具有相应的表。

存储库

第4步:创建一个 MovieRepository界面将扩展CrudRepository。

我们不必提供实现,Spring数据将自动地为我们做。

package org.igi.theitroad.repository;
 
import org.igi.theitroad.model.Movie;
import org.springframework.data.repository.CrudRepository;
 
public interface MovieRepository extends CrudRepository<Movie, Integer> {}

服务

步骤5:在服务类中创建服务类"MoveService"和AutoWire MovieRepository。

package org.igi.theitroad.service;
import java.util.ArrayList;
import java.util.List;
 
import org.igi.theitroad.model.Movie;
import org.igi.theitroad.repository.MovieRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
@Service
public class MovieService {
 
    @Autowired
    MovieRepository movieRepository;
 
    public List getAllMovies() {
        List movies = new ArrayList();
        movieRepository.findAll().forEach(movie -> movies.add(movie));
        return movies;
    }
 
    public Movie getMovieById(int id) {
        return movieRepository.findById(id).get();
    }
 
    public void saveOrUpdate(Movie mvoie) {
    	movieRepository.save(mvoie);
    }
 
    public void delete(int id) {
    	movieRepository.deleteById(id);
    }
}

控制器

步骤6:在Package .org.igi.theitroad.on中创建名为"moviecontroller.java"的文件.Controller和MovieController中的AutoWire电影。

package org.igi.theitroad.controller;
import java.util.List;
 
import org.igi.theitroad.model.Movie;
import org.igi.theitroad.service.MovieService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class MovieController {
 
    @Autowired
    MovieService movieService;
 
    @GetMapping("/movies")
    private List getAllMovies() {
        return movieService.getAllMovies();
    }
 
    @GetMapping("/movies/{id}")
    private Movie getMovie(@PathVariable("id") int id) {
        return movieService.getMovieById(id);
    }
 
    @DeleteMapping("/movies/{id}")
    private void deleteMovie(@PathVariable("id") int id) {
        movieService.delete(id);
    }
 
    @PostMapping("/movies")
    private int saveMovie(@RequestBody Movie movie) {
        movieService.saveOrUpdate(movie);
        return movie.getId();
    }
}

Spring boot 主文件

第7步:创建一个名为的文件 SpringBootH2ExampleApplication.java在package .org.igi.theitroad.

package org.igi.theitroad;
package org.igi.theitroad;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
public class SpringBootH2ExampleApplication {
 
	public static void main(String[] args) {
		SpringApplication.run(SpringBootH2ExampleApplication.class, args);
	}
 
}

我们刚刚添加了@springbootapplication,它做了所有的工作。
让我们了解更多关于这个注释的信息。 @SpringBootApplication是添加以下所有内容的注释:

  • @Configuration使类作为应用程序上下文的Bean定义的源。
  • @EnableAutoConfiguration启用Spring Boot以添加类路径设置和各种属性设置中存在的bean。

通常,我们将为Spring MVC应用程序添加@bableWebMVC,但Spring Boot会在类路径上看到Spring-WebMVC时自动添加它。
将应用程序标记为Web应用程序,并激活诸如设置DispatcherServlet之类的关键行为。 @ComponentScan告诉Spring在默认包中查找其他组件,配置和服务,允许它找到控制器。
如果未定义特定包,则会从声明此注释的类的包中扫描。

运行应用程序

步骤8:让我们开始并运行应用。
让我们现在打开H2控制台。

  • 转到网址 http://localhost:8080/h2-console

请确保JDBC URL是 jdbc:h2:mem:testdb

  • 单击"连接"
  • 我们应该能够看到如下电影表

测试应用程序

步骤9:我们将在邮递员,基于UI的客户端中测试此应用程序,用于测试RESTful Web应用程序。
它是Chrome插件。
启动Postman.如果我们希望基于Java的客户端,那么我们还可以使用如何在Java中发送Get或者Post请求。

创建电影对象

  • 启动邮递员
  • 选择请求类型为 Post
  • 设置URL http://localhost:8080/movies
  • 去标题并放置 content-type=application/json作为键值对
  • 去身体,选择原始和粘贴{"名字":"教父","类型":"戏剧"}
  • 点击发送

以下是H2数据库表的屏幕截图。

在发送发送后,让我们检查我们是否在H2数据库中有条目。
我创造了更多的电影对象,其中json下面有类似的发布请求

{"名字":"inception","类型":"动作"} {"名称":"宿醉","类型":"comedy"} {"name":"forrest gump","penre":"喜剧"}

以下是数据库中的记录在上述POST请求之后。

获取所有电影对象

  • 启动postman
  • 选择请求类型为 Get
  • 设置URL http://localhost:8080/movies
  • 点击发送

删除电影ID 3

  • 启动postman
  • 选择请求类型为 Delete
  • 设置URL http://localhost:8080/movies/3
  • 点击发送