📜  Spring Boot H2数据库

📅  最后修改于: 2021-01-11 05:34:23             🧑  作者: Mango

Spring Boot H2数据库

什么是内存数据库

内存数据库依赖于系统内存,而不是磁盘空间来存储数据。因为内存访问比磁盘访问快。当我们不需要持久化数据时,我们使用内存数据库。内存数据库是嵌入式数据库。默认情况下,内存数据库是易失性的,当我们重新启动应用程序时,所有存储的数据都会丢失。

广泛使用的内存数据库是H2,HSQLDB(的HyperSQL数据库),Apache Derby。它会自动创建配置。

持久性与内存数据库

持久数据库将数据持久存储在物理内存中。即使数据库服务器退回,数据也将可用。一些流行的持久性数据库是Postgres等。

对于内存数据库,数据存储在系统内存中。程序关闭时丢失了数据。它对POC (概念验证)很有帮助,而不对生产应用程序有用。广泛使用的内存数据库是H2。

什么是H2数据库

H2是一个嵌入式,开源内存数据库。它是用Java编写的关系数据库管理系统。它是一个客户端/服务器应用程序。它通常用于单元测试。它将数据存储在内存中,而不是将数据持久存储在磁盘上。

优点

  • 零配置
  • 这个用起来很简单。
  • 它轻巧,快速。
  • 它提供了简单的配置,可以在真实数据库和内存数据库之间切换。
  • 它支持标准的SQL和JDBC API。
  • 它提供了一个Web控制台来维护数据库。

配置H2数据库

如果要在应用程序中使用H2数据库,则需要在pom.xml文件中添加以下依赖项:


com.h2database
h2
runtime

添加依赖项后,我们需要配置H2数据库的数据源URL,驱动程序类名称,用户名密码。 Spring Boot提供了一种在application.properties文件中配置这些属性的简便方法。

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

spring.datasource.url属性中,默认情况下,mem是内存数据库的名称,而testdb是H2提供的架构的名称。我们还可以定义自己的架构和数据库。默认用户名是sa ,空密码表示密码。如果要更改用户名和密码,可以覆盖这些值。

将数据保留在H2数据库中

如果我们要将数据保留在H2数据库中,则应将数据存储在文件中。为此,我们需要更改数据源URL属性。

#persist the data
spring.datasource.url=jdbc:h2:file:/data/sampledata
spring.datasource.url=jdbc:h2:C:/data/sampledata

在以上属性中, sampledata是文件名。

创建架构并填充数据

我们可以通过在资源文件夹(src / main / resource)中创建一个SQL文件来定义架构。

schema.sql

DROP TABLE IF EXISTS CITY;
CREATE TABLE CITY (
City_code INT AUTO_INCREMENT  PRIMARY KEY,
city_name VARCHAR(50) NOT NULL,
city_pincode INT(8) NOT NULL,
);

我们可以通过在资源文件夹(src / main / resource)中创建一个SQL文件来填充表中的数据。

data.sql

INSERT INTO CITY VALUES ('Delhi', 110001);
INSERT INTO CITY VALUES ('Kanpur', 208001);
INSERT INTO CITY VALUES ('Lucknow', 226001);

在应用程序启动期间,Spring Boot自动拾取data.sql文件并在H2数据库上运行它。

H2控制台

默认情况下,H2数据库的控制台视图处于禁用状态。在访问H2数据库之前,我们必须使用以下属性启用它。

#enabling the H2 console
spring.h2.console.enabled=true

启用H2控制台后,现在我们可以通过调用URL http:// localhost:8080 / h2-console在浏览器中访问H2控制台。下图显示了H2数据库的控制台视图。

在上面的屏幕截图中,我们定义了自己的名为javatpoint的数据库。

Spring Boot H2示例

让我们使用H2数据库设置一个Spring Boot应用程序。

步骤1:打开Spring Initializr http://start.spring.io

