java 对比两个实体类字段变化_java判断两个实体某部分修改的内容

该博客介绍了一个Java工具类,用于比较两个对象(如订单DTO)的字段变化,包括字段值的相等性判断和不同值的对比。通过注解处理,可以自定义字段名称和比较方式,支持BigDecimal和Timestamp类型的比较。此外,还提供了处理null值的比较方法。
摘要由CSDN通过智能技术生成
    return pattern;
}

public void setPattern(String pattern) {
    this.pattern = pattern;
}

public String getRemark() {
    return remark;
}

public void setRemark(String remark) {
    this.remark = remark;
}

@Override
public String toString() {
    return "ComparedResult{" +
            "field='" + field + '\'' +
            ", fieldName='" + fieldName + '\'' +
            ", oldValue=" + oldValue +
            ", newValue=" + newValue +
            ", oldContent='" + oldContent + '\'' +
            ", newContent='" + newContent + '\'' +
            ", pattern='" + pattern + '\'' +
            ", remark='" + remark + '\'' +
            '}';
}

}


#####  订单DTO(测试类)



import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**

  • 订单DTO
    */
    @CompareAnon(name = “订单”)
    public class OrderDTO implements Serializable {

    @CompareAnon(name = “订单id”)
    private String id;

    @CompareAnon(name = “订单编号”, asContent = true)
    private String orderCode;

    private String supplyId;

    @CompareAnon(name = “供应商名称”, compareField = “supplyId”)
    private String supplyName;

    @CompareAnon(name = “订单金额(元)”, pattern = “#,##0.0000”)
    private BigDecimal orderAmount;

    @CompareAnon(name = “下单日期”, pattern = “yyyy-MM-dd HH:mm:ss”)
    private Date orderDate;

    public String getId() {
    return id;
    }

    public void setId(String id) {
    this.id = id;
    }

    public String getOrderCode() {
    return orderCode;
    }

    public void setOrderCode(String orderCode) {
    this.orderCode = orderCode;
    }

    public String getSupplyId() {
    return supplyId;
    }

    public void setSupplyId(String supplyId) {
    this.supplyId = supplyId;
    }

    public String getSupplyName() {
    return supplyName;
    }

    public void setSupplyName(String supplyName) {
    this.supplyName = supplyName;
    }

    public BigDecimal getOrderAmount() {
    return orderAmount;
    }

    public void setOrderAmount(BigDecimal orderAmount) {
    this.orderAmount = orderAmount;
    }

    public Date getOrderDate() {
    return orderDate;
    }

    public void setOrderDate(Date orderDate) {
    this.orderDate = orderDate;
    }

}


##### CompareUtils(比较工具类)



import org.apache.commons.lang.StringUtils;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Objects;

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设有两个实体类 `EntityA` 和 `EntityB`,它们都有相同的字段,我们可以按照以下步骤进行字段值的对比: 1. 首先,我们可以利用 Java 的反射机制获取 `EntityA` 和 `EntityB` 的所有字段和值。 ```java Field[] fields = EntityA.class.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); Object valueA = field.get(entityA); Object valueB = field.get(entityB); // TODO: 进行字段值的对比操作 } ``` 2. 对比两个字段值是否相同,可以使用 `Objects.equals()` 方法。 ```java if (!Objects.equals(valueA, valueB)) { // TODO: 对不同字段值进行相应的处理 } ``` 完整的代码样例如下所示: ```java import java.lang.reflect.Field; import java.util.Objects; public class EntityComparisonDemo { public static void main(String[] args) throws Exception { EntityA entityA = new EntityA("1", "John", 20); EntityB entityB = new EntityB("1", "Mary", 21); Field[] fields = EntityA.class.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); Object valueA = field.get(entityA); Object valueB = field.get(entityB); if (!Objects.equals(valueA, valueB)) { // TODO: 对不同字段值进行相应的处理 } } } static class EntityA { private String id; private String name; private int age; public EntityA(String id, String name, int age) { this.id = id; this.name = name; this.age = age; } public String getId() { return id; } public String getName() { return name; } public int getAge() { return age; } } static class EntityB { private String id; private String name; private int age; public EntityB(String id, String name, int age) { this.id = id; this.name = name; this.age = age; } public String getId() { return id; } public String getName() { return name; } public int getAge() { return age; } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值