专栏目录

Java后端学习日记(一):第一个Springboot应用——Hello World!

Java后端学习日记(二):POJO的基本概念,编写,转化和简化

Java后端学习日记(三):Springboot整合Mybatis-Plus

Java后端学习日记(四):Springboot 2.X 整合Redis作为数据缓存

Java后端学习日记(五):Springboot使用@ControllerAdvice捕获和处理异常


项目源码同步更新中

前言

上一期我们了解了 Springboot 中 Hello World 的实现方式,这一期我们来了解一下POJO的基本概念,编写,转化和简化

POJO,即 “Plain Ordinary Java Object” ,指简单普通的java对象。主要用来指代那些没有遵循特定的java对象模型,约定或者框架的对象。

导航

  • 专栏目录
  • 前言
  • 一、POJO介绍
  • 二、编写POJO
  • 三、转化
    • 1. POJO之间的转化
    • 2. POJO与JSON之间的转化
  • 四、简化POJO

一、POJO介绍

一个常见的POJO是这样的;

public class StudentTestVo {private String name;private long id;private int grade;public String getName() {return name;}public void setName(String name) {this.name = name;}public long getId() {return id;}public void setId(long id) {this.id = id;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}//equals、hashCode和toString省略...
}

可以看出,一个POJO的基本构成就是私有字段+构造方法+get+set+equals+hashCode+toString方法,没有任何业务逻辑在里面,非常纯净

这样的结构与Java Bean有些相似,不过POJO和Java Bean还是有区别的,见:java对象 POJO和JavaBean的区别

一个POJO在不同的场景下又可以分为PO、DO、DTO、VO等对象,他们的概念见:PO,BO,VO和POJO的区别

二、编写POJO

如上面展示的代码所示,一个POJO应只有私有字段+构造方法+get+set+equals+hashCode+toString方法,若一个对象的字段多了岂不是要一个个的编写每个字段的get和set方法?非也

在IDEA中,我们可以在一个定义好字段的POJO类中,按alt+insert快捷键,调出如图所示的generate,选择getter and setter,再选择需要生成get/set方法的字段,点击确定就可以自动生成getter和setter了()

三、转化

1. POJO之间的转化

我们知道,POJO在特定场景中可以细分为不同的对象,执行不同的职能

倘若我从数据表user中拿出了一个PO对象UserPO,里面不止包含用户名,用户简介等不敏感字段,还包含用户密码等敏感字段或者是前端不想要的字段,如何进行转化呢?

我们可以创建一个不包含前端不想要的字段的POJO对象,因为是传给前端的对象,所以是VO,可以命名为UserVO

那么,怎么转化这样的对象呢?难道一行一行地调用get/set吗

public void test(UserPO userPO){UserVO userVO = new UserVO();userVO.setUserName(userPO.getUserName());userVO.setProfile(userPO.getProfile());...//以下省略n行
}

是不是看着很烦

这里我们借助Spring的BeanUtils,可以将对象A和对象B中有交集的字段进行传输

public void test(UserPO userPO){UserVO userVO = new UserVO();BeanUtils.copyProperties(userPO,userVO);
}

只需要一行BeanUtils.copyProperties(Object source, Object target),就可以解决对象赋值/POJO转化中要重复编写get/set的繁琐操作,前提是被传入copyProperties的两个对象的字段都必须实现get/set方法(如果你不希望你想传输的字段传不过去)

2. POJO与JSON之间的转化

我们应知道,使用JSON格式传输数据是前后端之间交流的重要手段,要实现POJO与JSON之间的互相转化,需要添加依赖

这里我使用阿里的fastjson,是一个常用的JSON<=>POJO的转化工具

在pom.xml中添加依赖:

        <!-- 引入 fastjson 依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency>

POJO转为JSON-使用例:

    @GetMapping("/ptj")public String POJOToJson(){StudentTestVo studentTest = new StudentTestVo();studentTest.setName("yuc");studentTest.setId(1001L);studentTest.setGrade(100);return JSON.toJSONString(studentTest);}

运行结果:

JSON转为POJO-使用例

    @GetMapping("/jtp")public String jsonToPOJO(){String jsonStr = "{\"grade\":100,\"id\":1001,\"name\":\"yuc\"}";return JSONObject.parseObject(jsonStr,StudentTestVo.class).toString();}

结果:


fastjson中还有很多的api,可自行探索

四、简化POJO

即使IDEA中有一键生成get/set方法,但是在开发阶段,有需求变动时就要对POJO的字段进行增删,还要修改equals、hashCode和toString方法,还是有点麻烦,为了对这些繁琐的操作进行简化,我们引入Lombok,在pom.xml中引入依赖如下

        <!-- 引入lombok依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.6</version></dependency>

关于Lombok的注解使用可以参考这篇:lombok注解介绍

我们在原本复杂的POJO中,在类名之上加上注解@Data

@Data
public class StudentTestVo {private String name;private long id;private int grade;}