步骤2:选择Spring Boot版本2.3.0.M1。

步骤2:提供群组名称。我们提供了com.javatpoint。

第3步:提供工件ID。我们提供了spring-boot-h2-database-example的示例。

步骤5:添加依赖项Spring Web,Spring Data JPAH2数据库。

步骤6:点击Generate(生成)按钮。当我们单击Generate按钮时,它将项目封装在一个Jar文件中并将其下载到本地系统。

步骤7:解压缩Jar文件并将其粘贴到STS工作区中。

第8步:导入项目文件夹为STS。

文件->导入->现有Maven项目->浏览->选择文件夹spring-boot-h2-database-example->完成

导入需要一些时间。

步骤9:在src / main / java文件夹中创建一个名称为com.javatpoint.model的包。

步骤10:在包com.javatpoint.model中创建一个模型类。我们创建了名为Student的模型类。在Books类中,我们完成了以下操作:

  • 定义四个变量ID,年龄,名称
  • 生成Getter和Setter。右键单击文件->源->生成Getter和Setter。
  • 使用注释@Entity将类标记为Entity。
  • 使用注解@Table将类标记为表名称。
  • 使用注释@Column将每个变量定义为Column。

学生.java

package com.javatpoint.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
//mark class as an Entity 
@Entity
//defining class name as Table name
@Table
public class Student 
{
//mark id as primary key
@Id
//defining id as column name
@Column
private int id;
//defining name as column name
@Column
private String name;
//defining age as column name
@Column
private int age;
//defining email as column name
@Column
private String email;
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 int getAge() 
{
return age;
}
public void setAge(int age) 
{
this.age = age;
}
public String getEmail() 
{
return email;
}
public void setEmail(String email) 
{
this.email = email;
}
}

步骤11:在src / main / java文件夹中创建一个名称为com.javatpoint.controller的包。

步骤12:在包com.javatpoint.controller中创建一个Controller类。我们创建了名称为StudentController的控制器类。在StudentController类中,我们完成了以下操作:

  • 通过使用注释@RestController类标记为RestController。
  • 使用注解@Autowired自动装配StudentService类。
  • 定义以下方法:
    • getAllStudent():返回所有学生的列表。
    • getStudent():它返回我们在path变量中指定的学生详细信息。通过使用注释@PathVariable,我们已将id作为参数传递。注释指示方法参数应绑定到URI模板变量。
    • deleteStudent():删除我们在path变量中指定的特定学生。
    • saveStudent():保存学生详细信息。注释@RequestBody指示应将方法参数绑定到Web请求的正文。

StudentController.java

package com.javatpoint.controller;
import java.util.List;
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;
import com.javatpoint.model.Student;
import com.javatpoint.service.StudentService;
//creating RestController
@RestController
public class StudentController 
{
//autowired the StudentService class
@Autowired
StudentService studentService;
//creating a get mapping that retrieves all the students detail from the database 
@GetMapping("/student")
private List getAllStudent() 
{
return studentService.getAllStudent();
}
//creating a get mapping that retrieves the detail of a specific student
@GetMapping("/student/{id}")
private Student getStudent(@PathVariable("id") int id) 
{
return studentService.getStudentById(id);
}
//creating a delete mapping that deletes a specific student
@DeleteMapping("/student/{id}")
private void deleteStudent(@PathVariable("id") int id) 
{
studentService.delete(id);
}
//creating post mapping that post the student detail in the database
@PostMapping("/student")
private int saveStudent(@RequestBody Student student) 
{
studentService.saveOrUpdate(student);
return student.getId();
}
}

步骤13:在src / main / java文件夹中创建一个名称为com.javatpoint.service的软件包。

步骤14:创建一个Service类。我们创建了一个服务类与包com.javatpoint.service名称StudentService。

StudentService.java

