`
daniel.wuz
  • 浏览: 101782 次
  • 性别: Icon_minigender_1
  • 来自: 纽约
最近访客 更多访客>>
社区版块
存档分类

一个VO转换工具

HP 
阅读更多
贴在这里备查
package com.hp.mes.mat.pojo;

/**
 * ---------------------------------------------------------------------------------
 Confidential and Proprietary                                                                
 Copyright 2008 By                                                                                     
 SGAI & Hewlett-Packard Development Company, L.P. 	              
 All Rights Reserved                                                                                  

 Project Name : SGAI  MES                                                                                                                                       
 Class Name   : IValueObject.java    
 Package      : com.hp.mes.md.pojo                                                                   
 @version     $Id$                                                          
 @author Daniel
 @since  2008-8-6 
 */
public interface IValueObject {

	/**
	 * 返回value object属性域名称数组
	 * 
	 * @return
	 * @author Daniel
	 * @since  2008-8-6
	 */
	public String[] getAttributeName();
	
	/**
	 * 返回配置文件中定义的属性名称数组,与getAttributeName方法返回域一一对应
	 * 
	 * @return
	 * @author Daniel
	 * @since  2008-8-6
	 */
	public String[] getAttributeRef();
	
}


package com.hp.mes.mat.util;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import com.hp.common.util.StringUtil;
import com.hp.mes.mat.pojo.IValueObject;

/**
 * ---------------------------------------------------------------------------------
 Confidential and Proprietary                                                                
 Copyright 2008 By                                                                                     
 SGAI & Hewlett-Packard Development Company, L.P. 	              
 All Rights Reserved                                                                                  

 Project Name : SGAI  MES                                                                                                                                       
 Class Name   : VOConvertUtil.java    
 Package      : com.hp.mes.md.util                                                                   
 @version     $Id$                                                          
 @author Daniel
 @since  2008-8-7 
 */
public class VOConvertUtil {

	private Class valueObjectClass = null;

	private SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");

	public VOConvertUtil() {

	}

	public VOConvertUtil(Class valueObjectClass) {
		this.valueObjectClass = valueObjectClass;
	}

	/**
	 * 将符合properties格式的字串,转换为一个实现了IValueObject接口的对象
	 * 
	 * @param text 必须符合properties格式
	 * @return IValueObject 对象
	 * @throws Exception 可能抛出的异常
	 * @author Daniel
	 * @since  2008-8-13
	 */
	public IValueObject parse2ValueOject(String text) throws Exception {
		Properties prop = new Properties();
		ByteArrayInputStream byteStream = new ByteArrayInputStream(text
				.getBytes());
		try {
			prop.load(byteStream);
		} catch (IOException e) {
			e.printStackTrace();
		}

		IValueObject valueObject = (IValueObject) valueObjectClass
				.newInstance();

		// 获得IValueObject的所有属性名称
		String[] attrNames = valueObject.getAttributeName();

		String[] attrRefs = valueObject.getAttributeRef();

		for (int i = 0; i < attrNames.length; i++) {
			// 获得属性名
			String attrName = attrNames[i];

			// 获得对应xml文件中的键值
			String refKey = attrRefs[i];
			// 从properties中获得对应的值
			String refValue = prop.getProperty(refKey);
			// 为避免properties中汉字出现乱码,进行编码转换
			refValue = new String(refValue.getBytes("ISO8859-1"), "GBK");

			// 根据名称找属性类型
			Field field = valueObjectClass.getDeclaredField(attrName);
			Class fieldType = field.getType();
			// 将String类型的值转换成相应类型的值
			Object attrValue = castToAttributeValue(fieldType, refValue);

			// 取值,调用set方法赋值
			String methodName = getSetterMethod(attrName);
			Method setterMethod = valueObjectClass.getDeclaredMethod(
					methodName, fieldType);
			setterMethod.invoke(valueObject, attrValue);
		}

		return valueObject;
	}

	/**
	 * 获得setter方法名称
	 * 
	 * @param attrName
	 * @return
	 * @author Daniel
	 * @since  2008-8-7 
	 */
	private String getSetterMethod(String attrName) {
		String methodName = "set" + attrName.substring(0, 1).toUpperCase()
				+ attrName.substring(1);
		return methodName;
	}

	/**
	 * 获得getter方法名称
	 * 
	 * @param attrName
	 * @return
	 * @author Daniel
	 * @since  2008-8-7
	 */
	private String getGetterMethod(String attrName) {
		String methodName = "get" + attrName.substring(0, 1).toUpperCase()
				+ attrName.substring(1);
		return methodName;
	}

	private Object castToAttributeValue(Class fieldType, String refValue)
			throws Exception {
		Object value = null;
		if (StringUtil.isBlank(refValue)) {
			value = null;
		} else if (fieldType == String.class) {
			value = refValue;
		} else if (fieldType == Integer.class) {
			value = Integer.valueOf(refValue);
		} else if (fieldType == Long.class) {
			value = Long.valueOf(refValue);
		} else if (fieldType == Double.class) {
			value = Double.valueOf(refValue);
		} else if (fieldType == BigDecimal.class) {
			value = new BigDecimal(refValue);
		} else if (fieldType == char.class) {
			value = refValue.toCharArray()[0];
		} else if (fieldType == short.class) {
			value = Short.parseShort(refValue);
		} else if (fieldType == int.class) {
			value = Integer.parseInt(refValue);
		} else if (fieldType == double.class) {
			value = Double.valueOf(refValue);
		} else if (fieldType == Date.class) {
			value = dateFormatter.parse(refValue);
		}
		return value;
	}

	/**
	 * 将一个IValueObject的对象转换为对应的实体对象
	 * 
	 * @param valueObject
	 * @return
	 * @author Daniel
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 * @since  2008-8-7
	 */
	public Object parse2Entity(IValueObject valueObject) throws Exception {

		Object entity = valueObjectClass.newInstance();
		// 获得IValueObject中的所有属性名
		String[] attrNames = valueObject.getAttributeName();
		for (int i = 0; i < attrNames.length; i++) {
			String attrName = attrNames[i];
			// 调用ValueObject的getter方法从ValueObject从取值
			String getterName = getGetterMethod(attrName);
			Method getterMethod = valueObject.getClass().getDeclaredMethod(
					getterName);
			Object attrValue = getterMethod.invoke(valueObject);

			// 调用entity的set方法给Entity赋值
			String setterName = getSetterMethod(attrName);
			Method setterMethod = valueObjectClass.getDeclaredMethod(
					setterName, attrValue.getClass());
			setterMethod.invoke(entity, attrValue);
		}
		return entity;
	}

}

分享到:
评论

相关推荐

    vopo转换工具类及所需jar

    "vopo转换工具类及所需jar"是一个特定的项目,它提供了一个简单的方法来处理名为"vopo"的数据格式之间的转换。这个工具包可能包含了一些核心的类和依赖的库,使得开发者能够便捷地实现这种转换操作。 首先,`...

    Oracle 自动生成POVO工具

    POJO类通常代表数据库中的一个实体,包含了其属性、getter和setter方法,以及可能的构造函数。而VO类类似于POJO,但更注重于数据的传递,通常不包含任何业务逻辑或数据库操作。在大型项目中,当数据库表数量庞大时,...

    java根据数据库自动生成vo 类

    首先,我们需要一个能够解析数据库表结构并生成对应VO类的工具。一种常见的方法是使用ORM(Object-Relational Mapping)框架,如Hibernate或MyBatis。这些框架提供了元数据映射功能,可以根据数据库表自动生成Java...

    vo-aacenc-0.1.3.tar

    vo-aacenc是用于AAC(Advanced Audio Coding)音频编码的一个开源工具,适用于音频处理和多媒体制作。在FFmpeg这个著名的多媒体框架中,vo-aacenc被用作AAC音频编码器的一部分,为用户提供高质量的音频编码功能。 ...

    vo-aacenc-0.1.3.zip

    标题“vo-aacenc-0.1.3.zip”指的是一个包含了AAC编码库以及相关示例的压缩包文件,版本号为0.1.3。AAC(Advanced Audio Coding)是一种高效的音频编码格式,广泛用于数字音频广播、互联网流媒体、移动通信等领域。...

    根据vo生成yapi文档:YapiFileGenerattor.zip

    YapiFileGenerattor.java是这个项目的主要实现文件,它通常会包含一个Java类,该类负责解析VO(Value Object)类,从中提取方法、参数、返回类型等信息,并将这些信息转换为Yapi支持的JSON格式,以便导入到Yapi平台...

    3515取vo数据并编码

    总的来说,"3515取vo数据并编码"是一个涉及到硬件接口、音频处理和编码算法的综合问题,需要具备扎实的嵌入式系统知识、编程技巧和音频编解码经验。开发这样的功能需要耐心和对整个系统的深入理解。

    由表名生成vo

    在Java中,一个典型的VO通常会包含一些私有字段以及对应的getter和setter方法。 2. **Oracle数据库**:作为一款广泛使用的商业关系型数据库管理系统,Oracle提供了强大的SQL查询能力以及丰富的内置函数支持,使得...

    视图对象(VO、DTO)的应用!

    在实际开发中,我们可以通过一些自动化工具,如Dozer、MapStruct等,来简化VO和DTO之间的数据映射过程,减少手动编写转换代码的工作量。同时,为了提高效率和减少内存占用,还可以考虑使用流式API处理大数据量的DTO...

    自己实现的Android中将任意实体类(Entity、vo、dto、Model)对象(object)转为Json字符串的一个类

    JsonUtil通常是一个静态类,包含一系列静态方法,用于对象到JSON的转换。在Java中,我们通常使用Google提供的Gson库或者org.json库来实现这种转换。Gson库通过反射机制,可以自动将Java对象转换成对应的JSON字符串,...

    NC(UFIDA)错误帮助文档加强版

    后台VO转换的基类nc.bs.pf.change.VOConversion 检查引用类nc.bs.trade.comchkref.CheckRef 业务异常nc.vo.pub.BusinessException类 第二节 开发问题集 UI工厂分为哪几大基本模块? 怎样配置eclipse参数? 单据开发...

    java实现相同属性名称及相似类型的pojo、dto、vo等互转操作

    下面是一个简单的示例代码,演示如何使用反射机制来实现 POJO、DTO、VO 等之间的转换: ```java public class PojoConvertUtil { public static &lt;T&gt; T convertPojo(Object orig, Class&lt;T&gt; targetClass) { try { T...

    ab_common_vo:提供通用的vo服务接口,请结合序列化,ab_common项目使用

    在本案例中,"ab_common_vo"是一个核心模块,为其他应用或服务提供公共的、标准的数据结构。 **序列化**是将对象的状态转换为可存储或传输的形式的过程,通常用于持久化数据或者在网络上传输对象。在Java中,实现...

    vo-utils

    "vo-utils"是一个基于TypeScript开发的工具库,主要针对数据对象(Value Object)操作提供便利的方法。在软件开发中,Value Object是一种设计模式,它强调对象的值而不是标识,通常用于封装不可变数据。TypeScript是...

    jdbc 连接数据库封装类,可返回map,或者vo(自用)

    标题中的“jdbc 连接数据库封装类,可返回map,或者vo(自用)”指的是一个自定义的Java类库,用于简化Java应用程序通过JDBC(Java Database Connectivity)与数据库的交互。这类库通常会提供方便的方法来执行SQL...

    java Pojo转Map

    要将User对象转换为Map,我们可以创建一个通用的方法,这个方法接受任何Pojo类型的对象,然后遍历其属性并将其放入Map中。这里提供一个简单的工具类`Pojo2MapUtil`: ```java import java.lang.reflect.Field; ...

    用友nap开发nc65中的模版转换-业务单元左侧树构造

    1. **XML配置文件**: 在构建左侧树的过程中,首先需要定义一个XML配置文件,该文件用于描述树的结构以及每个节点的信息。这些信息包括但不限于节点的ID、名称、图标、链接等属性。 - 示例配置文件可能包含以下结构...

    值对象转换成SQL语句

    在这个场景中,"值对象"(Value Object)通常指的是Java或类似语言中的一个类,它的实例包含了若干个基本类型的属性,如int和String。这些属性可以代表数据库表中的字段。通过将值对象转换为SQL语句,我们可以方便地...

Global site tag (gtag.js) - Google Analytics