H2 与 Spring Boot 集成

在 Spring Boot 项目中集成 H2 数据库可以按照以下步骤进行:

添加 Maven 依赖

在项目的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;

}

数据访问层(Repository)

通过继承 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 数据库

在服务类中可以注入数据访问层接口来操作 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)


说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号