`

J2EE常用工具类—Value Object工具类

阅读更多
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();
    }
}

 

分享到:
评论

相关推荐

    java常用工具类打包下载

    J2EE常用工具类—Value Object工具类 J2EE常用工具类—Json工具 J2EE常用工具类—Jdbc操作 J2EE常用工具类—Hibernate操作 J2EE常用工具类—Cookie操作 J2EE常用工具类—数组操作 J2EE常用工具类—时间处理...

    j2ee笔记

    首先,我们来看看J2EE模式中的Value Object(值对象)。Value Object是一个Java对象,它的主要职责是承载数据,常用于不同对象或层次之间的数据传递。它们通常不含业务逻辑,只包含公共属性或提供getter方法来获取...

    经典的j2ee笔记

    【J2EE基础概念】 J2EE(Java 2 Platform, Enterprise Edition)...了解和掌握J2EE中的Value Object、JSP、Request Controller、JavaBean、Custom Tag、Servlet和会话跟踪机制,是成为一名专业J2EE开发者的必备技能。

    J2EE设计模式.ppt

    DTO(Data Transfer Object)模式,又称为VO(Value Object)模式,主要用于在J2EE的多层架构间传输数据。DTO就像一个信使,将数据封装在普通的JavaBeans中,避免了直接传输数据库模型或业务对象带来的问题,特别是...

    J2ee设计模式.pdf

    典型的模式有DAO(数据访问对象)模式和Value Object模式等。 在提高性能和伸缩性的设计模式中,首先分析性能问题和伸缩性问题的原因,例如过载的数据库请求、系统资源分配不当等。然后,探讨如何应用特定的设计...

    J2EE武功秘籍

    - **HashTable**:线程安全,不允许null key和null value。 - **ConcurrentHashMap**:线程安全,允许一个null key和多个null values,性能高于HashTable。 **13. ThreadLocal 真正含义** - **ThreadLocal**:提供...

    J2EE PARTERN ppt

    DTO模式,也称为VO(Value Object)模式,主要用于在J2EE的多层架构之间传递数据。DTO是一个简单的JavaBean,它扮演着数据载体的角色,可以帮助减少数据传输过程中的网络延迟。 **数据建模** 在系统设计中,Model...

    J2EE 0.2—加入dao\\dataSource\\jdbcTemplate等联系方法

    在IT行业中,J2EE(Java 2 Platform, Enterprise Edition)是一个广泛使用的开源框架,用于构建企业级的分布式应用程序。本话题将详细讲解如何在J2DAO(Data Access Object)模式下,结合dataSource和jdbcTemplate,...

    J2EE-EJB UML

    - **GInterestVO**:Value Object(值对象),用于封装业务数据,作为表现层和业务层之间的接口。 - **GServiceLocator**:用于抽象JNDI(Java Naming and Directory Interface)的使用,隐藏了初始化上下文创建和...

    笔试试题-J2EE开发技术

    - **解析**:ORM(Object-Relational Mapping)是一种编程技术,用于把关系数据库的数据映射到对象上。Struts是一个MVC框架,主要用于构建Web应用的表示层,不属于ORM技术。而IBATIS和Hibernate则是常用的ORM框架。 ...

    J2EE设计模式-PPT(JDON)

    【DTO(Data Transfer Object)模式】或VO(Value Object)模式,用于在J2EE的多层次架构中传递数据。DTO就像一个消息载体,它可以是数据模型Model的实现,帮助减少网络传输开销,并且在系统复杂化后,可能由多个...

    Java工具类BeanUtils库介绍及实例详解

    Java工具类BeanUtils库介绍及实例详解 BeanUtils库是Apache软件基金会提供的一个Java工具类库,主要解决的问题是将对象的属性数据封装到对象中。在整个J2EE的编程过程中,我们经常会从各种配置文件中读取相应的数据...

    j2ee22:json

    标题 "j2ee22:json" 暗示了我们即将探讨的是关于J2EE平台下使用JSON(JavaScript Object Notation)进行数据交互的相关知识。JSON是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。在...

    java学习心得笔记.doc

    J2EE模式,如Value Object(值对象),在软件设计中起到关键作用。Value Object是一个不含业务逻辑,主要用于在不同对象或层级之间传递数据的Java对象。它可能包含公共属性或提供获取属性值的方法,简化数据传输。 ...

    新J2EE Tutorial第四章

    ### 新J2EE Tutorial第四章:Java API for XML Processing (JAXP) #### 知识点一:JAXP概述 - **定义**:Java API for XML Processing (JAXP) 是一组API,用于帮助Java应用程序处理XML数据。它不仅支持SAX(Simple...

Global site tag (gtag.js) - Google Analytics