在上一篇文章中,我们讨论了如何配置数据源,以便让Spring Boot能够连接到数据库。在这篇文章中,我们将专注于如何在Spring Boot项目中实现数据库操作。我们将使用Spring Data JPA来简化数据库交互,并通过示例代码演示CRUD(创建、读取、更新、删除)操作。
项目结构
在开始之前,确保您的项目结构如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| 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;
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操作。
1 2 3 4 5 6 7 8 9 10
| 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请求并进行相应的数据库操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| 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(); }
@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进行测试:
- 创建用户:
1
| curl -X POST -H "Content-Type: application/json" -d '{"name": "John Doe"}' http://localhost:8080/users
|
- 获取所有用户:
1
| curl http://localhost:8080/users
|
- 根据ID获取用户:
1
| curl http://localhost:8080/users/1
|
- 更新用户信息:
1
| curl -X PUT -H "Content-Type: application/json" -d '{"name": "Jane Doe"}' http://localhost:8080/users/1
|
- 删除用户:
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简介。