SpringBoot中CRUD与RESTful讲解

理解 CRUD 和 RESTful 是掌握 Spring Boot 开发的关键。可以把它们想象成“做什么”和“怎么做”的关系。

下面我用通俗的方式帮你理清这两个概念,并展示它们在 Spring Boot 中是如何结合的。


一、什么是 CRUD?

CRUD 是计算机编程中最基本的四个操作,无论什么软件系统,本质上都是在处理数据的这四个动作:

字母操作含义HTTP方法
CCreate创建/新增数据POST
RRead读取/查询数据GET
UUpdate更新/修改数据PUT / PATCH
DDelete删除数据DELETE

简单说,CRUD 定义了“我们要对数据做什么”


二、什么是 RESTful?

RESTful 是一种API 的设计风格(规范),它告诉我们应该如何组织 URL 的结构如何利用 HTTP 方法,让接口变得清晰、统一、易于理解。

RESTful 的核心思想:

  • 把一切数据都看作“资源”(比如用户、订单、商品)

  • 每个资源对应一个唯一的 URL 地址

  • 通过 HTTP 方法(GET/POST/PUT/DELETE)来区分对该资源的操作

非 RESTful 风格(不推荐):

text

POST   /user/create          // 创建用户
GET    /user/delete?id=1     // 删除用户(用 GET 不安全)
POST   /user/update          // 更新用户
GET    /user/query?id=1      // 查询用户

这种方式 URL 很随意,动作写在路径里,方法乱用。

RESTful 风格(推荐):

text

POST   /users        // 创建用户
GET    /users        // 查询所有用户
GET    /users/1      // 查询 id=1 的用户
PUT    /users/1      // 更新 id=1 的用户
DELETE /users/1      // 删除 id=1 的用户

你看,URL 只表示资源(名词)HTTP 方法表示操作(动词),结构清晰,一看就懂。


三、CRUD 和 RESTful 的关系

它们经常一起出现,但层次不同:

  • CRUD 是业务层面的四个基础操作,与具体技术无关

  • RESTful 是接口设计层面的规范,告诉你怎么用 HTTP 来暴露 CRUD 操作

一句话总结:用 RESTful 风格设计 API 来对外提供 CRUD 功能。


四、在 Spring Boot 中实现 RESTful CRUD

在 Spring Boot 中,我们通过 @RestController 和一系列注解来快速实现。

假设我们有一个“用户”资源,对应的实体类 User 和 Service 层已准备好,Controller 层代码如下:

java

@RestController  // 标记为控制器,返回 JSON 数据
@RequestMapping("/users")  // 资源路径的根路径
public class UserController {

    @Autowired
    private UserService userService;

    // C - Create:创建用户
    @PostMapping
    public User create(@RequestBody User user) {
        return userService.save(user);
    }

    // R - Read:查询所有用户
    @GetMapping
    public List<User> list() {
        return userService.findAll();
    }

    // R - Read:查询单个用户
    @GetMapping("/{id}")
    public User getById(@PathVariable Long id) {
        return userService.findById(id);
    }

    // U - Update:更新用户
    @PutMapping("/{id}")
    public User update(@PathVariable Long id, @RequestBody User user) {
        return userService.update(id, user);
    }

    // D - Delete:删除用户
    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id) {
        userService.deleteById(id);
    }
}
注解说明:
  • @PostMapping = @RequestMapping(method = RequestMethod.POST)

  • @GetMapping = @RequestMapping(method = RequestMethod.GET)

  • @PutMapping = @RequestMapping(method = RequestMethod.PUT)

  • @DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)

@PathVariable 用来接收 URL 路径中的 {id} 参数。


五、常见问题与补充

1. PUT 和 POST 有什么区别?
  • POST 用于新增,通常不指定具体 ID,由服务端生成

  • PUT 用于更新,通常 URL 中会带具体 ID,且要求资源存在(有些设计也允许 PUT 做新增)

2. 如果只想更新部分字段怎么办?

可以用 PATCH 方法,对应 @PatchMapping,但实际项目中很多人仍用 PUT 传整个对象。

3. 返回值怎么设计?

RESTful 通常建议返回:

  • 创建成功 → 返回 201 Created 状态码,并在响应头 Location 中带上新资源的 URL

  • 删除成功 → 返回 204 No Content

  • 查询成功 → 返回 200 OK 和数据

Spring Boot 中可以配合 ResponseEntity 来精细控制状态码。


六、总结

概念核心点比喻
CRUD数据的四个基本操作(增删改查)像是“洗菜、切菜、炒菜、装盘”这些厨房基本功
RESTfulAPI 的设计规范(资源定位 + HTTP 方法语义)像是“菜单怎么写、每道菜怎么点”的餐厅规范
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值