- 浏览: 764018 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (241)
- 个人思考 (1)
- 数据库 (5)
- java基础 (32)
- 软件工程 (2)
- zk开源框架 (15)
- 设计模式 (25)
- javascript (12)
- css (9)
- UML (2)
- CMMI软件需求 (3)
- CMMI软件设计 (2)
- CMMI软件实现 (1)
- CMMI软件测试 (1)
- 正则表达式 (4)
- 系统日志配置 (4)
- 应用服务器 (1)
- spring (7)
- XML (6)
- java web (10)
- Ajax (3)
- RichFaces (14)
- 问题 (1)
- 评论文章 (2)
- fushioncharts (2)
- MAVN (4)
- jquery (26)
- Ext js学习 (2)
- 学习心得 (2)
- CSS兼容问题 (3)
- XSL-FOP (1)
- Quartz (0)
- OSGI (1)
- spring--security (6)
- apache tools (1)
- eclispe 小技巧 (2)
- Ant (1)
- 杂记 (1)
- spring3系列 (5)
- java cache (4)
- EffectiveJava (2)
- 代码重构 (0)
最新评论
-
psz6696:
可以说是超级简单的Demo了,可惜没有演示设值注入和构造注入两 ...
模拟spring中的ClassPathXmlApplicationContext类的实现 -
ziyourJava:
[flash=200,200][img][url][list] ...
spring security进级篇 V 自定义标签控制显示 -
ztw1122:
...
zk组件开发指南(目录) -
zjysuv:
容我说一句 在座的各位都是垃圾 spring 3.2以后的@C ...
三. spring mvc 异常统一处理 -
chengwu1201:
二 基于Spring的异常体系处理
今天用到Bean的复制..恰好有空,写了这个Bean操作类...用于Bean的复制..用到了apache的commons.BeanUtils包
代码如下,同样,如果懒的看,直接下载附件,里面包含了apache的commons.BeanUtils包
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.PropertyUtils; import java.beans.PropertyDescriptor; import java.io.*; import java.lang.reflect.InvocationTargetException; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 一个javaBean的操作类,主要用于Bean的复制,用到了apache的commons.BeanUtils包 * * @author jreadstone * */ public final class BeansHelper { public static final String CHINESE_DATE_FORMAT = "yyyy-MM-dd"; /** * 由旧的Bean,copy数据到新的Bean中,返回新的Bean * * @param oldObj * 老的javaBean * @param newObj * 新生成的javaBean * @param propertyArray * 二维数组,如: str[0][0]=oldName ,str[0][1] = newName, str[1] 是下一对属性 * @return */ public static Object copyBeans(Object oldObj, Object newObj, String[][] propertyArray) { newObj = copyBeans(oldObj, newObj); for (int i = 0; i < propertyArray.length; i++) { for (int t = 0; t < propertyArray[i].length; t++) { if (propertyArray[i].length < 2) return newObj; if (propertyArray[i][t] == null) return newObj; } try { Object indate = PropertyUtils.getNestedProperty(oldObj, propertyArray[i][0]); if (indate instanceof java.util.Date) { indate = new java.sql.Date(((java.util.Date) indate) .getTime()); } PropertyUtils.setNestedProperty(newObj, propertyArray[i][1], indate); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } return newObj; } /** * 由旧的Bean,copy数据到新的Bean中,返回新的Bean * * @param oldObj * 旧的Bean * @param newObj * 新的Bean * @return Object 返回新的JavaBean */ public static Object copyBeans(Object oldObj, Object newObj) { PropertyDescriptor[] oldPds = PropertyUtils .getPropertyDescriptors(oldObj); PropertyDescriptor[] newPds = PropertyUtils .getPropertyDescriptors(newObj); String[] propertys = new String[250]; int ss = 0; for (int i = 0; i < oldPds.length; i++) { PropertyDescriptor oldPd = oldPds[i]; for (int t = 0; t < newPds.length; t++) { PropertyDescriptor newPd = newPds[t]; if ((oldPd.getDisplayName().equals(newPd.getDisplayName())) && (!newPd.getDisplayName().equals("class"))) { propertys[ss] = oldPd.getDisplayName(); ss = ss + 1; break; } } } for (int i = 0; i < propertys.length; i++) { if (propertys[i] == null) return newObj; try { // System.out.println(propertys[i]); // 处理日期 Object indate = PropertyUtils.getNestedProperty(oldObj, propertys[i]); if (indate instanceof java.util.Date) { indate = new java.sql.Date(((java.util.Date) indate) .getTime()); } PropertyUtils.setNestedProperty(newObj, propertys[i], indate); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } return newObj; } /** * 复制Bean属性,自动完成java.util.Date到java.sql.Date、java.util.Date到String、String到java.util.Date的类型转换 * * * @param fromBean * @param toBean */ public static void copyBeansContainsStringDate(Object fromBean, Object toBean) { try { Set fromPropertys = BeanUtils.describe(fromBean).keySet(); Set toPropertys = BeanUtils.describe(toBean).keySet(); for (Iterator iterator = fromPropertys.iterator(); iterator .hasNext();) { String propertyName = iterator.next().toString(); if (!propertyName.equals("class")) { if (toPropertys.contains(propertyName)) { Object valueToBeCopied = PropertyUtils .getNestedProperty(fromBean, propertyName); String fromDataType = PropertyUtils .getPropertyDescriptor(fromBean, propertyName) .getPropertyType().getName(); String toDataType = PropertyUtils .getPropertyDescriptor(toBean, propertyName) .getPropertyType().getName(); if (fromDataType.equals("java.util.Date") && toDataType.equals("java.sql.Date") && valueToBeCopied != null) { valueToBeCopied = new java.sql.Date( ((java.util.Date) valueToBeCopied) .getTime()); } if (fromDataType.equals("java.util.Date") && toDataType.equals("java.lang.String") && valueToBeCopied != null) { if (valueToBeCopied != null) valueToBeCopied = (new SimpleDateFormat( CHINESE_DATE_FORMAT)).format( (Date) valueToBeCopied).toString(); } if (fromDataType.equals("java.lang.String") && toDataType.equals("java.util.Date") && valueToBeCopied != null) { if (valueToBeCopied != null && !valueToBeCopied.equals("")) valueToBeCopied = (new SimpleDateFormat( CHINESE_DATE_FORMAT)) .parse((String) valueToBeCopied); } if (fromDataType.equals("double") && toDataType.equals("java.lang.String") && valueToBeCopied != null) { valueToBeCopied = new DecimalFormat( "##########0.00").format(valueToBeCopied); } PropertyUtils.setNestedProperty(toBean, propertyName, valueToBeCopied); } } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } /** * 复制Bean属性 添加sql date到util date的转换 * * * @param fromBean * @param toBean */ public static void copyBeansContainsAll(Object fromBean, Object toBean) { try { Set fromPropertys = BeanUtils.describe(fromBean).keySet(); Set toPropertys = BeanUtils.describe(toBean).keySet(); for (Iterator iterator = fromPropertys.iterator(); iterator .hasNext();) { String propertyName = iterator.next().toString(); if (!propertyName.equals("class")) { if (toPropertys.contains(propertyName)) { Object valueToBeCopied = PropertyUtils .getNestedProperty(fromBean, propertyName); if (valueToBeCopied != null && !valueToBeCopied.equals("")) { String fromDataType = PropertyUtils .getPropertyDescriptor(fromBean, propertyName).getPropertyType() .getName(); String toDataType = PropertyUtils .getPropertyDescriptor(toBean, propertyName) .getPropertyType().getName(); if (fromDataType.equals("java.util.Date") && toDataType.equals("java.sql.Date")) { valueToBeCopied = new java.sql.Date( ((java.util.Date) valueToBeCopied) .getTime()); } if (fromDataType.equals("java.sql.Date") && toDataType.equals("java.util.Date")) { valueToBeCopied = new java.util.Date( ((java.sql.Date) valueToBeCopied) .getTime()); } if (fromDataType.equals("java.util.Date") && toDataType.equals("java.lang.String")) { valueToBeCopied = (new SimpleDateFormat( CHINESE_DATE_FORMAT)).format( (Date) valueToBeCopied).toString(); } if (fromDataType.equals("java.lang.String") && toDataType.equals("java.util.Date")) { valueToBeCopied = (new SimpleDateFormat( CHINESE_DATE_FORMAT)) .parse((String) valueToBeCopied); } if (fromDataType.equals("double") && toDataType.equals("java.lang.String")) { valueToBeCopied = new DecimalFormat( "##########0.00") .format(valueToBeCopied); } PropertyUtils.setNestedProperty(toBean, propertyName, valueToBeCopied); } } } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } /** * 由 javaBean 信息,得到javaBean中全部信息 Bean中的Set与其它Bean不能出来 * * @param obj * 实例化的 JavaBean * @return String javaBean中全部信息 */ public static String getBeansValue(Object obj) { // String _name = "Name :="; // String _value = "Value:="; StringBuffer sb = new StringBuffer(); // sb.append("BeanInfo:=" + obj.getClass().getName()); sb.append(obj.getClass().toString().substring(6) + "=["); PropertyDescriptor[] pds = PropertyUtils.getPropertyDescriptors(obj); for (int i = 0; i < pds.length; i++) { PropertyDescriptor pd = pds[i]; try { if (pd.getDisplayName().equals("class")) continue; if (((!pd.getPropertyType().getName().equals("long"))) && ((pd.getPropertyType() != Long.class)) && ((pd.getPropertyType() != Double.class)) && ((pd.getPropertyType() != Number.class)) && ((pd.getPropertyType() != String.class)) && ((pd.getPropertyType() != Integer.class)) && ((pd.getPropertyType() != Date.class)) && ((pd.getPropertyType() != java.sql.Date.class))) continue; sb.append("'" + pd.getDisplayName()); sb.append("="); sb.append(PropertyUtils.getNestedProperty(obj, pd .getDisplayName())); sb.append("',"); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } } if (sb.length() > (obj.getClass().toString().substring(6) + "=[") .length()) { sb.deleteCharAt(sb.length() - 1); } sb.append("],"); return sb.toString(); } /** * 由 javaBean 信息,得到javaBean中全部信息 Bean中的Set与其它Bean能显示出来 * * @param obj * 实例化的 JavaBean * @return String javaBean中全部信息 */ public static String getBeansValueAll(Object obj) { StringBuffer sb = new StringBuffer(); // 处理基本信息 sb.append("["); sb.append(getBeansValue(obj)); PropertyDescriptor[] pds = PropertyUtils.getPropertyDescriptors(obj); for (int i = 0; i < pds.length; i++) { PropertyDescriptor pd = pds[i]; if (pd.getDisplayName().equals("class")) continue; Object object = null; try { object = PropertyUtils.getNestedProperty(obj, pd .getDisplayName()); } catch (IllegalAccessException e) { e.printStackTrace(); // To change body of catch statement use // Options | File Templates. } catch (InvocationTargetException e) { e.printStackTrace(); // To change body of catch statement use // Options | File Templates. } catch (NoSuchMethodException e) { e.printStackTrace(); // To change body of catch statement use // Options | File Templates. } if (object == null) continue; // 处理Set 信息 if ((object.getClass() == Set.class) || (object.getClass() == HashSet.class) || (object.getClass() == TreeSet.class)) { sb.append(pd.getDisplayName() + "=["); int sbLength = sb.length(); Iterator it = ((Set) object).iterator(); while (it.hasNext()) { Object obj1 = it.next(); // sb.append("***********"); sb.append(getBeansValue(obj1)); } if (sb.length() > sbLength) { sb.deleteCharAt(sb.length() - 1); } sb.append("],"); } // 处理其它javaBean信息 if ((object.getClass() != Long.class) && (object.getClass() != Double.class) && (object.getClass() != String.class) && (object.getClass() != Float.class) && (object.getClass() != Set.class) && (object.getClass() != int.class) && (object.getClass() != HashSet.class) && (object.getClass() != Integer.class) && (object.getClass() != HashMap.class) && ((object.getClass() != Date.class)) && ((object.getClass() != java.sql.Date.class))) { // sb.append("***********"); sb.append(getBeansValue(object)); } } if (sb.length() > 1) { sb.deleteCharAt(sb.length() - 1); } sb.append("]"); return sb.toString(); } /** * javaBean对象Clone处理,这是深复制方法。(对象中的引用对象也会复制) 注意:不能进行串行化的对象一定要设成 transient * * @param ob * old对象 * @return ob 新对象 */ public static Object deepClone(Object ob) { ByteArrayOutputStream bo = new ByteArrayOutputStream(); Object newOb = null; try { ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(ob); ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray()); ObjectInputStream oi = new ObjectInputStream(bi); newOb = (oi.readObject()); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return newOb; } }
发表评论
-
Java transient关键字
2013-07-01 14:11 1289Java的serialization提供了一种持久化对象实例 ... -
java中的equals()和hashCode()详解
2013-06-23 17:21 1272java中对equals()和hashCode ... -
Java中synchronized 关键字的详解
2013-06-25 12:18 1755在了解cache的过程中,难免会涉及多线程的问题,涉及 ... -
PDF 报表合并
2012-08-14 15:34 1219import java.io.FileOutputStream ... -
java中 set,list,array(集合与数组)相互转换
2011-02-25 17:22 1893public static Object[] List2Arr ... -
互斥访问,限制最大数访问
2010-10-26 18:01 1424/** * @author jgao1 * 用法:P ... -
java中文件操作(递归删除空文件夹,删除过期文件)
2010-09-19 00:23 6423对文件的操作,大家都可能会写一些操作,其实Apache中Fil ... -
java IO类操作
2009-10-24 20:02 1726java的IO类操作主要包括如下几类 1、File类的使用 ... -
java中集合排序问题
2009-10-16 09:59 1720关键字: 集合排序 集合 排序 Iterator ... -
java中已知字体和字体大小确定字体的高度和长度
2009-09-21 17:27 4580public static void main(String ... -
java中路径处理分割
2009-09-12 16:30 5738在Java中处理一些路径相关的问题的时候,如要取出ie浏览器上 ... -
文件中的流
2009-09-07 21:08 14861、base64inputStram public clas ... -
classUtils
2009-08-09 22:55 2057import java.io.File; import ja ... -
java多线程
2009-07-09 21:43 2233java多线程是java基础中的重点,下面就j ... -
java的类集详解
2009-07-05 20:20 2137在学习类集之前,先明确一个概念,那就是啥叫重量级, ... -
java的反射机制
2009-07-04 11:44 1500Java反射机制是利用元类(相似于元数据的概念,元 ... -
抽象类和接口
2009-06-28 15:57 1815今天复习下抽象类和接口。做点重要的笔记 1、抽象 ... -
java中的clone机制及序列化
2009-06-25 22:50 1572在实际编程过程中,我们常常要遇到这种情况:有一个对象A ... -
java字符串的各种编码转换
2009-06-25 21:22 1338import java.io.UnsupportedEncod ... -
对于Java序列化的一次认识 转javaeye(感觉不错)
2009-06-21 22:21 1720其实这个问题简单思考一下就可以搞清楚,方法是不带状态的, ...
相关推荐
JavaBean操作类的学习是Java程序员必备的技能之一,它涉及属性设置、获取、事件处理等基本概念。以下是对JavaBean及其操作的详细解释: 1. **JavaBean规范**: - **命名规则**:通常,JavaBean的类名应该以"Bean...
JavaBean是Java编程中的一个概念,它是一种符合特定规范的Java类,通常用来封装业务逻辑和数据,便于对象的创建和使用。"Json一键转Javabean工具"是一个实用的开发辅助工具,它能够帮助Java开发者快速地将JSON格式的...
下面我们将详细探讨如何实现JavaBean到XML以及XML到JavaBean的转换,并介绍一个用于此目的的工具类和相关的jar包。 首先,JavaBean是一种符合特定规范的Java类,它通常具有公共的getter和setter方法,用于封装属性...
这表明提供的压缩包可能包含一个图形化的XML转Java Bean工具,用户可以通过运行这两个安装程序来在本地计算机上安装和使用该工具。 总的来说,"xml 转Java bean工具"是开发过程中非常实用的辅助工具,能够帮助...
通过配置Spring的Bean,可以轻松地集成Dozer,使得对象映射成为服务层的一个透明操作。 ### 10. 示例代码 ```java DozerBeanMapper mapper = new DozerBeanMapper(); Source source = new Source(); source.set...
在数据库操作中,JavaBean通常用于表示数据库表的行,每个属性对应表的一列。 1. **数据库连接**:在Java中,我们通常使用JDBC(Java Database Connectivity)来建立与数据库的连接。JDBC提供了一套API,使得Java...
总的来说,`javabean(DB)`指的是一个与数据库操作相关的JavaBean组件,它可能包含一系列用于数据库交互的方法和属性,是Java应用中数据持久化和业务处理的关键部分。在实际项目中,我们需要根据具体需求来设计和使用...
在本资源"javabean工具类.rar"中,提供了一个工具,该工具能够根据数据库表自动生成对应的JavaBean类,这大大简化了开发过程,减少了手动编写代码的工作量。支持的数据库包括MYSQL、ORACLE和SQLSERVER,涵盖了广泛的...
1. **@Configuration**:这个注解标记在一个类上,表示该类是一个配置类,Spring会将其视为一个配置源,就像XML配置文件一样。配置类可以包含多个@Bean方法,用于定义Bean。 2. **@Bean**:这个注解标记在方法上,...
JavaBean是一种符合特定规范的Java类,它主要用于数据封装和对象持久化,是Java Web开发中的基础组件。在实际开发中,通常需要将数据库中的每一列映射到JavaBean的属性上,以便于在业务逻辑中进行数据操作。而此工具...
Java Bean遵循一定的规范,比如它通常是公开类(public class),有一个无参数的构造函数,属性私有(private)并提供公共的getter和setter方法,以便于其他组件访问和修改其状态。此外,Java Bean还可以实现...
2. **创建验证器**:如果需要自定义验证规则,创建一个实现`ConstraintValidator`接口的类。 3. **获取验证器实例**:通过`Validation.buildDefaultValidatorFactory().getValidator()`获取`Validator`实例。 4. **...
* JavaBean 可以看成是一个黑盒子,即只需要知道其功能而不必管其内部结构的软件设备。 JavaBean 的优点 * 可以将功能、处理、值、数据库访问和其他任何可以用 java 代码创造的对象进行打包,并且其他的开发者可以...
JavaBean是一种遵循特定规则的Java类,它主要用于封装数据,便于数据的存储和传递。JavaBean通常具有以下特点: - 是公共类(public class) - 具有默认构造函数(无参数构造器) - 属性为私有(private),并...
在JSP中,我们可以声明一个JavaBean实例,并通过EL(Expression Language)或JSTL(JavaServer Pages Standard Tag Library)标签来访问和操作JavaBean的属性。例如,将查询结果保存在JavaBean中: ```jsp ...
例如,如果有一个`users`表,可以创建一个`UserBean`类,包含`id`、`username`、`password`等属性,并提供getter和setter方法。 4. **数据的CRUD操作**:通过DAO层,我们可以使用JavaBean进行数据库的增删改查操作...
这个工具类通常包含一个静态方法,接受ResultSet和JavaBean类型作为参数,然后遍历ResultSet,将数据填充到JavaBean对象中: ```java import java.sql.ResultSet; import java.sql.SQLException; public class ...
标题中提到的“一个javabean轻松实现对数据库的各种操作”,意味着我们将创建一个Java类,它包含与数据库交互的方法,例如添加、删除、更新和查询记录。这个JavaBean通常会连接到数据库,执行SQL语句,并返回结果。 ...
JavaBean 主要用于封装数据,以及提供对这些数据的操作方法。它们可以在不同的应用程序之间共享,并且可以很容易地被集成到更复杂的应用系统中。 **2. JavaBean 持久化的意义** 持久化是指将内存中的数据转换为...
JavaBean是Java编程中的一种设计模式,它代表一个对象,通常包含公共属性和方法,便于数据的封装和操作。在处理大量JSON数据时,手动创建对应的JavaBean类会非常耗时,因此出现了“根据json串自动生成JAVA BEAN工具...