java项目中POJO的理解(含实例)

1. 首先是百度百科的字面意思

在这里插入图片描述

2. POJO的类型分类

按阿里《Java开发手册--嵩山版》中POJO的解释为 专指只有 setter/getter/toString 的简单类,包括DO/DTO/BO/VO 等。
分别解释为:
在这里插入图片描述

个人理解需要注意的点:

  • XxxDO很多公司也用XxxPO(persistence object, 持久层对象)或XxxEntity来表示。类中都定义的是对应数据库中的字段
  • XxxVO不具体属于哪个层,而是POJO在数据传递中的数据形式。简而言之,就是接口之间传递的数据封装。
    表里面有十几个字段:id,name,gender(M/F),age……
    页面需要展示三个字段:name,gender(男/女),age
    VO由此产生,一是能提高数据传输的速度(减少了传输字段),二能隐藏后端表结构

下面一张关系图:
在这里插入图片描述

3. 对应的实例

所有例子使用lombok注解简化getter/setter方法

3.1 数据对象–XxxDO(PO、Entity)

  • DOPOEntity直接与表名一致无任何结尾(阿里是为DO为结尾)
  • Xxx 与数据库表名保持一致
  • 类中字段要与数据库字段保持一致,不能缺失或者多余
  • 类中的每个字段添加注释,并与数据库注释保持一致
  • 不允许有组合
  • 项目内的日期类型必须统一,建议使用 java.util.Date,java.sql.Timestamp,java.time.LocalDateTime 其中只一。
@Builder
@NoArgsConstructor
@Data
public class SysNoticeDo {
    /** 公告ID */
    private Long noticeId;

    /** 公告标题 */
    private String noticeTitle;

    /** 公告类型(1通知 2公告) */
    private String noticeType;

    /** 公告内容 */
    private String noticeContent;

    /** 公告状态(0正常 1关闭) */
    private String status;
}

3.2 传输对象–XxxDTO

  • 不可以继承自DO
  • DTO可以继承、组合其他DTOVOBO 等对象
  • DTO只能用于前端、RPC 的请求参数
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;

@Data
public class CreateOrUpdateBookDTO {

    @NotEmpty(message = "必须传入图书名")
    @Size(max = 50, message = "图书名不能超过50字符")
    private String title;

    @NotEmpty(message = "必须传入图书作者")
    @Size(max = 50, message = "图书作者名不能超过30字符")
    private String author;

    @NotEmpty(message = "必须传入图书综述")
    @Size(max = 1000, message = "图书综述不能超过1000字符")
    private String summary;

    @Size(max = 100, message = "图书插图的url长度必须在0~100之间")
    private String image;
}

3.3 业务对象–XxxBO

  • 不可以继承自DO
  • BO对象只能用于 servicemanagerdao 层,不得用于 controller
import lombok.Data;

@Data
public class FileBO {

    /**
     * 文件 id
     */
    private Integer id;

    /**
     * 文件 key,上传时指定的
     */
    private String key;

    /**
     * 文件路径
     */
    private String path;

    /**
     * 文件 URL
     */
    private String url;
}

3.4 视图对象–XxxVO

  • 不可继承自DO
  • VO 可以继承、组合其他DTOVOBO 等对象
  • VO 只能用于返回前端、rpc 的业务数据封装对象
@Data
public class CategoryVO implements Serializable {

    private Integer id;

    private String name;

    private Integer type;

    private Integer parentId;

    private Integer orderNum;

    private Date createTime;

    private Date updateTime;

    private List<CategoryVO> childCategory = new ArrayList<>();

}

3.5 数据查询对象–XxxQuery

  • Controller的请求参数
  • 也有项目用XxxRequest
/**
 * @author : Gangbb
 * @ClassName : ProductListQuery
 * @Description : 查询商品列表的Query
 * @Date : 2021/1/13 19:33
 */
public class ProductListQuery {

    private String keyword;

    private List<Integer> categoryIds;

    public String getKeyword() {
        return keyword;
    }

    public void setKeyword(String keyword) {
        this.keyword = keyword;
    }

    public List<Integer> getCategoryIds() {
        return categoryIds;
    }

    public void setCategoryIds(List<Integer> categoryIds) {
        this.categoryIds = categoryIds;
    }
}

  • 11
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值