`
sxpyrgz
  • 浏览: 72841 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自个写的COPYPROPERTY

    博客分类:
  • java
阅读更多
package com.ygsoft.czp.ticketsys.util;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import com.ygsoft.czp.model.AcUser;
import com.ygsoft.czp.model.WebCzpCzrw;
import com.ygsoft.czp.test.common.ClassPropertyBean;

/**
 *  进行一些JAVABEAN的相关操作 〖功能模块〗: BeanUtil(功能) 〖目 的〗: 〖作 者〗:   * 〖创建日期〗:   〖版 本〗: 1.00<br>
 * 〖版权信息〗:   * 〖更改记录〗: 更改时间、更改人、更改原因、更改内容<br>
 */
public class BeanUtil {
    
    
	/**
	 * 将源对象中的数据拷贝到目标对象中
	 * 
	 * @param target
	 * @param source
	 */
	public static void copyProperty(Object target, Object source) {
		Field[] tarFields = target.getClass().getDeclaredFields();
		Field[] sourFields = source.getClass().getDeclaredFields();
		for (int i = 0; i < tarFields.length; i++) {
			Field f = tarFields[i];
			int n = f.getModifiers();
			// 判断是FINAL字段
			if (Modifier.isFinal(n)) {
				continue;
			}
			f.setAccessible(true);
			String tarType = tarFields[i].getType().toString();
			String name = tarFields[i].getName();
			for (int j = 0; j < sourFields.length; j++) {
				Field temp = sourFields[j];
				int m = temp.getModifiers();
				if (Modifier.isFinal(m)) {
					continue;
				}
				temp.setAccessible(true);
				String sourType = sourFields[j].getType().toString();
				String sourName = sourFields[j].getName();
				if (name.equalsIgnoreCase(sourName)) {
					try {
						if (tarType.equals(sourType)) {
							f.set(target, temp.get(source));

						} else if ((tarType.indexOf("Date") != -1 || (tarType
								.indexOf("Timestamp") != -1) )
								&& sourType.indexOf("String") != -1) {
							String time = (String) temp.get(source);
							if (time != null && !(time.trim().equals(""))) {
								String dateStr = "yyyy-MM-dd HH:mm:ss";
								if (time.trim().length() < 11) {
									dateStr = "yyyy-MM-dd";
								}
								SimpleDateFormat myFmt2 = new SimpleDateFormat(	dateStr);
								Date date = new Date();
								try {
									date = myFmt2.parse(time);
								} catch (ParseException e) {
									System.out
											.println("copyProperty 时不能进行字符串到日期的转换");
									e.printStackTrace();
								}
								f.set(target, date);
							}
						} else if (tarType.indexOf("String") != -1
								&& (sourType.indexOf("Date") != -1 || (sourType
										.indexOf("Timestamp") != -1)||(sourType
												.indexOf("CnDate") != -1))) {
							Date time = (Date) temp.get(source);
							if (time != null) {
								SimpleDateFormat myFmt2 = new SimpleDateFormat(
										"yyyy-MM-dd HH:mm:ss");
								f.set(target, myFmt2.format(time));
							}

						}else if(tarType.indexOf("String") != -1 && sourType.indexOf("Long") != -1){
							if(temp.get(source)!=null){
								f.set(target, ""+temp.get(source) );
							}else{
								f.set(target, "");
							}
						}else if(tarType.indexOf("Long") != -1 && sourType.indexOf("String") != -1){
							if(temp.get(source)!=null && !temp.get(source).equals("")){
								f.set(target, new Long(temp.get(source).toString()) );
							}
						}else if(tarType.indexOf("Double") != -1 && sourType.indexOf("String") != -1){
							if(temp.get(source)!=null && !temp.get(source).equals("")){
								f.set(target, new Double(temp.get(source).toString()) );
							}
						}else if(tarType.indexOf("String") != -1 && sourType.indexOf("Double") != -1){
							if(temp.get(source)!=null){
								f.set(target, ""+temp.get(source) );
							}else{
								f.set(target, "");
							}
						}
					} catch (Exception e) {
						e.printStackTrace();
					}  
				}

				temp.setAccessible(false);
				
			}
			f.setAccessible(false);
		}
	}

	/**
	 * 将源对象中的数据拷贝到目标对象中
	 * 
	 * @param target
	 * @param source
	 * @param namesList 如果传入某个属性,则某个属性不进行COPY
	 * 
	 */
	public static void copyProperty(Object target, Object source,List namesList) {
		Field[] tarFields = target.getClass().getDeclaredFields();
		Field[] sourFields = source.getClass().getDeclaredFields();
		for (int i = 0; i < tarFields.length; i++) {
			Field f = tarFields[i];
			int n = f.getModifiers();
			// 判断是FINAL字段
			if (Modifier.isFinal(n)) {
				continue;
			}
			f.setAccessible(true);
			String tarType = tarFields[i].getType().toString();
			String name = tarFields[i].getName();
			if(namesList.contains(name)){
				continue;
			}
			for (int j = 0; j < sourFields.length; j++) {
				Field temp = sourFields[j];
				int m = temp.getModifiers();
				if (Modifier.isFinal(m)) {
					continue;
				}
				temp.setAccessible(true);
				String sourType = sourFields[j].getType().toString();
				String sourName = sourFields[j].getName();
			
				if (name.equalsIgnoreCase(sourName)) {
					try {
						if (tarType.equals(sourType)) {
							f.set(target, temp.get(source));
						} else if ((tarType.indexOf("Date") != -1 || (tarType
								.indexOf("Timestamp") != -1))
								&& sourType.indexOf("String") != -1) {
							String time = (String) temp.get(source);
							if (time != null && !(time.trim().equals(""))) {
								String dateStr = "yyyy-MM-dd HH:mm:ss";
								if (time.trim().length() < 11) {
									dateStr = "yyyy-MM-dd";
								}
								SimpleDateFormat myFmt2 = new SimpleDateFormat(
										dateStr);
								Date date = new Date();
								try {
									date = myFmt2.parse(time);
								} catch (ParseException e) {
									System.out
											.println("copyProperty 时不能进行字符串到日期的转换");
									e.printStackTrace();
								}
								f.set(target, date);
							}
						} else if (tarType.indexOf("String") != -1
								&& (sourType.indexOf("Date") != -1 || (sourType
										.indexOf("Timestamp") != -1))) {
							Date time = (Date) temp.get(source);
							if (time != null) {
								SimpleDateFormat myFmt2 = new SimpleDateFormat(
										"yyyy-MM-dd HH:mm:ss");
								f.set(target, myFmt2.format(time));
							}

						}else if(tarType.indexOf("String") != -1 && sourType.indexOf("Long") != -1){
							f.set(target, new Long(temp.get(source).toString()) );
						}else if(tarType.indexOf("Long") != -1 && sourType.indexOf("String") != -1){
							f.set(target, ""+temp.get(source) );
						}
					} catch (IllegalArgumentException e) {

						e.printStackTrace();
					} catch (IllegalAccessException e) {
						// TODO 自动生成 catch 块
						e.printStackTrace();
					}
				}

				temp.setAccessible(false);
			}
			f.setAccessible(false);
		}
	}
	  //
	    private static ConcurrentHashMap<Class,  Field[]> classPropertyMap = new ConcurrentHashMap<Class,  Field[]>();

	    /**
	     * 由类得到类的所有属性,并进行缓存,使得再次使用时可以取到相关信息。
	     * @param cla
	     * @return
	     */
	    public static Field[] getClassProperty(Class cla) {
		Field[] fileds= classPropertyMap.get(cla);
		if (fileds != null) {
		    return fileds;
		}else {
		    fileds = cla.getDeclaredFields();
		    classPropertyMap.put(cla, fileds);
		    return fileds;
		}
	    }
	/**
	 * 将对象转换为一个XML字符串,返回
	 * 
	 * @param target
	 * @param source
	 */
	public static String convertBeanToXML(Object source,String beanName) {
		StringBuffer sb = new StringBuffer();
		 Field[] sourFields = getClassProperty(source.getClass());
		 beanName = beanName.equals("")?source.getClass().getName().substring(source.getClass().getName().lastIndexOf(".")+1):beanName;
			sb.append("<"+beanName+">");
			for (int j = 0; j < sourFields.length; j++) {
				Field temp = sourFields[j];
				int m = temp.getModifiers();
				if (Modifier.isFinal(m)) {
					continue;
				}
				temp.setAccessible(true);
				String sourName = sourFields[j].getName();
				sb.append("\r\n\t<"+sourName+">");
				try {
				    if(temp.get(source) != null){
					   sb.append(temp.get(source) );
				    }
				} catch (IllegalArgumentException e) {
				    e.printStackTrace();
				} catch (IllegalAccessException e) {
				    
				    e.printStackTrace();
				}
				sb.append("</"+sourName+">");
		
				temp.setAccessible(false);
				
			}
			sb.append("\r\n</"+beanName+">");
		return sb.toString();
	}
	/**
	 * 将对象转换为一个XML字符串,返回
	 * 
	 * @param target
	 * @param source
	 */
	public static String convertBeanToXML(Object source,String beanName,Map map) {
		StringBuffer sb = new StringBuffer();
		Field[] sourFields = getClassProperty(source.getClass());
		beanName = beanName.equals("")?source.getClass().getName():beanName;
		sb.append("<"+beanName+">");
		for (int j = 0; j < sourFields.length; j++) {
			Field temp = sourFields[j];
			int m = temp.getModifiers();
			if (Modifier.isFinal(m)) {
				continue;
			}
			temp.setAccessible(true);
			String sourName = sourFields[j].getName();
			if(map.containsKey(sourName)){
    				sb.append("\r\n\t<"+sourName+">");
    				try {
    				    if(temp.get(source) != null){
    					   sb.append(temp.get(source) );
    				    }
    				} catch (IllegalArgumentException e) {
    				    e.printStackTrace();
    				} catch (IllegalAccessException e) {
    				    
    				    e.printStackTrace();
    				}
    				sb.append("</"+sourName+">");
			}
			temp.setAccessible(false);
		}
		sb.append("\r\n</"+beanName+">");
		return sb.toString();
	}
	 
}
 
分享到:
评论

相关推荐

    IOS应用源码——Property.rar

    这个压缩包“IOS应用源码——Property.rar”很可能包含了一个或多个iOS应用程序的源代码,这些代码中广泛使用了Property特性来管理对象的属性。下面将详细介绍Property的相关知识点。 1. **Property声明**: 在...

    iOS开发中属性 property 和 synthesize 详解

    在iOS开发过程中,`@property` 和 `@synthesize` 是两个非常重要的概念。它们不仅简化了代码编写过程,提高了开发效率,还增强了程序的可维护性。本文将深入探讨这两个特性,并通过示例对比它们使用前后的情况。 ##...

    自己写的Hibernate

    2 Copy the source code to the new projects. 3 Import the liberaries as show on top. 4 New the database and be sured the server is open. 4 OK! You can run the ...

    使用BeanUtils操作属性的一个小坑

    例如,假设我们有一个属性名为`firstName`,但是getter方法被错误地写成了`getFirst_Name`,这时BeanUtils将无法正确识别这个属性,导致数据无法正确复制。 此外,BeanUtils在处理集合类型时也有需要注意的地方。...

    自写iOS类:UIRadioBox

    @property (nonatomic, copy) NSString *text; //... @end ``` 同时,还需要实现初始化方法,如 `- (instancetype)initWithFrame:(CGRect)frame` 和 `- (instancetype)initWithCoder:(NSCoder *)aDecoder`。 2...

    ios_assign,retain和copy详解

    在iOS开发中,Objective-C语言提供了@property关键字来声明属性,并且可以在属性声明时指定不同的内存管理行为,主要涉及到assign、retain和copy这三个关键字。为了深入理解这三者的区别,首先需要了解Objective-C的...

    图片属性 读写.rar

    property.Value.CopyTo(dateBytes, 0); string date = System.Text.Encoding.ASCII.GetString(dateBytes).TrimEnd('\0'); Console.WriteLine($"图片的拍摄日期:{date}"); ``` 如果要修改图片属性,首先需要创建一...

    大小写金额转换-源码

    (三)阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”, 万位、元位也是“0’,但千位、角位不是“0”时,中文大写金额中 可以只写一个零字,也可以不写“零”字。如¥1,680.32,应写成 人民币壹...

    8.1《iOS开发笔试题600道-笔试手写篇》(2).pdf

    属性可以包含不同的特性,比如readwrite(读写)、readonly(只读)、nonatomic(非原子的)、atomic(原子的)、strong(强引用)、weak(弱引用)、assign(直接赋值)、copy(复制)等。 在iOS开发中,正确使用@...

    举例讲解Objective-C中@property属性的用法

    在Objective-C中,`@property` 是一种声明属性的关键字,它允许你在类接口中定义对象的特性,如可读性、可写性、内存管理策略等。在C++中,我们通过访问限定符(public, protected, private)来控制成员变量的访问...

    IOS property属性详细介绍使用注意事项

    - `copy`: 用于创建对象的副本,对于不可变对象是浅复制,对于可变对象是深复制。有助于保持对象状态的一致性。 - `weak`: 弱引用,不会增加对象的引用计数,当对象被释放,弱引用自动设为`nil`,常用于解决循环...

    BeanMapper:比BeanUtils.copyProperties更快

    一个BeanUtils.copyProperties的小型快速替代。 起因 由于BeanUtils(Spring或Apache Commons)的copyProperties实现是利用反射实现的,它在大量调用时具有比较严重的性能问题。 BeanMapper通过javassist类库实现在...

    《招聘一个靠谱的iOS》面试题参考答案(上).md

    - 使用`@property(copy)`与`NSMutableArray`结合时会出现问题,因为`NSMutableArray`是可变的,而copy操作会创建一个深拷贝,这意味着原本期望的是一个可变的数组,但实际得到的是一个不可变的数组副本。这可能导致...

    IOS中(assign,retain,copy,weak,strong)的区别以及nonatomic的含义

    我们在声明@property 属性时,总是要在括号中写上assign、retain、copy、weak、strong中的一个,很多时候,我们仅仅只是按照习惯去写经常写的那一个,但有时候看代码时又会发现别人用的不尽相同,那这些之间的区别是...

    MySQL不停机不锁表主从同步与读写分离配置

    innobackupex --defaults-file=/etc/my.cnf --user=root --password=xxxx --copy-back /data/backup/2016-06-27_23-59-56/ ``` 4. **修改数据目录权限**:更改数据目录的所有权。 ```bash chown -R mysql:mysql ...

    从Swift看Objective-C的数组使用1

    当创建一个NSMutableArray属性时,如示例中的`@property (nonatomic, strong) NSMutableArray* arr;`,内存布局通常分为三部分: 1. 第一块内存是存储NSMutableArray指针的变量`arr`,占用8个字节。 2. 第二块内存...

    webdav 资料,方法讲解的非常详细。

    示例:客户端尝试对一个已写锁定的资源进行修改,但在请求中提供了正确的锁令牌,因此操作成功执行。 ##### 6.7 写锁与COPY/MOVE 当使用`COPY`或`MOVE`方法时,如果目标资源已经被写锁定,则操作将失败,除非提供...

    iOS 面试题

    3. 请问 property 的 作用,assign,copy,retain 的 区别; assign就是基本赋值 copy是重新创建一个oc对象,计数器是1 retain是对计数器+1 4.请写出实现多线程操作涉及的类及 简单 示例; NSThread, ...

    VB.NET 读写 MP3 文件的 ID3v1 信息

    ID3v1标签通常位于MP3文件的末尾,包含128字节的数据,分为以下几个部分: 1. 标签标识符("TAG",3字节) 2. 歌曲标题(30字节) 3. 艺术家名(30字节) 4. 专辑名(30字节) 5. 年份(4字节) 6. 评论(30字节)...

Global site tag (gtag.js) - Google Analytics