package cn.org.jshuwei.j2ee.util;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
/**
* Value Object工具类<br>
* 使用实例:<br>
*
* <pre>
* Person类:
* package cn.org.jshuwei.j2ee.util.test;
*
* public class Person {
* private String id;
* private User u;
*
* public Person(String id, User u) {
* super();
* this.id = id;
* this.u = u;
* }
*
* public String getId() {
* return id;
* }
*
* public void setId(String id) {
* this.id = id;
* }
*
* public User getU() {
* return u;
* }
*
* public void setU(User u) {
* this.u = u;
* }
*
* }
* User类:
* package cn.org.jshuwei.j2ee.util.test;
*
* public class User {
* private String userName;
* private String userPass;
* private Integer userAge;
*
* public User(){
*
* }
*
* public User(String userName, String userPass, int userAge) {
* super();
* this.userName = userName;
* this.userPass = userPass;
* this.userAge = userAge;
* }
*
* public String getUserName() {
* return userName;
* }
* public void setUserName(String userName) {
* this.userName = userName;
* }
* public String getUserPass() {
* return userPass;
* }
* public void setUserPass(String userPass) {
* this.userPass = userPass;
* }
* public Integer getUserAge() {
* return userAge;
* }
* public void setUserAge(Integer userAge) {
* this.userAge = userAge;
* }
* }
* 测试调用类:
* package cn.org.jshuwei.j2ee.util.test;
*
* import java.util.Map;
*
* import cn.org.jshuwei.j2ee.util.VOUtils;
*
* public class Test {
*
* public static void main(String[] args) {
* User u = new User("huwei","123",23);
* Person p = new Person("1",u);
* Map<String,Object> map = VOUtils.beanToMap(p,"cn.org.jshuwei.j2ee.util.test");
* for(Map.Entry<String, Object> entry : map.entrySet()){
* String value = entry.getValue().toString();
* String key = entry.getKey();
* System.out.println(key+"----"+value);
* }
* u = new User();
* u.setUserName("jshuwei");
* System.out.println(VOUtils.beanToWhereSql(u));
* }
* }
* </pre>
*
* @author huwei(jshuwei.org.cn)
*
*/
public class VOUtils {
/**
* 将实体类对象的属性值转换成属性名为key,属性值为value的Map<String,String>并返回
*
* @param entity
* 需要转换的实体类对象
* @return 转换后的Map<String,String>
*/
@SuppressWarnings("unchecked")
public static Map<String, String> beanToMap(Object entity) {
Class c = entity.getClass();
Object fieldValue = null;
String fieldName = null;
Field[] fields = c.getDeclaredFields();
Map<String, String> fieldMap = new HashMap<String, String>();
for (Field field : fields) {
fieldName = field.getName();
if (field.getModifiers() == Modifier.PUBLIC) {
try {
fieldValue = field.get(entity);
} catch (Exception e) {
e.printStackTrace();
}
} else {
fieldValue = invokeGet(entity, fieldName);
}
fieldMap.put(fieldName, fieldValue == null ? "" : fieldValue
.toString());
}
return fieldMap;
}
/**
* 将实体类对象的属性值转换成属性名为key,属性值为value的Map<String,Object>并返回.
* 其中实体类中有其他自定义对象类型的属性。
*
* @param entity
* 需要转换的实体类对象
* @param packageName
* 自定义对象类型属性的对象所在的包名
* @return 转换后的Map<String,Object>
*/
@SuppressWarnings("unchecked")
public static Map<String, Object> beanToMap(Object entity,
String packageName) {
Class c = entity.getClass();
Object fieldValue = null;
String fieldName = null;
Field[] fields = c.getDeclaredFields();
Map<String, Object> fieldMap = new HashMap<String, Object>();
for (Field field : fields) {
fieldName = field.getName();
if (field.getModifiers() == Modifier.PUBLIC) {
try {
fieldValue = field.get(entity);
} catch (Exception e) {
e.printStackTrace();
}
} else {
fieldValue = invokeGet(entity, fieldName);
}
if (fieldValue != null
&& fieldValue.getClass().getName().startsWith(packageName)) {
fieldValue = beanToMap(fieldValue, packageName);
}
fieldMap.put(fieldName, fieldValue);
}
return fieldMap;
}
private static Object invokeGet(Object entity, String fieldName) {
try {
Method method = entity.getClass().getMethod(
"get" + StringUtil.firstToUpper(fieldName));
return method.invoke(entity);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将一个实体对象(已有部分属性赋值)转换成有值属性组成的条件查询SQL语句<br>
* <font color="red">注意:需要转换的对象的属性若是基本类型则得用包装类代替</font>
*
* @param entity
* 需要转换的实体类对象
* @return 转换后的条件查询SQL语句字符串
*/
public static String beanToWhereSql(Object entity) {
StringBuffer ret = new StringBuffer(" where 1=1");
Map<String, Object> map = beanToMap(entity, "cn.org.jshuwei.j2ee.util");
for (Map.Entry<String, Object> entry : map.entrySet()) {
Object value = entry.getValue();
String key = entry.getKey();
if (value != null) {
ret.append(" and ").append(key).append("=").append(value);
}
}
return ret.toString();
}
}
分享到:
相关推荐
J2EE常用工具类—Value Object工具类 J2EE常用工具类—Json工具 J2EE常用工具类—Jdbc操作 J2EE常用工具类—Hibernate操作 J2EE常用工具类—Cookie操作 J2EE常用工具类—数组操作 J2EE常用工具类—时间处理...
首先,我们来看看J2EE模式中的Value Object(值对象)。Value Object是一个Java对象,它的主要职责是承载数据,常用于不同对象或层次之间的数据传递。它们通常不含业务逻辑,只包含公共属性或提供getter方法来获取...
【J2EE基础概念】 J2EE(Java 2 Platform, Enterprise Edition)...了解和掌握J2EE中的Value Object、JSP、Request Controller、JavaBean、Custom Tag、Servlet和会话跟踪机制,是成为一名专业J2EE开发者的必备技能。
DTO(Data Transfer Object)模式,又称为VO(Value Object)模式,主要用于在J2EE的多层架构间传输数据。DTO就像一个信使,将数据封装在普通的JavaBeans中,避免了直接传输数据库模型或业务对象带来的问题,特别是...
典型的模式有DAO(数据访问对象)模式和Value Object模式等。 在提高性能和伸缩性的设计模式中,首先分析性能问题和伸缩性问题的原因,例如过载的数据库请求、系统资源分配不当等。然后,探讨如何应用特定的设计...
- **HashTable**:线程安全,不允许null key和null value。 - **ConcurrentHashMap**:线程安全,允许一个null key和多个null values,性能高于HashTable。 **13. ThreadLocal 真正含义** - **ThreadLocal**:提供...
DTO模式,也称为VO(Value Object)模式,主要用于在J2EE的多层架构之间传递数据。DTO是一个简单的JavaBean,它扮演着数据载体的角色,可以帮助减少数据传输过程中的网络延迟。 **数据建模** 在系统设计中,Model...
在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是一个广泛使用的开源框架,用于构建企业级的分布式应用程序。本话题将详细讲解如何在J2DAO(Data Access Object)模式下,结合dataSource和jdbcTemplate,...
- **GInterestVO**:Value Object(值对象),用于封装业务数据,作为表现层和业务层之间的接口。 - **GServiceLocator**:用于抽象JNDI(Java Naming and Directory Interface)的使用,隐藏了初始化上下文创建和...
- **解析**:ORM(Object-Relational Mapping)是一种编程技术,用于把关系数据库的数据映射到对象上。Struts是一个MVC框架,主要用于构建Web应用的表示层,不属于ORM技术。而IBATIS和Hibernate则是常用的ORM框架。 ...
【DTO(Data Transfer Object)模式】或VO(Value Object)模式,用于在J2EE的多层次架构中传递数据。DTO就像一个消息载体,它可以是数据模型Model的实现,帮助减少网络传输开销,并且在系统复杂化后,可能由多个...
Java工具类BeanUtils库介绍及实例详解 BeanUtils库是Apache软件基金会提供的一个Java工具类库,主要解决的问题是将对象的属性数据封装到对象中。在整个J2EE的编程过程中,我们经常会从各种配置文件中读取相应的数据...
标题 "j2ee22:json" 暗示了我们即将探讨的是关于J2EE平台下使用JSON(JavaScript Object Notation)进行数据交互的相关知识。JSON是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。在...
J2EE模式,如Value Object(值对象),在软件设计中起到关键作用。Value Object是一个不含业务逻辑,主要用于在不同对象或层级之间传递数据的Java对象。它可能包含公共属性或提供获取属性值的方法,简化数据传输。 ...
### 新J2EE Tutorial第四章:Java API for XML Processing (JAXP) #### 知识点一:JAXP概述 - **定义**:Java API for XML Processing (JAXP) 是一组API,用于帮助Java应用程序处理XML数据。它不仅支持SAX(Simple...