form表达和实体类通常有什么不同

form表达和实体类通常有什么不同

在 Java 开发(特别是 Spring Boot + 前后端分离 的场景)里,Form实体类(Entity/DO) 看起来很像,都是一堆字段,但它们的职责和使用场景完全不同。

1. Form(表单对象)

  • 位置 :通常放在 controller/form 包下。

  • 作用:接收前端传来的请求参数。

  • 特点

    • 只包含和前端交互需要的字段。

    • 通常带有校验注解(@NotNull, @Min, @Email 等)。

    • 不一定和数据库表一一对应。

    • 有时会是 前端表单的简化版

🔹 示例:

复制代码

@Data public class RegisterForm { @NotNull(message = "用户名不能为空") private String username; @NotNull(message = "密码不能为空") private String password; private String email; // 前端可能传,也可能不传 }


2. 实体类(Entity / DO, Data Object)

  • 位置 :通常放在 dao/entitydomain 包下。

  • 作用:对应数据库中的表,用于 ORM 框架(MyBatis、JPA 等)的持久化操作。

  • 特点

    • 字段通常和数据库表的字段 一一对应

    • 可能包含数据库自动生成的主键(id)、时间戳(createTime)、逻辑删除标志(deleted)等。

    • 不直接暴露给前端。

🔹 示例:

复制代码

@Data public class UserEntity { private Long id; // 主键 private String username; private String password; private String email; private LocalDateTime createTime; private LocalDateTime updateTime; private Boolean deleted; // 逻辑删除 }


3. 区别总结

对比点 Form(表单对象) 实体类(Entity/DO)
来源 前端提交的数据 数据库表结构
字段 前端需要什么就定义什么 与数据库字段保持一致
注解 常用 @NotNull, @Min 等校验注解 常用 @TableName, @Column, @Id(JPA/MyBatis)
作用 参数接收、校验 数据存储、ORM映射
是否一一对应数据库表 ❌ 不一定 ✅ 通常一一对应

4. 为什么要分开?

  • 安全性:表单对象不一定包含敏感字段(例如密码加密后的值、数据库内部 ID)。

  • 灵活性:前端需要的字段和数据库结构可能不一致,Form 可以裁剪/组合。

  • 职责清晰:Controller 负责接收请求(Form),Service/DAO 负责存取数据库(Entity)。


👉 举个小例子:

  • 前端注册时提交:
复制代码

{ "username": "zhangsan", "password": "123456", "email": "zs@test.com" }

  • 后端 RegisterForm 接收并校验数据。

  • Service 层把 RegisterForm 转换成 UserEntity,补充 UUID、创建时间等。

  • DAO 层用 UserEntity 操作数据库。

相关推荐
梵得儿SHI5 分钟前
Java 反射机制深度解析:从运行时 “解剖” 类的底层逻辑
java·开发语言·反射·反射机制·private·类成员·反射的三大核心功能
豆沙沙包?11 分钟前
2025年--Lc188--931. 下降路径最小和(多维动态规划,矩阵)--Java版
java·矩阵·动态规划
JAVA学习通20 分钟前
Spring AI 1.0 GA 深度解析:Java生态的AI革命已来
java·人工智能·spring·springai
黄焖鸡能干四碗44 分钟前
MES生产执行制造系统建设(Java+Mysql)
java·大数据·开发语言·信息可视化·需求分析
舒克日记1 小时前
基于springboot的民谣网站的设计与实现
java·spring boot·后端
凤山老林3 小时前
新一代Java应用日志可视化与监控系统开源啦
java·后端·开源
流星白龙3 小时前
【Qt】7.信号和槽_connect函数用法(2)
java·数据库·qt
黎宇幻生7 小时前
Java全栈学习笔记39
java·笔记·学习
Aurorar0rua7 小时前
C Primer Plus Notes 09
java·c语言·算法
nongcunqq8 小时前
abap 操作 excel
java·数据库·excel