package com.javatpoint.service;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.javatpoint.model.Student;
import com.javatpoint.repository.StudentRepository;
@Service
public class StudentService 
{
@Autowired
StudentRepository studentRepository;
//getting all student records
public List getAllStudent() 
{
List students = new ArrayList();
studentRepository.findAll().forEach(student -> students.add(student));
return students;
}
//getting a specific record
public Student getStudentById(int id) 
{
return studentRepository.findById(id).get();
}
public void saveOrUpdate(Student student) 
{
studentRepository.save(student);
}
//deleting a specific record
public void delete(int id) 
{
studentRepository.deleteById(id);
}
}

步骤15:在src / main / java文件夹中创建一个名称为com.javatpoint.repository的包。

步骤16:创建一个Repository接口。我们在com.javatpoint.repository包中创建了一个名称为StudentRepository的存储库接口。它扩展了Crud Repository接口。

StudentRepository.java

package com.javatpoint.repository;
import org.springframework.data.repository.CrudRepository;
import com.javatpoint.model.Student;
public interface StudentRepository extends CrudRepository
{
}

现在,我们将在application.properties文件中配置数据源URL,驱动程序类名称,用户名密码。

步骤17:打开application.properties文件并配置以下属性。

application.properties

spring.datasource.url=jdbc:h2:mem:javatpoint
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
#enabling the H2 console
spring.h2.console.enabled=true

注意:不要忘记启用H2控制台。

创建所有类和包之后,项目目录如下所示。

现在,我们将运行该应用程序。

步骤18:打开SpringBootH2DatabaseExampleApplication.java文件并将其作为Java应用程序运行。

SpringBootH2DatabaseExampleApplication.java

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

在下一步中,我们将使用Rest Client Postman发送POSTGET请求如果您的系统中未安装邮递员,请执行以下步骤:

  • 或在浏览器https://bit.ly/1HCOCwF中添加Google Chrome扩展程序。
  • 启动邮递员并注册。创建一个用户名。我们已经创建了一个名称为javatpoint的用户,并单击Submit。

步骤19:打开邮递员,然后执行以下操作:

  • 选择POST
  • 调用URL http:// localhost:8080 / student。
  • 选择身体
  • 选择Content-Type JSON(应用程序/ json)。
  • 插入数据。我们在主体中插入了以下数据:
{
    "id": "001",
    "age": "23",
    "name": "Amit",
    "email": "amit@yahoo.co.in"
} 
  • 点击发送

成功执行请求后,它会显示Status:200 OK 。这意味着记录已成功插入数据库中。

同样,我们插入了以下数据。

{
    "id": "002",
    "age": "24",
    "name": "Vadik",
    "email": "vadik@yahoo.co.in"
} 
{
    "id": "003",
    "age": "21",
    "name": "Prateek",
    "email": "prateek@yahoo.co.in"
} 
{
    "id": "004",
    "age": "25",
    "name": "Harsh",
    "email": "harsh@yahoo.co.in"
} 
{
    "id": "005",
    "age": "24",
    "name": "Swarit",
    "email": "Swarit@yahoo.co.in"
} 

让我们访问H2控制台以查看数据。

步骤20:打开浏览器并调用URL http:// localhost:8080 / h2-console。单击“连接”按钮,如下所示。

单击“连接”按钮后,我们将在数据库中看到“学生”表,如下所示。

步骤21:单击Student表,然后单击Run(运行)按钮。该表显示了我们插入到正文中的数据。

步骤22:打开邮递员并发送GET请求。它返回我们已插入数据库中的数据。

让我们发送URL为http:// localhost:8080 / student / {id}的GET请求。我们已经调用了URL http:// localhost:8080 / student / 3。它返回ID为3的学生的详细信息。

同样,我们也可以发送DELETE请求。假设我们要删除ID为2的学生记录。

要删除学生记录,请发送带有URL http:// localhost:8080 / student / 2的DELETE请求。我们看到ID为2的学生已从数据库中删除。