在 Spring Boot 项目中集成 H2 数据库可以按照以下步骤进行:
在项目的pom.xml文件中添加 H2 数据库和 Spring Boot 的依赖,如下:
<?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.hxstrive</groupId> <artifactId>demo_springboot</artifactId> <version>0.0.1</version> <packaging>jar</packaging> <name>demo_springboot</name> <description>Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.15</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>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.3.232</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.6.15</version> </plugin> </plugins> </build> </project>
在 Spring Boot 的配置文件(通常是application.yml)中配置 H2 数据库的连接信息:
spring: # 数据源配置 datasource: url: jdbc:h2:mem:test-db;DB_CLOSE_DELAY=-1 username: sa password: driver-class-name: org.h2.Driver
注意:这里使用内存数据库模式,连接名为test-db,用户名默认是sa且无密码。
创建 person 表对应的实体类:
package com.hxstrive.springboot.h2;
import lombok.Data;
import lombok.ToString;
import javax.persistence.*;
/**
* @author hxstrive.com
* @since 1.0.0 2024/9/24 13:56
*/
@Data
@Entity
@ToString
public class PersonEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
}通过继承 Spring Data JPA 的JpaRepository 接口,定义自己的数据访问层接口,如下:
package com.hxstrive.springboot.h2;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author hxstrive.com
* @since 1.0.0 2024/9/24 14:00
*/
public interface PersonRepository extends JpaRepository<PersonEntity, Long> {
//
}在服务类中可以注入数据访问层接口来操作 H2 数据库。例如:
package com.hxstrive.springboot.h2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author hxstrive.com
* @since 1.0.0 2024/9/24 14:01
*/
@Service
public class PersonService {
@Autowired
private PersonRepository personRepository;
public void save(PersonEntity person) {
personRepository.save(person);
}
public void delete(PersonEntity person) {
personRepository.delete(person);
}
public PersonEntity findById(Long id) {
return personRepository.findById(id).orElse(null);
}
public List<PersonEntity> findAll() {
return personRepository.findAll();
}
}编写一个 Spring Boot 测试类,注入 PersonService 服务类,测试 H2 数据库,代码如下:
package com.hxstrive.springboot.h2;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
/**
* @author hxstrive.com
* @since 1.0.0 2024/9/24 14:05
*/
@SpringBootTest
public class SpringBootDemoTest {
@Autowired
private PersonService personService;
@Test
public void contextLoads() {
// 保存
PersonEntity personEntity = new PersonEntity();
personEntity.setName("张三");
personService.save(personEntity);
// 查询
List<PersonEntity> personEntityList = personService.findAll();
for(PersonEntity person : personEntityList) {
System.out.println(person);
}
if(personEntityList.size() > 0) {
// 更新
PersonEntity person = personEntityList.get(0);
person.setName("张三-update");
personService.save(person);
}
// 查询
personEntityList = personService.findAll();
for(PersonEntity person : personEntityList) {
System.out.println(person);
}
// 删除
for(PersonEntity person : personEntityList) {
personService.delete(person);
}
}
}调用测试示例,输出如下:
PersonEntity(id=1, name=张三) PersonEntity(id=1, name=张三-update)