You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring中如何通过Post请求将用户数据保存至数据库?

如何在Spring中通过Post请求实现用户数据入库

你的疑问

我希望通过Post请求传入数据并将用户保存到数据库,但不清楚完成以下步骤后的后续流程:1. 创建API端点控制器;2. 创建DAO进行类抽象;3. 实现DAO;4. 创建带自有字段的请求体。Spring保存简单数据是否真的这么复杂?基础步骤是什么?如何实现?我已连接数据库。

核心结论

Spring保存简单数据并不复杂,你之前手动实现DAO的方式属于传统写法,利用Spring Data JPA可以大幅简化流程,无需手写数据库操作逻辑。以下是修正后的完整实现方案:


基础实现步骤

  1. 定义实体类(与数据库表映射)
  2. 创建Spring Data JPA Repository接口(自动实现CRUD操作,替代手动DAO)
  3. 定义请求DTO(接收前端传入的参数)
  4. 编写控制器,处理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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 12:51:06