Java后端学习日记(二):POJO的基本概念,编写,转化和简化
专栏目录
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的基本概念,编写,转化和简化相关推荐
- 大学四年Java后端学习路线规划,所有私藏资料我都贡献出来了,不看毕业肯定后悔!!!
一定要走在学校前面自学,规划好自己的时间,按照自己的路线走. 大学四年Java后端学习路线规划,所有私藏资料我都贡献出来了,不看毕业肯定后悔!!! 学习路线与资源方法 一.第一件事,很重要!!! 二. ...
- Java多线程学习(二)synchronized关键字(1)
转载请备注地址: https://blog.csdn.net/qq_34337272/article/details/79655194 Java多线程学习(二)将分为两篇文章介绍synchronize ...
- 【java后端学习路线3】SSM+Linux+Git学习指南,985本海硕自学转码
JAVA后端学习路线 路线总览 javase->Mysql->计算机网络->JavaWeb->Maven(1)->Spring->SpringMVC->Myb ...
- Java后端学习框架(2020)
Java后端学习整体框架 本博客附上整个java后端学习的整体框架图(图片所属权归属于B站Up主CodeSheep),非常适合学习java后端的同学们查漏补缺,查看自己有无遗漏和没有学到的地方. 在这 ...
- Java后端学习路线分享
Java后端学习路线?最近有些网友问我如何学习 Java 后端,还有些是想从别的方向想转过来,但都不太了解 Java 后端究竟需要学什么,究竟要从哪里学起,哪些是主流的 Java 后端技术等等,导致想 ...
- Java后端学习笔记 -- JavaWeb(二):JavaScript
写在开头:本文是学习Java后端开发的个人笔记,便于自己复习.文章内容引用了尚硅谷的javaweb教学,有兴趣的朋友可以上B站搜索. JavaScript Ⅰ JavaScript介绍 ...
- Java后端学习路线(校招前准备)
Java学习规划 推荐学习网站:CS-Notes 求职目标: 要选择一二线大厂的话,比较注重基础,如果是其他互联网公司,比较注重语言和框架,因为招了人之后要上手做项目. 学习理论: 一.并发: 推荐& ...
- Java基础学习笔记(二)_Java核心技术(进阶)
本篇文章的学习资源来自Java学习视频教程:Java核心技术(进阶)_华东师范大学_中国大学MOOC(慕课) 本篇文章的学习笔记即是对Java核心技术课程的总结,也是对自己学习的总结 文章目录 Jav ...
- 小白自学Java后端学习计划(附带学习视频)
项目交流群 QQ群: 994793967 ,欢迎进群交流讨论 一.Java基础 java基础语法 集合 io 多线程 并发 反射 网络编程 注意:对于Java基础,其中集合和io是初学Java后端的时 ...
最新文章
- sklearn决策树模型机器学习参数解释很详细中文
- C语言的指针、链表的原理和各类操作
- linux 系统中 /etc/passwd 和 /etc/shadow文件详解
- php 模板使用,TMDPHP 模板引擎使用教程
- 高并发Web服务的演变:节约系统内存和CPU
- 回到顶部JavaScript实现
- android numberpicker,NumberPicker实现滑动选择
- 计算机机房用发电机组,应急康明斯计算机机房用发电机组怎么选有窍门
- mysql一秒查询次数_单个select语句实现MySQL查询统计次数
- PostgreSQL 存储过程(Procedures)和函数(Functions)的区别
- 转:计算机视觉专业词汇(中英文对照)
- 图解算法:八大排序算法
- uniapp中使用moment.js日期插件
- 如何生成WIFI二维码供手机扫一扫连接WIFI
- 英文连写字体怎么练_漂亮的英语字体是这样练成的!!
- b站网页版改html,网页版b站怎么设置弹幕?网页bilibili怎么设置停止播放和调倍速?...
- The Recent Ten Years
- json to excel java_java解析json生成excel
- 注释、标识符、关键字、数据类型、类型转换
- C++语言书写一个程序oct2dec,输入为整数的八进制,输出为其十进制。以下是程序的结果