以下是一个Spring Boot应用程序,集成H2数据库实现数据的存储和查询。我们将使用Spring Data JPA模块来实现这个示例。
创建Spring Boot项目
首先,确保你在项目的pom.xml
文件中添加了以下依赖:
<dependencies>
<!-- Spring Boot Starter Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- H2 Database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.12.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
配置H2数据库
在项目的application.properties
文件中添加H2数据库相关的配置:
spring:
datasource:
# AUTO_SERVER=TRUE 启动自动混合模式,允许开启多个连接,该参数不支持在内存中运行模式
url: jdbc:h2:file:./testdb;AUTO_SERVER=TRUE
driverClassName: org.h2.Driver
username: sa
password:
schema: classpath:schema.sql
# 执行脚本的模式 三种:always 为始终执行初始化,embedded 只初始化内存数据库(默认值),如h2等,never为不执行初始化
initialization-mode: always
h2:
console:
# H2 数据库有一个嵌入式 Web 控制台,用于浏览数据库内容和运行 SQL 查询
enabled: true
path: /h2-console
settings:
# h2 web consloe就可以在远程访问了。否则只能在本机访问。
web-allow-others: false
jpa:
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
properties:
hibernate:
show_sql: true
创建表结构和索引
在项目的schema.sql
文件中添加表结构和索引:
DROP TABLE IF EXISTS t_user;
create table t_user
(
id int auto_increment not null,
name varchar(255),
age int,
remark CLOB
);
create index index_t_user_id on t_user (id);
创建实体类
创建一个实体类,它将映射到H2数据库中的表:
package com.example.h2demo.model;
import javax.persistence.*;
@Entity
@Table(name = "t_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;
@Column(name = "remark")
private String remark;
// Getters and setters
public Long getId() {
return id;
}
public void setId(Long 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 getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
创建Repository接口
创建一个Spring Data JPA repository接口:
package com.example.h2demo.repository;
import com.example.h2demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
创建服务层
创建一个服务层来封装业务逻辑:
package com.example.h2demo.service;
import com.example.h2demo.model.User;
import com.example.h2demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User saveUser(User user) {
return userRepository.save(user);
}
public Optional<User> getUserById(Long id) {
return userRepository.findById(id);
}
public List<User> getAllUsers() {
return userRepository.findAll();
}
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}
创建控制器
创建一个控制器来处理HTTP请求:
package com.example.h2demo.controller;
import com.example.h2demo.model.User;
import com.example.h2demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public User saveUser(@RequestBody User user) {
return userService.saveUser(user);
}
@GetMapping("/{id}")
public Optional<User> getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}
@DeleteMapping("/{id}")
public String deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
return "User deleted successfully!";
}
}
Spring Boot 主类
创建Spring Boot应用程序的主类:
package com.example.h2demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class H2DemoApplication {
public static void main(String[] args) {
SpringApplication.run(H2DemoApplication.class, args);
}
}
运行应用程序
启动Spring Boot应用程序。你可以通过访问以下URL来打开H2控制台:
http://localhost:8080/h2-console
使用jdbc:h2:file:./testdb;AUTO_SERVER=TRUE
作为JDBC URL,用户名为sa
,密码为空进行登录。
然后,你可以使用Postman或其他HTTP客户端来测试API:
-
存储数据:
POST http://localhost:8080/users Body: { "name": "John", "age": 30 }
-
查询数据:
GET http://localhost:8080/users/{id}
-
查询所有数据:
GET http://localhost:8080/users
-
删除数据:
DELETE http://localhost:8080/users/{id}
解释
-
依赖管理:
- 使用Spring Boot Starter Data JPA简化数据访问和持久化操作。
- 使用Spring Boot Starter Web简化Web应用开发。
- 使用H2数据库依赖库。
-
配置:
- 在
application.properties
中指定H2数据库的连接信息和JPA的相关配置。 - 启用H2控制台。
- 在
-
实体类:
- 创建一个简单的
User
类,并使用@Entity
注解将其映射到数据库表。
- 创建一个简单的
-
Repository接口:
- 使用Spring Data JPA repository接口简化数据访问操作。
-
服务层:
- 封装业务逻辑,提供数据存储和查询的高层接口。
-
控制器:
- 处理HTTP请求,提供RESTful API进行数据存储和查询。
通过这个示例,你可以轻松地使用Spring Boot集成H2数据库来实现数据的存储和查询功能。