Spring中如何通过Post请求将用户数据保存至数据库?
如何在Spring中通过Post请求实现用户数据入库
你的疑问
我希望通过Post请求传入数据并将用户保存到数据库,但不清楚完成以下步骤后的后续流程:1. 创建API端点控制器;2. 创建DAO进行类抽象;3. 实现DAO;4. 创建带自有字段的请求体。Spring保存简单数据是否真的这么复杂?基础步骤是什么?如何实现?我已连接数据库。
核心结论
Spring保存简单数据并不复杂,你之前手动实现DAO的方式属于传统写法,利用Spring Data JPA可以大幅简化流程,无需手写数据库操作逻辑。以下是修正后的完整实现方案:
基础实现步骤
- 定义实体类(与数据库表映射)
- 创建Spring Data JPA Repository接口(自动实现CRUD操作,替代手动DAO)
- 定义请求DTO(接收前端传入的参数)
- 编写控制器,处理Post请求,完成DTO到实体类的转换并调用Repository入库
修正后的完整代码
1. 实体类(与数据库表映射)
保留你原有的实体类即可,它已经通过JPA注解完成了与users表的映射:
package phcare_project.entity; import jakarta.persistence.*; @Entity @Table(name="users") public class UserE { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="id") private int id; @Column(name="firstName") private String firstName; @Column(name="lastName") private String lastName; @Column(name="pwz_number") private int pwz_number; @Column(name="city") private String city; public UserE(int id, String firstName, String lastName, int pwz_number, String city) { this.id = id; this.firstName = firstName; this.lastName = lastName; this.pwz_number = pwz_number; this.city = city; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public int getPwz_number() { return pwz_number; } public void setPwz_number(int pwz_number) { this.pwz_number = pwz_number; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public UserE() {} }
2. Spring Data JPA Repository(替代手动DAO)
创建一个接口继承JpaRepository,Spring会自动生成代理类实现所有CRUD操作,无需手写DAO实现:
package phcare_project.repository; import org.springframework.data.jpa.repository.JpaRepository; import phcare_project.entity.UserE; // JpaRepository<实体类类型, 主键数据类型> public interface UserRepository extends JpaRepository<UserE, Integer> { // 如需自定义查询,直接写方法签名即可,Spring会自动生成SQL(比如findByFirstName(String name)) }
3. 请求DTO(扩展支持更多字段)
如果需要接收完整的用户信息,扩展你的DTO类:
package phcare_project.dto; public class CreateUserRequest { private String firstName; private String lastName; private int pwz_number; private String city; public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public int getPwz_number() { return pwz_number; } public void setPwz_number(int pwz_number) { this.pwz_number = pwz_number; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } }
4. 控制器(处理Post请求)
注入UserRepository,启用Post接口,完成参数转换与入库:
package phcare_project.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import phcare_project.dto.CreateUserRequest; import phcare_project.entity.UserE; import phcare_project.repository.UserRepository; @RestController public class UserController { // 类名首字母大写符合Java规范 private final UserRepository userRepository; // 构造方法注入(Spring推荐的依赖注入方式) @Autowired public UserController(UserRepository userRepository) { this.userRepository = userRepository; } @GetMapping("/hello") public String helloUser() { // 方法名小驼峰规范 return "Hello from phcare"; } @PostMapping("/createUser") public String createUser(@RequestBody CreateUserRequest request) { // 将DTO转换为实体类 UserE user = new UserE(); user.setFirstName(request.getFirstName()); user.setLastName(request.getLastName()); user.setPwz_number(request.getPwz_number()); user.setCity(request.getCity()); // 调用Repository的save方法完成入库 userRepository.save(user); return "Zapisano użytkownika: " + request.getFirstName() + " " + request.getLastName(); } }
关键说明
- Spring Data JPA的
JpaRepository已经封装了save、findById、findAll等常用CRUD方法,无需手动编写JDBC或SQL代码 - 实体类通过JPA注解自动与数据库表映射,Spring会自动生成对应的SQL语句
- 控制器只需要处理请求参数的转换,调用Repository的方法即可完成数据持久化
内容的提问来源于stack exchange,提问作者suer231232131133
相关产品推荐
相关产品推荐

