一、H2 数据库简介
H2 是一个开源的、内存型嵌入式数据库引擎,用 Java 开发,可直接嵌入到应用程序中,具有轻量级、快速启动、支持内存模式和文件模式等特点。它非常适合开发和测试环境使用。
二、环境准备
- JDK 17 或更高版本
- Spring Boot 3.x
- MyBatis-Plus
- H2 Database
三、创建 Spring Boot 项目并添加依赖
在 pom.xml 文件中添加以下依赖:
<!-- H2 数据库依赖 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- MyBatis-Plus Spring Boot 3 Starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.10</version>
</dependency>
<!-- MyBatis 和相关解析器 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.16</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-jsqlparser</artifactId>
<version>3.5.10</version>
</dependency>
四、配置 H2 数据库与 MyBatis-Plus
在 application.yml 中进行如下配置:
# H2 数据库配置
spring:
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
username: sa
password:
driver-class-name: org.h2.Driver
# 如果使用文件模式,可以将 url 改为:jdbc:h2:file:./data/testdb
h2:
console:
enabled: true # 启用 H2 控制台
path: /h2-console # 访问路径
settings:
web-allow-others: true # 允许远程访问(生产环境请关闭)
# JPA 相关配置(可选,如果使用 JPA)
jpa:
show-sql: true
hibernate:
ddl-auto: none
database-platform: org.hibernate.dialect.H2Dialect
# MyBatis-Plus 配置
mybatis-plus:
configuration:
map-underscore-to-camel-case: true # 开启驼峰命名转换
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印 SQL 日志(可选)
global-config:
db-config:
logic-delete-field: deleted # 逻辑删除字段(可选)
logic-delete-value: 1
logic-not-delete-value: 0
mapper-locations: classpath:mapper/*.xml # Mapper XML 文件路径
type-aliases-package: com.example.demo.entity # 实体类包路径
说明:
jdbc:h2:mem:testdb表示使用内存模式,数据库仅在应用运行期间存在。- 若需使用文件模式,可将 URL 改为
jdbc:h2:file:./data/testdb,这样数据会持久化到磁盘。- H2 控制台路径为
http://localhost:8080/h2-console,可通过浏览器访问进行数据库操作。
五、创建数据库初始化文件
1. 创建 Schema 初始化文件
在 src/main/resources/db/ 目录下创建 schema.sql 文件,用于定义数据库表结构。例如:
-- src/main/resources/db/schema.sql
-- 设置模式(可选)
SET MODE MySQL;
-- 创建用户表
CREATE TABLE IF NOT EXISTS user (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL,
email VARCHAR(200),
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
说明:
schema.sql会在应用启动时自动执行,用于创建表结构。- 可根据实际需求创建多张表。
2. 创建数据初始化文件
在 src/main/resources/db/ 目录下创建 data.sql 文件,用于插入初始数据。例如:
-- src/main/resources/db/data.sql
-- 插入测试用户数据
INSERT INTO user (username, email, age) VALUES ('Alice', 'alice@example.com', 25);
INSERT INTO user (username, email, age) VALUES ('Bob', 'bob@example.com', 30);
INSERT INTO user (username, email, age) VALUES ('Charlie', 'charlie@example.com', 28);
说明:
data.sql会在schema.sql执行后自动运行,用于插入初始数据。- 可根据表结构和需求插入相应的测试数据。
六、配置实体类、Mapper 和 Service(无需提供具体代码)
虽然本教程不提供具体的 Java 代码,但以下是集成的基本步骤和结构说明:
1. 实体类(Entity)
在指定的包路径(如 com.example.demo.entity)下创建与数据库表对应的实体类,使用 MyBatis-Plus 的注解(如 @TableName、@TableId 等)进行映射。
2. Mapper 接口
创建对应的 Mapper 接口,继承自 MyBatis-Plus 提供的 BaseMapper<T>,用于基本的 CRUD 操作。
3. Mapper XML 文件(可选)
如果使用 XML 文件进行复杂的 SQL 映射,可以在 src/main/resources/mapper/ 目录下创建相应的 XML 文件,并在 mybatis-plus.mapper-locations 中配置路径。
4. Service 层
创建 Service 接口及其实现类,利用 Mapper 进行业务逻辑处理。
七、启动应用并访问 H2 控制台
- 启动 Spring Boot 应用。
- 应用启动时,会自动执行
schema.sql和data.sql,创建表结构并插入初始数据。 - 打开浏览器,访问 http://localhost:8080/h2-console。
- 在 H2 控制台中,配置连接信息:
- JDBC URL:
jdbc:h2:mem:testdb(与application.yml中的url保持一致) - User Name:
sa - Password: (留空或与配置一致)
- JDBC URL:
- 点击 Connect,即可通过 H2 控制台进行数据库的查询、插入、更新等操作。
八、注意事项
-
内存模式 vs 文件模式
- 内存模式 (
jdbc:h2:mem:testdb):数据库仅在应用运行时存在,重启后数据丢失,适合开发和测试。 - 文件模式 (
jdbc:h2:file:./data/testdb):数据会持久化到磁盘,重启后数据依然存在,适合需要数据持久化的场景。
- 内存模式 (
-
H2 控制台安全
- 在生产环境中,务必将
spring.h2.console.enabled设置为false,或限制访问权限,防止未授权访问。
- 在生产环境中,务必将
-
数据库初始化顺序
schema.sql先执行,用于创建表结构。data.sql后执行,用于插入数据。- 确保 SQL 脚本中的表名和字段名与实体类及配置一致。
-
MyBatis-Plus 配置
- 确保
mybatis-plus.mapper-locations指向正确的 Mapper XML 文件路径(如果使用 XML)。 - 使用
map-underscore-to-camel-case: true可实现数据库字段与 Java 实体类属性的自动映射(如user_name映射为userName)。
- 确保
-
日志输出
- 配置
mybatis-plus.configuration.log-impl可以输出执行的 SQL 语句,便于调试。
- 配置
九、总结
通过以上步骤,您已成功在 Spring Boot 3 项目中集成了 H2 内存数据库,并结合 MyBatis-Plus 实现了数据库的初始化与基本操作。H2 数据库的轻量级和易用性使其成为开发和测试环境中的理想选择。结合 MyBatis-Plus 的强大功能,可以大幅提升开发效率,简化数据库操作。
提示: 在实际生产环境中,建议使用更为稳定和功能丰富的数据库(如 MySQL、PostgreSQL 等),H2 更适合开发和测试用途。
216

被折叠的 条评论
为什么被折叠?



