/*
* Copyright 2002-2007 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.euler.util.beans;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeansException;
import org.springframework.util.Assert;
import com.euler.orm.Organization;
public abstract class BeanUtils {
/**
* 对比对象属性值 返回不相同集合
* @Title: compareProperties
* @Description: TODO
* @param @param source
* @param @param target
* @param @return
* @param @throws Throwable
* @return List
* @throws
*/
public static List compareProperties(Object source,Object target) throws Throwable {
return compareProperties(source, target,false);
}
/**
* 对比两个对象之间的属性值 返回
* List<String,Map<String,Map<String,String>>>
* try {
* list =BeanUtils.compareProperties(organization, organization2);
* } catch(Throwable e) {
* // TODO Auto-generated catch block e.printStackTrace();
* }
* for (Map map : list) {
* Set<String> set=map.keySet();
* for(String key:set){
* sb.append("字段名"+key);
* Map nmap=(HashMap)map.get(key);
* Set<Object> nset=nmap.keySet();
* for(Object value:nset){
* sb.append("源:"+value);
* sb.append("目:"+nmap.get(value));
* }
* }
* }
*
* @author Chaiqingsong
* @Title: compareProperties
* @Description: TODO
* @param
* @param source
* @param
* @param target
* @param
* @return
* @param
* @throws Throwable
* @return List
* @throws
*/
private static List compareProperties(Object source,
Object target,boolean returnString) throws Throwable {
Assert.notNull(source, "Source must not be null");
Assert.notNull(target, "Target must not be null");
Class actualEditable = target.getClass();
List result = new ArrayList();
PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable);
for (int i = 0; i < targetPds.length; i++) {
PropertyDescriptor targetPd = targetPds[i];
if (targetPd.getWriteMethod() != null) {
PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName());
if (sourcePd != null && sourcePd.getReadMethod() != null) {
try {
Method readMethod = sourcePd.getReadMethod();
if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {
readMethod.setAccessible(true);
}
//源值 和 目标值 对比
Object svalue = readMethod.invoke(source, new Object[0]);
Object tvalue = readMethod.invoke(target, new Object[0]);
if(svalue==null){
svalue="";
}
if (svalue != null && tvalue != null && !svalue.equals(tvalue)) {
Map rs = new HashMap();
Map values = new HashMap();
values.put(svalue, tvalue);
rs.put(sourcePd.getName(), values);
result.add(rs);
}
} catch (Throwable ex) {
throw ex;
}
}
}
}
return result;
}
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
Organization organization = new Organization();
organization.setOrgid("123456");
organization.setOrgname("第一个");
organization.setXtlb("1");
Organization organization2 = new Organization();
organization2.setOrgid("654321");
organization2.setOrgname("第二个");
organization2.setXtlb("1");
List<Map> list = null;
try {
list = BeanUtils.compareProperties(organization, organization2);
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (Map map : list) {
Set<String> set = map.keySet();
for (String key : set) {
sb.append("字段名" + key);
Map nmap = (HashMap) map.get(key);
Set<Object> nset = nmap.keySet();
for (Object value : nset) {
sb.append("源:" + value);
sb.append("目:" + nmap.get(value));
}
}
}
System.out.println(sb.toString());
}
}
分享到:
相关推荐
例如,我们可以使用`BeanUtils.copyProperties()`方法快速地将一个JavaBean的属性值复制到另一个JavaBean上。但请注意,这种方法默认会忽略源对象中不存在于目标对象的属性,而目标对象中未在源对象中找到的属性将...
4. **空值处理**:BeanUtils在处理属性值时会考虑空值情况,如果源对象的某个属性值为null,不会尝试设置到目标对象,避免了可能的NullPointerException。 5. **国际化支持**:BeanUtils还提供了对国际化(i18n)的...
- **通用工具**:BeanUtils作为一个通用的工具包,其很多功能在框架的其他部分也能发挥作用,比如在视图渲染阶段,可以使用BeanUtils获取对象的属性值,以便在模板引擎中展示。 总结来说,Apache Commons BeanUtils...
2. **属性复制**:`copyProperties()`方法是BeanUtils的一个核心功能,它可以将一个JavaBean对象的所有属性值复制到另一个对象中。这个方法可以用来实现对象间的深度拷贝,但需要注意的是,它只拷贝对象可见的并且可...
这个类库提供了许多实用方法,能够简化Java开发中的对象属性赋值和获取过程,极大地提高了开发效率。在Java后端开发中,尤其是在与数据库交互时,BeanUtils扮演了重要的角色。 首先,BeanUtils的核心功能在于属性的...
总的来说,Apache BeanUtils库的`copyProperties`方法是Java开发中一个实用的工具,它可以显著提高代码的可读性和简洁性,尤其在处理JavaBean对象属性拷贝时。然而,理解它的内在工作原理和潜在限制同样非常重要,...
BeanUtils库提供了一系列便捷的方法,使得开发者可以更轻松地进行对象属性的设置、获取以及复制,极大地简化了JavaBean的操作流程。下面将详细介绍BeanUtils工具类的核心功能和使用方法。 1. **属性设置与获取** ...
这个包的出现主要是为了简化对象属性的设置、获取以及复制等操作,从而提高开发效率。BeanUtils库是基于JavaBeans规范的,JavaBeans是一种符合特定规则的Java类,它们通常具有公有的getter和setter方法,用于封装...
这个包的出现极大地简化了对象属性的复制、设置和获取,使得开发者能够更高效地进行Servlet开发。现在,让我们深入探讨BeanUtils包的核心功能、工作原理以及如何结合源码来学习和应用。 首先,BeanUtils的核心功能...
3. **类型转换**:BeanUtils在设置属性值时,会尝试自动进行类型转换。这意味着你可以传递任何类型的值,只要它能被转换为目标属性的类型,BeanUtils就会处理这个转换过程。 4. **异常处理**:BeanUtils在执行过程...
总的来说,BeanUtils是Java开发中一个不可或缺的工具,它通过简化的API帮助开发者更高效地处理对象属性的映射和转换,减少了大量重复的代码,提升了代码的可读性和可维护性。在处理数据绑定、对象复制和转换时,熟练...
对象复制是指将一个对象的属性值复制到另一个对象的过程,通常用于创建新对象或者初始化对象。`BeanUtilsBean.copyProperties()`方法是实现此功能的关键,它允许我们将一个JavaBean的所有属性值复制到另一个具有相同...
1. 引包 2. 获取映射工厂 MapperFactor 3. 获取 MapperFacade,进行对象映射
- 如果属性名不完全匹配或者类型转换失败,BeanUtils会抛出异常,因此需要确保对象属性名的正确性和类型的一致性。 - 为了提高性能,可以使用BeanUtils.copyProperties()的重载方法,指定只复制部分属性。 五、...
- **属性访问**:BeanUtils提供了`getProperty()`和`setProperty()`方法,可以方便地读取和设置JavaBean对象的属性值,无需关注getter和setter方法的具体实现。 - **类型转换**:BeanUtils具备自动类型转换的能力...
在Java开发中,BeanUtils是一个非常重要的工具包,尤其在处理对象属性的复制、设置和获取时,它的存在极大地提高了开发效率。BeanUtils是Apache Commons项目的一部分,它提供了一系列方便实用的方法,帮助开发者轻松...
首先,BeanUtils库的核心功能在于它提供了方便的Java Bean操作接口,这些接口能够帮助开发者以更简洁的方式处理对象属性的get和set操作。例如,`BeanUtils.copyProperties()`方法可以用来复制一个Bean的所有属性到另...
- **对象复制**:在业务逻辑中,需要创建与原有对象属性相同的实例时,可以使用BeanUtils的复制功能。 - **属性操作**:当需要动态设置或获取JavaBean的属性时,BeanUtils可以大大减少代码量。 3. **集成与应用**...
在Java开发中,Apache Commons BeanUtils是一个非常实用的工具库,它提供了许多便捷的方法来操作JavaBeans,使得在处理对象属性时变得更加简单。本篇文章将深入探讨如何使用BeanUtils库,特别是通过它将Map对象转换...
`BeanUtils`类提供了复制对象属性、创建Bean实例以及属性设置和获取等基本功能,而`PropertyUtils`类则扩展了更高级的属性操作,如集合和数组的处理。 例如,在标题中提到的`commons-beanutils-1.8.0.rar`和`...