Spring Boot H2数据库示例
在本教程中,我们将看到如何创建与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启动会自动配置一些默认属性,如 URL
那 username
和 password
。
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
- 点击发送