- 浏览: 1783435 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (528)
- java基础 (35)
- oracle (23)
- 项目管理 (10)
- 代码架构 (27)
- java线程与进程 (2)
- 盈利模式 (10)
- 性能测试 (1)
- Ophone (2)
- web (6)
- asp (0)
- php (1)
- c# (1)
- Ruby (0)
- jboss (4)
- java基础之面试篇 (7)
- 数据查询优化 (1)
- weblogic (3)
- EJB (1)
- EXT (6)
- jquery (8)
- struts2 (2)
- struts1 (1)
- css (1)
- javascript (4)
- SSI (9)
- linux (9)
- c++ (6)
- 网络安全 (3)
- swing (2)
- 嵌入式 (1)
- 图像处理(机器人智能技术) (1)
- vb (2)
- mysql (2)
- sqlserver (10)
- dephi (0)
- Android (4)
- hadoop (1)
- maven (4)
- mybatis (1)
- html5 (1)
- 算法 (0)
- 高并发架构总结 (1)
- 时事评论 (4)
- 有些话不能不说 (35)
- 琴棋书画 (0)
- 教育 (1)
- 创业需要的 (4)
- 产品经理需要的 (4)
- 小南那些青涩的文章 (9)
- 如何创新 (4)
- 历史借鉴之秦汉 (1)
- 历史借鉴之三国 (1)
- 历史借鉴之魏晋 (1)
- 历史借鉴之隋唐 (1)
- 历史借鉴之南北宋 (1)
- 历史借鉴之近现代史 (1)
- 好工具我来推荐 (4)
- 汇编 (14)
最新评论
-
bilimeng:
求教,ConcurrentHashMap不是线程安全的么,为啥 ...
架构师之jdk8-----------------ConcurrentHashMap快速构建本地缓存和单例模式 -
baiducctv5:
wtaisi 写道wtaisi 写道|||||||||
spring aop中的propagation的7种配置的意思 -
zhangdong92:
另外内存泄漏一般也不是指计算时溢出。而是指某些对象已经不再使用 ...
java基础之面试篇三---int,float,long,double取值范围,内存泄露 -
zhangdong92:
Long.MAX_VALUE应该是(2^63)-1,而不是64 ...
java基础之面试篇三---int,float,long,double取值范围,内存泄露 -
nannan408:
java-lxm 写道好湿好湿好湿谢谢: )。
游南巅之晚秋
1.前言.
如题,bean不能强转,只能对应转换.一共有三种常用方法.
2.代码.
(1)BeanCopier
(2)Converter
(3)自己写方法fieldName
3.注意.
推荐用第一种,没有的属性是null.
如题,bean不能强转,只能对应转换.一共有三种常用方法.
2.代码.
(1)BeanCopier
public class AccountEntity { private int id; private Timestamp createTime; private BigDecimal balance; // Getters and setters are omitted } public class AccountDto { private int id; private String name; private String createTime; private String balance; // Getters and setters are omitted } public class BeanCopierConverterTest { @Test public void noConverterTest() { AccountEntity po = new AccountEntity(); po.setId(1); po.setCreateTime(new Timestamp(10043143243L)); po.setBalance(BigDecimal.valueOf(4000L)); BeanCopier copier = BeanCopier.create(AccountEntity.class, AccountDto.class, false); AccountDto dto = new AccountDto(); copier.copy(po, dto, null); Assert.assertNull(dto.getCreateTime()); // 类型不同,未拷贝 Assert.assertNull(dto.getBalance()); // 类型不同,未拷贝 } }
(2)Converter
package net.sf.cglib.core; public interface Converter { // value 源对象属性,target 目标对象属性类,context 目标对象setter方法名 Object convert(Object value, Class target, Object context); } @Test public void converterTest() { AccountEntity po = new AccountEntity(); po.setId(1); po.setCreateTime(Timestamp.valueOf("2014-04-12 16:16:15")); po.setBalance(BigDecimal.valueOf(4000L)); BeanCopier copier = BeanCopier.create(AccountEntity.class, AccountDto.class, true); AccountConverter converter = new AccountConverter(); AccountDto dto = new AccountDto(); copier.copy(po, dto, converter); Assert.assertEquals("2014-04-12 16:16:15", dto.getCreateTime()); Assert.assertEquals("4000", dto.getBalance()); } static class AccountConverter implements Converter { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @SuppressWarnings("rawtypes") @Override public Object convert(Object value, Class target, Object context) { if (value instanceof Integer) { return (Integer) value; } else if (value instanceof Timestamp) { Timestamp date = (Timestamp) value; return sdf.format(date); } else if (value instanceof BigDecimal) { BigDecimal bd = (BigDecimal) value; return bd.toPlainString(); } return null; } }
(3)自己写方法fieldName
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.servlet.http.HttpServletRequest; public class Parameter2JavaBean { /** * 把req中的数据按照对象的属性取出来并set到对象当中并返回 * */ public static <E> E setParameter2JavaBean(HttpServletRequest req, E e) { Class<?> clazz = e.getClass(); Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { Class<?> typeClass = field.getType(); String value = req.getParameter(field.getName()); if (value != null && !"".equals(value)) { setValue(e, clazz, field, typeClass, value); } } return e; } /** * 调用set方法把值set到对象当中 * * @param obj 指定对象 * @param * clazz 对象的class * * @param field 需要设置值的field对象 * * @param typeClass field的类型的class * * @param value 对应的值 * @param e * @return */ private static void setValue(Object obj, Class<?> clazz, Field field, Class<?> typeClass, String value) { String fieldName = field.getName(); String methodName = "set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); try { Method method = clazz.getDeclaredMethod(methodName, new Class[] { typeClass }); method.invoke(obj, new Object[] { getClassTypeValue(typeClass, value) }); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } private static Object getClassTypeValue(Class<?> typeClass, String value) { if (typeClass == int.class) { if (value.equals("")) { return 0; } return Integer.parseInt(value); } else if (typeClass == short.class) { if (value.equals("")) { return 0; } return Short.parseShort(value); } else if (typeClass == byte.class) { if (value.equals("")) { return 0; } return Byte.parseByte(value); } else if (typeClass == double.class) { if (value.equals("")) { return 0; } return Double.parseDouble(value); } else if (typeClass == boolean.class) { if (value.equals("")) { return false; } return Boolean.parseBoolean(value); } else if (typeClass == float.class) { if (value.equals("")) { return 0; } return Float.parseFloat(value); } else if (typeClass == long.class) { if (value.equals("")) { return 0; } return Long.parseLong(value); } else { return typeClass.cast(value); } } }
3.注意.
推荐用第一种,没有的属性是null.
发表评论
-
架构师之jdk8-----------------ConcurrentHashMap快速构建本地缓存和单例模式
2015-06-04 15:33 91211.前言。 本地缓存和复杂的单例写起来不仅效率低下,而且 ... -
架构师之jdk8-------------------集合互相转换集锦
2015-06-04 11:34 16701.前言. 如题.这里主要介绍list,map等常用集合的 ... -
架构师之hibernate-------------------mysql类型对应java转换
2015-06-02 18:29 16911.前言. 如题. 2.代码. Hibernat ... -
架构师之jetty使用----------------问题集锦
2015-05-27 10:11 14911.前言. 如题. 2.问题描述. (1)com.op ... -
架构师之json-----------通过path查找指定数据
2015-03-31 14:29 26931.前言 如题。 2.代码. imp ... -
架构师之mybatis-----timestamp转date丢失精度问题
2015-03-26 14:53 46221.前言. 如题. 2.问题描述. 如果mappe ... -
架构师之数字判断-----------------怎么判断一个字符串是个数字
2015-03-24 14:43 10081.前言. 如题. 2.代码. 方法1: publ ... -
架构师之enum枚举之(二)--------直接判断String是否属于枚举中的一个
2015-03-22 21:17 83581.前言。 如题。 2.代码。 enum E ... -
架构师之jdk的bug排查(一)---------------split的点号陷阱
2015-03-20 15:01 34161.前言. jdk1.6的lang包的split方法是有 ... -
架构师之enum枚举之(一)-----------如何判断枚举和字符串相等(最简便方法)
2015-03-20 10:47 81781.前言. 如题. 2.代码. (1)代码串 publ ... -
架构师之maven(三)---------junit测试可能遇到的问题
2015-03-18 10:31 18311.前言. 如题. 2.代码. (1)类型转换错误 (1) ... -
架构师之maven(二)junit4.11+spring4.1的测试配置
2015-03-16 17:15 37391.前言. maven的junit测试是需要遵守一些规则 ... -
spring官方下载地址
2015-03-16 10:10 1175SPRING官方网站改版后,建议都是通过 Maven和Grad ... -
java 序列化和反序列化(针对字符串的例子)
2014-11-04 14:09 42651.前言. 摘自:http://blog.csdn.ne ... -
架构师之Dos命令之setx-------常用来设置系统环境变量
2014-08-25 10:19 74771.前言。 如题。 2.内容。 用法为形如 @SET ... -
linux集群之----------设置磁盘缓冲参数
2014-07-29 10:59 71141.前言。 如题。linux ... -
spark+hadoop+cenos6.5+VitualBox4.3.6整合开发(一)安装centos6.5
2014-01-17 10:04 33351.前言。 首先先感谢cctv和http://zhou ... -
axis2-如何已知uri或者xml生成客户端?
2013-11-06 10:23 27391.前言 首先,需要下载axis2工具包,见附件,我这里是 ... -
让ie6,7,8支持canvas,css3等主流html5技术
2013-06-18 13:02 293961.前言。 ie6,7,8支持htm ... -
Ehcached等与Oscached的比较
2013-05-22 16:05 54871.前言. j2ee可以有很多Cache策略,Ehcach ...
相关推荐
架构师职能图----------------------------------
架构师学习指南-高级架构师必修学习视频架构师学习指南-高级架构师必修学习视频
Bean-Struts框架是Apache Struts的扩展,它强调了业务逻辑层与视图层之间的数据交换,通过JavaBeans作为数据载体,实现了模型与视图的解耦。这一框架的核心思想在于,将应用程序的控制流程和业务逻辑分离,使得...
系统架构师1-知识结构.png软考:系统架构师1-知识结构.png软考:系统架构师1-知识结构.png软考:系统架构师1-知识结构.png软考:系统架构师1-知识结构.png软考:系统架构师1-知识结构.png软考:系统架构师1-知识结构...
高软-系统架构设计师-考点整理 高软-系统架构设计师-考点整理高软-系统架构设计师-考点整理高软-系统架构设计师-考点整理高软-系统架构设计师-考点整理高软-系统架构设计师-考点整理高软-系统架构设计师-考点整理高...
《系统架构设计师教程-第4版》是一本深入探讨系统架构设计的专业教程,适用于准备进行系统架构设计学习或备考系统架构设计师资格认证的读者。本书全面涵盖了系统架构设计的基础理论、核心概念、最佳实践以及最新技术...
- **合同**:Web Bean 规定了容器与 Bean 之间的交互模式,包括 Bean 的创建、销毁以及依赖注入等操作。 - **与其他规范的关系**: - **与 Java EE 平台的关系**:Web Bean 是 Java EE 6 的一部分,其目标是在 Java...
在这个项目中,`JSP-Bean-Servlet`很可能包含了一个或多个JSP文件,用于展示用户界面,并调用JavaBeans来处理数据和业务逻辑。 JavaBeans是Java编程中的一个核心概念,它是一种符合JavaBeans规范的Java类,具有属性...
分布式架构网上商城-分布式架构网上商城系统-分布式架构网上商城系统源码-分布式架构网上商城管理系统-分布式架构网上商城管理系统java代码-分布式架构网上商城系统设计与实现-基于springboot的分布式架构网上商城...
分布式架构网上商城-分布式架构网上商城系统-分布式架构网上商城系统源码-分布式架构网上商城管理系统-分布式架构网上商城管理系统java代码-分布式架构网上商城系统设计与实现-基于springboot的分布式架构网上商城...
适用于centos 7 redhat 7 x86架构操作系统升级更新openssh 9.7 版本,修复安全漏洞 此包为二进制rpm包,包含ssh-copy-id命令 2024年3月11日 官方发布9.7版本,此包基于官方源码制作,无ssl信息显示。
适用于centos 7 redhat 7 x86架构的二进制openssh rpm包,版本9.7p1 2024年3月11日官方发布9.7版本,内含ssh-copy-id命令,安装后显示openssl版本,此包基于openssl 1.1.1w制作,因此安装后会显示1.1.1w版本的...
软件架构师必读
Linux运维-运维构架师-day37-综合架构模块-综合架构开场-oldboy-03.综合架构图解.mp4
AWS-SAA-C03是Amazon Web Services(AWS)提供的助理架构师认证考试,旨在测试考生对AWS云服务的理解和应用能力。此题库是针对2023年9月28日更新的,包含了全面的AWS架构知识,适用于备考这个认证的考生。以下是基于...
架构之美--开放环境下的网络架构
### 企业架构师vs解决方案架构师vs领域架构师 #### 一、企业架构的重要性与定义 随着信息技术的不断发展,企业架构(Enterprise Architecture, EA)逐渐成为企业获取竞争优势的关键途径之一。通过对信息技术的有效...