当前位置: 首页 > news >正文

浅绿色网站模板王野苏婉卿

浅绿色网站模板,王野苏婉卿,厦门网站建设 孚珀科技,织梦生成手机网站关于在集合中对象比较属性值的问题1 问题说明2 问题排查3 总结及伪代码楼主在最近遇到一个场景,项目中有一个校验。 需要将数据库查询的集合对象与前端传递的集合对象进行比较,看数据是否被修改。 1 问题说明 基于上面项目需求,项目为较老的…

关于在集合中对象比较属性值的问题

  • 1 问题说明
  • 2 问题排查
  • 3 总结及伪代码

楼主在最近遇到一个场景,项目中有一个校验。 需要将数据库查询的集合对象与前端传递的集合对象进行比较,看数据是否被修改。

1 问题说明

基于上面项目需求,项目为较老的传统项目,没使用Lombok插件(划重点),实体类和DTO,BO对象都是原有get、set方法等等。项目之前运行正常,且没有任何问题。接到新需求,需要多添加某些字段。

再一顿CRUD的基础操作之后,代码加上去,实体类对应的页面增删改查都没有问题。于是极度自信,提交代码。(O(∩_∩)O)

在代码中上述校验处,突然报错,直接给我整懵逼。

2 问题排查

本着哪里有问题,就解决哪里的思维。

  • 首先,怀疑是不是前端传值有误差(前端问题),在集合比较处添加上相关日志,抓取日志,分析对比数据后,发现数据没有问题,无论是前端传参,还是后端数据库查询。

  • 问题已经很明显了,加的代码有问题。(不可能,绝对不可能) ,虽然吧,但是可以确认就是自己加出问题了。然后看了下,集合比较的方法是collections.subtract()。这个方法常用来比较两个集合的差值,而且一般用在基本的数据类型比较,如字符串集合,数字集合等等。再对象集合比较,用的还是较少。

已经知道了是这个方法比较的问题,查看了一下实体类和DTO对象新增字段,set、get方法也都给写了,包括toString方法也重写了。看了两个对象一下子又没思路了,突然想到比较两个对象值,需要重写equals和hashcode方法。(掐自己一下)检查了一下实体类和DTO对象,因实体类不做比较,故没加equals和hashcode方法。而DTO对象因用来做了比较,所以都重写了这两个方法。看了一下DTO对象中,仅仅只加了属性和get、set方法以及toString方法。 按照思路,在equals和hashcode方法中加上新增字段,启动项目测试,成功了!(撒花

3 总结及伪代码

思考了一下,问题的出现。

因平时接触新项目,都是用lombok插件,对于对象的字段的删减,平时只需要注意对象本身以及xml文件中的sql拼写,对于对象基本的toString,equals,hashcode等方法关注不多。(基本忽视)在老项目中,没使用lombok插件,没人来帮忙写这些基础的对象方法,所以在一个简单的增减字段的需求时,需要花一些时间来关注对象本身的方法。这也正说明lombok插件也是蛮方便,减少了这类小问题。

伪代码

原有对象

public class UserDTO {private String id;private String name;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "UserDTO{" +"id='" + id + '\'' +", name='" + name + '\'' +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;UserDTO userDTO = (UserDTO) o;return Objects.equals(id, userDTO.id) &&Objects.equals(name, userDTO.name);}@Overridepublic int hashCode() {return Objects.hash(id, name);}
}

添加新字段

public class UserDTO {private String id;private String name;// 新加字段手机号private String phone;public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "UserDTO{" +"id='" + id + '\'' +", name='" + name + '\'' +", phone='" + phone + '\'' +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;UserDTO userDTO = (UserDTO) o;return Objects.equals(id, userDTO.id) &&Objects.equals(name, userDTO.name);}@Overridepublic int hashCode() {return Objects.hash(id, name);}
}

比较逻辑代码

// 前端传参数
List<UserDTO> reqList = new ArrayList();
// 数据库查询
List<UserDTO> respList = new ArrayList();
// 两个集合差集
List<UserDTO> resultList = CollectionUtils.subtract(reqList,respList)
// 判断集合中数据是否改变
if(CollectionUtils.isNotEmpty(resultList)){// 前端数据中,传了手机号,一直识别不出来,添加名称则可以识别出来,在DTO对象中equals方法中添加手机号即可
}

最后状态

public class UserDTO {private String id;private String name;private String phone;// 省略set/get方法@Overridepublic String toString() {return "UserDTO{" +"id='" + id + '\'' +", name='" + name + '\'' +", phone='" + phone + '\'' +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;UserDTO userDTO = (UserDTO) o;return Objects.equals(id, userDTO.id) &&Objects.equals(name, userDTO.name) &&Objects.equals(phone, userDTO.phone);}@Overridepublic int hashCode() {return Objects.hash(id, name, phone);}
}
http://www.yayakq.cn/news/60782/

相关文章:

  • 网站开发工作时间西双版纳建设局网站
  • 网站目标图书销售网站网页设计模板
  • 写作的网站有哪些优化seo报价
  • 温州有没有专门的企业网站北京市建设工程信息网官方网站
  • 2019个人建网站金蝶软件免费版下载
  • 做网站和seo哪个好做类似于58同城的网站
  • 松江新城投资建设发展有限公司网站嘉兴网站广优化公司
  • 网站全网建设莱芜静海网站建设制作
  • 网站项目规划与设计木门东莞网站建设技术支持
  • 全网网站建设维护网站建设论文题目
  • 做微商的网站邢台seo
  • 厦门学网站设计购物网站开发背景及目的
  • 织梦 我的网站网站搭建平台流程
  • 如何查询网站开发语言微信小程序短链接生成
  • 漂亮大气网站成品网站定制
  • 对加强政务门户网站建设的意见电子政务网站建设的步骤一般为
  • 代理企业网站备案做自媒体关注的网站
  • 做网站能改吗个人小程序开发流程
  • 上海市网站设计公司山东网站建设设计公司
  • 网络网站建设公司排名北京的互联网企业
  • 安阳做网站多少钱推广搜索引擎
  • 金华建设网站的公司制作网页比较方便的软件
  • 重庆建站模板展示网站批量上传文章
  • 重庆城乡建设网站首页深圳电器公司招聘
  • 北京服饰电商网站建设wordpress积分推广插件
  • 做网站如何月入10万福建百度seo排名点击软件
  • 集美网站建设株洲网站建设优化
  • 设计师常用的图片网站中国建设银行个人网上银行登录
  • 汉语资源建设相关网站深圳地铁建设有限公司
  • 龙华营销型网站建设公司c 网站开发如何每天10点执行任务