JAVA 中 VO 实体类是什么意思,为什么要做这个

Java VO 实体类

VO = View Object,视图对象 简单一句话:给前端页面/接口返回数据用的实体,专门用来封装要展示给页面的数据。

配套常一起出现的几个,一次性分清:

  • PO / Entity:数据库实体,和数据库表一一对应(字段和表列基本一样)
  • DTO:Data Transfer Object,数据传输对象,跨层之间传数据(服务之间、controller ↔ service)
  • VO :View Object,返回给前端的对象

VO 是干嘛的?举个例子

数据库实体(Entity/PO,对应user表)

java 复制代码
// 数据库实体,里面有敏感字段
public class UserEntity {
    private Long id;
    private String username;
    private String password;  // 密码!不能返回前端
    private String idCard;    // 身份证,敏感
    private String address;
}

直接把这个Entity丢给前端 → 重大问题:密码、身份证全部返回接口,安全泄露!

于是新建 UserVO:

java 复制代码
// VO:只放前端页面需要展示的字段
public class UserVO {
    private Long id;
    private String username;
    private String address;
    // 没有 password、idCard
}

controller层把Entity转换成VO,只把VO返回给前端。

✅ 为什么要单独写VO(核心目的)

  1. 安全:过滤敏感字段 数据库实体里的密码、手机号、身份证,不要暴露到接口返回。VO只保留页面需要的字段。

  2. 按需组装数据,和数据库解耦 数据库表结构改了,不一定影响前端;前端页面需要组合多张表的数据(用户信息+订单统计),可以在VO里合并字段,不需要去改数据库表。

    比如:用户页面需要展示【用户名 + 最近一次下单时间】,这是两张表,VO可以把这两个字段合并在一起。

  3. 字段适配前端 前端需要字段名不一样、或者需要格式化后的值(比如日期格式化、状态转文字:1=启用,0=禁用),可以直接放在VO。 例:数据库存 Integer status,VO增加 String statusText 给前端直接展示文字。

  4. 解耦,分层隔离 数据库层(Entity)、业务层、视图层(VO)分开。 数据库结构变动,尽量不影响前端接口;前端页面需求变动,尽量不动数据库实体。

❗容易踩的误区

  1. 很多小项目图省事,直接返回Entity给前端。 短期写得快;一旦字段多、有敏感信息,极易造成信息泄露(安全漏洞,属于live site issue风险)。
  2. VO不要加数据库注解(@TableName、@Column),VO不跟数据库打交道。
  3. VO一般只用来返回给前端;前端传过来的入参,一般用 DTO 或者 Query。

快速区分记忆

  • Entity(PO):对应数据库表,从库里拿数据
  • DTO:服务内部/服务之间传输
  • VO:返回前端页面展示

简单口诀: Entity映射表,DTO传业务,VO给前端。

举个流程

DB → Entity → Service组装 → 转VO → Controller → 返回JSON给前端

相关推荐
Aurorar0rua1 小时前
CS50 x 2024 Notes Python - 01
开发语言·python·学习方法
Baron X1 小时前
Eclipse Temurin 21 (JRE) Alpine 镜像获取、离线导入与推送操作
java·docker·eclipse·temurin
孙浩君2 小时前
我用 Spring Boot + xterm.js 写了个终端风格互动叙事游戏引擎:游戏即文件,上传一个 JSON 就能玩
java
jose2 小时前
URL 里多写了一个端口,为什么请求还能调通?
java·后端
孙浩君2 小时前
我用 Spring Boot 写了个「终端风格模拟经营游戏引擎」:引擎 + JSON 游戏文件,开箱即玩
java
茉莉玫瑰花茶2 小时前
GO [ 标准库 ]
开发语言·后端·golang
y1su2 小时前
Leetcode 动态规划 模板
java·数据结构·算法·leetcode·动态规划
半杯咖啡半行码2 小时前
C++11核心特性详解:从C++11到C++20 的现代C++指南
开发语言·c++
Wang's Blog2 小时前
Java 项目实战: 交友项目 - JWT 概述:为什么要用 Token 换掉 Session
java·ui·交友