贴在这里备查
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"的数据格式之间的转换。这个工具包可能包含了一些核心的类和依赖的库,使得开发者能够便捷地实现这种转换操作。 首先,`...
POJO类通常代表数据库中的一个实体,包含了其属性、getter和setter方法,以及可能的构造函数。而VO类类似于POJO,但更注重于数据的传递,通常不包含任何业务逻辑或数据库操作。在大型项目中,当数据库表数量庞大时,...
首先,我们需要一个能够解析数据库表结构并生成对应VO类的工具。一种常见的方法是使用ORM(Object-Relational Mapping)框架,如Hibernate或MyBatis。这些框架提供了元数据映射功能,可以根据数据库表自动生成Java...
vo-aacenc是用于AAC(Advanced Audio Coding)音频编码的一个开源工具,适用于音频处理和多媒体制作。在FFmpeg这个著名的多媒体框架中,vo-aacenc被用作AAC音频编码器的一部分,为用户提供高质量的音频编码功能。 ...
标题“vo-aacenc-0.1.3.zip”指的是一个包含了AAC编码库以及相关示例的压缩包文件,版本号为0.1.3。AAC(Advanced Audio Coding)是一种高效的音频编码格式,广泛用于数字音频广播、互联网流媒体、移动通信等领域。...
YapiFileGenerattor.java是这个项目的主要实现文件,它通常会包含一个Java类,该类负责解析VO(Value Object)类,从中提取方法、参数、返回类型等信息,并将这些信息转换为Yapi支持的JSON格式,以便导入到Yapi平台...
总的来说,"3515取vo数据并编码"是一个涉及到硬件接口、音频处理和编码算法的综合问题,需要具备扎实的嵌入式系统知识、编程技巧和音频编解码经验。开发这样的功能需要耐心和对整个系统的深入理解。
在Java中,一个典型的VO通常会包含一些私有字段以及对应的getter和setter方法。 2. **Oracle数据库**:作为一款广泛使用的商业关系型数据库管理系统,Oracle提供了强大的SQL查询能力以及丰富的内置函数支持,使得...
在实际开发中,我们可以通过一些自动化工具,如Dozer、MapStruct等,来简化VO和DTO之间的数据映射过程,减少手动编写转换代码的工作量。同时,为了提高效率和减少内存占用,还可以考虑使用流式API处理大数据量的DTO...
JsonUtil通常是一个静态类,包含一系列静态方法,用于对象到JSON的转换。在Java中,我们通常使用Google提供的Gson库或者org.json库来实现这种转换。Gson库通过反射机制,可以自动将Java对象转换成对应的JSON字符串,...
后台VO转换的基类nc.bs.pf.change.VOConversion 检查引用类nc.bs.trade.comchkref.CheckRef 业务异常nc.vo.pub.BusinessException类 第二节 开发问题集 UI工厂分为哪几大基本模块? 怎样配置eclipse参数? 单据开发...
下面是一个简单的示例代码,演示如何使用反射机制来实现 POJO、DTO、VO 等之间的转换: ```java public class PojoConvertUtil { public static <T> T convertPojo(Object orig, Class<T> targetClass) { try { T...
在本案例中,"ab_common_vo"是一个核心模块,为其他应用或服务提供公共的、标准的数据结构。 **序列化**是将对象的状态转换为可存储或传输的形式的过程,通常用于持久化数据或者在网络上传输对象。在Java中,实现...
"vo-utils"是一个基于TypeScript开发的工具库,主要针对数据对象(Value Object)操作提供便利的方法。在软件开发中,Value Object是一种设计模式,它强调对象的值而不是标识,通常用于封装不可变数据。TypeScript是...
标题中的“jdbc 连接数据库封装类,可返回map,或者vo(自用)”指的是一个自定义的Java类库,用于简化Java应用程序通过JDBC(Java Database Connectivity)与数据库的交互。这类库通常会提供方便的方法来执行SQL...
要将User对象转换为Map,我们可以创建一个通用的方法,这个方法接受任何Pojo类型的对象,然后遍历其属性并将其放入Map中。这里提供一个简单的工具类`Pojo2MapUtil`: ```java import java.lang.reflect.Field; ...
1. **XML配置文件**: 在构建左侧树的过程中,首先需要定义一个XML配置文件,该文件用于描述树的结构以及每个节点的信息。这些信息包括但不限于节点的ID、名称、图标、链接等属性。 - 示例配置文件可能包含以下结构...
在这个场景中,"值对象"(Value Object)通常指的是Java或类似语言中的一个类,它的实例包含了若干个基本类型的属性,如int和String。这些属性可以代表数据库表中的字段。通过将值对象转换为SQL语句,我们可以方便地...