18 Spring Boot与数据库集成之数据库操作示例
在上一篇文章中,我们讨论了如何配置数据源,以便让Spring Boot能够连接到数据库。在这篇文章中,我们将专注于如何在Spring Boot项目中实现数据库操作。我们将使用Spring Data JPA来简化数据库交互,并通过示例代码演示CRUD(创建、读取、更新、删除)操作。
项目结构
在开始之前,确保您的项目结构如下所示:
my-spring-boot-app
│
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ ├── demo
│ │ │ │ ├── DemoApplication.java
│ │ │ │ ├── entity
│ │ │ │ │ └── User.java
│ │ │ │ ├── repository
│ │ │ │ │ └── UserRepository.java
│ │ │ │ └── controller
│ │ │ │ └── UserController.java
│ │ └── resources
│ │ └── application.properties
└── ...
实体类
首先,我们需要创建一个实体类来映射数据库中的表。这里我们以User
实体为例,它将包含用户的id和name。
// src/main/java/com/example/demo/entity/User.java
package com.example.demo.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// 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;
}
}
在上述代码中,我们使用了@Entity
注解来指示这是一个JPA实体类,@Id
表示这是主键,@GeneratedValue
表示主键的生成策略。
创建Repository接口
接下来,我们需要创建一个UserRepository
接口,继承自Spring Data JPA的JpaRepository
,以便我们能够进行CRUD操作。
// src/main/java/com/example/demo/repository/UserRepository.java
package com.example.demo.repository;
import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
通过继承JpaRepository
,我们可以利用JPA提供的多种方法,例如save()
, findAll()
, findById()
, deleteById()
等。
创建Controller
现在,我们来创建一个控制器,以处理用户的HTTP请求并进行相应的数据库操作。
// src/main/java/com/example/demo/controller/UserController.java
package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserRepository userRepository;
// 创建用户
@PostMapping
public User createUser(@RequestBody User user) {
return userRepository.save(user);
}
// 获取所有用户
@GetMapping
public List<User> getAllUsers() {
return userRepository.findAll();
}
// 根据ID获取用户
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
Optional<User> user = userRepository.findById(id);
return user.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
}
// 更新用户
@PutMapping("/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User userDetails) {
Optional<User> userOptional = userRepository.findById(id);
if (!userOptional.isPresent()) {
return ResponseEntity.notFound().build();
}
User user = userOptional.get();
user.setName(userDetails.getName());
User updatedUser = userRepository.save(user);
return ResponseEntity.ok(updatedUser);
}
// 删除用户
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
if (!userRepository.existsById(id)) {
return ResponseEntity.notFound().build();
}
userRepository.deleteById(id);
return ResponseEntity.noContent().build();
}
}
在上述代码中,我们创建了一个RESTful API来处理用户数据。监听的路由是/users
,我们提供了创建、查询、更新和删除用户的功能。
测试接口
为了验证我们的接口是否正常工作,可以使用工具如Postman或curl进行测试:
- 创建用户:
curl -X POST -H "Content-Type: application/json" -d '{"name": "John Doe"}' http://localhost:8080/users
- 获取所有用户:
curl http://localhost:8080/users
- 根据ID获取用户:
curl http://localhost:8080/users/1
- 更新用户信息:
curl -X PUT -H "Content-Type: application/json" -d '{"name": "Jane Doe"}' http://localhost:8080/users/1
- 删除用户:
curl -X DELETE http://localhost:8080/users/1
小结
在本篇文章中,我们深入探讨了如何使用Spring Boot和Spring Data JPA创建数据库操作示例。我们创建了一个User
实体类及其对应的Repository和Controller,使我们能够方便地执行CRUD操作。下篇文章我们将介绍Spring Boot的安全性以及如何通过Spring Security来保护我们的应用程序。这将为我们搭建安全的Web服务奠定基础。
接下来,让我们一起看看Spring Security简介。