这样,这个类就自动拥有了:get+set+equals+hashCode+toString方法,如图

注:@Data所包含的@EqualsAndHashCode(callSuper = false)的callSuper字段默认是false

这时候生成的equals()方法只会比较子类的属性,不会考虑从父类继承的属性,无论父类属性访问权限是否开放,这就可能得到意想不到的结果。

所以在对拥有继承关系的类使用lombok的@Data时,需要添加@EqualsAndHashCode(callSuper = true)

Java后端学习日记(二):POJO的基本概念,编写,转化和简化相关推荐

  1. 大学四年Java后端学习路线规划,所有私藏资料我都贡献出来了,不看毕业肯定后悔!!!

    一定要走在学校前面自学,规划好自己的时间,按照自己的路线走. 大学四年Java后端学习路线规划,所有私藏资料我都贡献出来了,不看毕业肯定后悔!!! 学习路线与资源方法 一.第一件事,很重要!!! 二. ...

  2. Java多线程学习(二)synchronized关键字(1)

    转载请备注地址: https://blog.csdn.net/qq_34337272/article/details/79655194 Java多线程学习(二)将分为两篇文章介绍synchronize ...

  3. 【java后端学习路线3】SSM+Linux+Git学习指南,985本海硕自学转码

    JAVA后端学习路线 路线总览 javase->Mysql->计算机网络->JavaWeb->Maven(1)->Spring->SpringMVC->Myb ...

  4. Java后端学习框架(2020)

    Java后端学习整体框架 本博客附上整个java后端学习的整体框架图(图片所属权归属于B站Up主CodeSheep),非常适合学习java后端的同学们查漏补缺,查看自己有无遗漏和没有学到的地方. 在这 ...

  5. Java后端学习路线分享

    Java后端学习路线?最近有些网友问我如何学习 Java 后端,还有些是想从别的方向想转过来,但都不太了解 Java 后端究竟需要学什么,究竟要从哪里学起,哪些是主流的 Java 后端技术等等,导致想 ...

  6. Java后端学习笔记 -- JavaWeb(二):JavaScript

    写在开头:本文是学习Java后端开发的个人笔记,便于自己复习.文章内容引用了尚硅谷的javaweb教学,有兴趣的朋友可以上B站搜索. JavaScript     Ⅰ JavaScript介绍     ...

  7. Java后端学习路线(校招前准备)

    Java学习规划 推荐学习网站:CS-Notes 求职目标: 要选择一二线大厂的话,比较注重基础,如果是其他互联网公司,比较注重语言和框架,因为招了人之后要上手做项目. 学习理论: 一.并发: 推荐& ...

  8. Java基础学习笔记(二)_Java核心技术(进阶)

    本篇文章的学习资源来自Java学习视频教程:Java核心技术(进阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...

  9. 小白自学Java后端学习计划(附带学习视频)

    项目交流群 QQ群: 994793967 ,欢迎进群交流讨论 一.Java基础 java基础语法 集合 io 多线程 并发 反射 网络编程 注意:对于Java基础,其中集合和io是初学Java后端的时 ...

最新文章

  1. sklearn决策树模型机器学习参数解释很详细中文
  2. C语言的指针、链表的原理和各类操作
  3. linux 系统中 /etc/passwd 和 /etc/shadow文件详解
  4. php 模板使用,TMDPHP 模板引擎使用教程
  5. 高并发Web服务的演变:节约系统内存和CPU
  6. 回到顶部JavaScript实现
  7. android numberpicker,NumberPicker实现滑动选择
  8. 计算机机房用发电机组,应急康明斯计算机机房用发电机组怎么选有窍门
  9. mysql一秒查询次数_单个select语句实现MySQL查询统计次数
  10. PostgreSQL 存储过程(Procedures)和函数(Functions)的区别
  11. 转:计算机视觉专业词汇(中英文对照)
  12. 图解算法:八大排序算法
  13. uniapp中使用moment.js日期插件
  14. 如何生成WIFI二维码供手机扫一扫连接WIFI
  15. 英文连写字体怎么练_漂亮的英语字体是这样练成的!!
  16. b站网页版改html,网页版b站怎么设置弹幕?网页bilibili怎么设置停止播放和调倍速?...
  17. The Recent Ten Years
  18. json to excel java_java解析json生成excel
  19. 注释、标识符、关键字、数据类型、类型转换
  20. C++语言书写一个程序oct2dec,输入为整数的八进制,输出为其十进制。以下是程序的结果

热门文章

  1. [pie+libc]national2021_pwny
  2. 复数四则运算(PTA)
  3. 16种重要编程语言概览
  4. Failed to validate connection
  5. Garuda Linux配置
  6. Struts2框架安全缺陷
  7. makefile脚本
  8. 甜橙金融敏捷实践之路--运营一体化平台
  9. AIOps浅谈《人工智能专栏里》
  10. 死磕Nginx系列转载