- 浏览: 81052 次
- 性别:
- 来自: 北京
文章分类
最新评论
转换基类:
public abstract class BaseConverter<V, P> { private static Logger logger = LoggerFactory.getLogger(BaseConverter.class); /** * 值对象与域对象之间属性复制 * * @param dto * 值对象 * @param domain * 域对象 * @param flag * 复制方向 */ protected void copyProperties(V dto, P domain, ConverterFlag flag) { switch (flag) { case PO2VO: copySameProperties(dto, domain); copyDiffPropertiesFromPO2VO(dto, domain); break; case VO2PO: copySameProperties(domain, dto); copyDiffPropertiesFromVO2PO(domain, dto); break; default: break; } } /** * 同名属性复制 * * @param target * 目标对象 * @param source * 来源对象 */ protected void copySameProperties(Object target, Object source) { try { RtsBeanUtil.copyProperties(target, source); } catch (IllegalAccessException e) { logger.error("对象属性值复制出错:原数据为{}, 目标数据为{}。", source, target); } catch (InvocationTargetException e) { logger.error("对象属性值复制出错:原数据为{}, 目标数据为{}。", source, target); } } /** * VO非同名属性复制到PO属性 * * @param target * 域对象 * @param source * 值对象 */ public abstract void copyDiffPropertiesFromVO2PO(P target, V source); /** * PO非同名属性复制到VO属性 * * @param target * 值对象 * @param source * 域对象 */ public abstract void copyDiffPropertiesFromPO2VO(V target, P source); }
日期转换工具:
public class DateConverter implements Converter { @SuppressWarnings("rawtypes") @Override public Object convert(Class type, Object value) { if (value == null) { return null; } // 相同类型不需要转换 if (type.equals(value.getClass())) { return value; } // 字符串转日期格式 if (value instanceof String) { return DateUtil.getDateFormatStr(((String) value).trim(), DateUtil.DATA_FORMAT_PATTERN); } // 其他不支持 return null; } }
注册自定义转换机制:
public class CustomerBeanUtil extends BeanUtils { private RtsBeanUtil() { } static { // 注册sql.date的转换器,即允许BeanUtils.copyProperties时的源目标的sql类型的值允许为空 ConvertUtils.register(new SqlDateConverter(), java.util.Date.class); // 注册util.date的转换器,即允许BeanUtils.copyProperties时的源目标的util类型的值允许为空 ConvertUtils.register(new DateConverter(), java.util.Date.class); } public static void copyProperties(Object target, Object source) throws InvocationTargetException, IllegalAccessException { BeanUtils.copyProperties(target, source); } }
转换例子:
public class ParamConverter extends BaseConverter<ParamDTO, ParamInfo> { public ParamDTO getParamDTO(ParamInfo apply) { ParamDTO paramDTO = new ParamDTO(); copyProperties(paramDTO, apply, ConverterFlag.PO2VO); return paramDTO; } public ParamInfo getParamInfo(ParamDTO paramDTO) { ParamInfo apply = new ParamInfo(); copyProperties(paramDTO, apply, ConverterFlag.VO2PO); return apply; } @Override public void copyDiffPropertiesFromVO2PO(ParamInfo target, ParamDTO source) { target.setParamCode(source.getParam().getCode()); target.setParamName(source.getParam().getText()); } @Override public void copyDiffPropertiesFromPO2VO(ParamDTO target, ParamInfo source) { target.setParam(ParamCode.findByCode(source.getParamCode())); } }
至此,VO与PO之间的转换完成,其中主要用的第三份工具 BeanUtil
发表评论
-
MyBatise 例子
2014-12-03 19:28 0param-mapper.xml <?xml ver ... -
删除重复记录的高效SQL
2014-11-07 11:55 427删除重复记录的高效SQL: delete from stud ... -
SQL 优化笔记
2014-11-07 10:36 0产品SQL优化主要从以下 ... -
spring ckeditor and prettify sample
2013-09-06 18:23 1068POM.XML <dependency> ... -
JMX 与Tomcat 集成
2013-08-13 21:31 746set "JAVA_OPTS=%JAVA_OPTS% ... -
maven 配置例子
2013-08-07 13:24 1028<?xml version="1.0& ... -
Spring transaction configuration.
2013-07-23 15:01 0Spring transaction configuratio ... -
spring integration summary
2013-07-05 09:35 763<?xml version="1.0" ... -
JDOME 特殊字符过滤
2013-02-27 13:14 714如果是因为这些特殊的控制字符,可以这样替换一下 xmlCon ... -
apache2.0和tomcat的整合
2010-07-02 15:05 851思科技术论坛's Archiver 思科技术论坛 » we ... -
myeclipse 6.0 注册码
2010-06-29 09:16 429myeclipse 6.0 注册码 过期时间2012年 use ...
相关推荐
在实体框架或ORM(对象关系映射)工具中,PO对象作为桥梁,将Java对象与数据库记录相互转换,使得开发者能够以面向对象的方式操作数据库数据。 ### 值对象(VO) 值对象(VO)是一种无状态的对象,它代表了一组值...
POJO、DTO、VO 等都是 Java 中常用的类别,但是它们之间的转换却是一件复杂的事情,需要我们对 Java 的反射机制、泛型、基本类型等有深入的了解。 首先,我们需要了解什么是 POJO、DTO、VO。POJO 是 Plain Ordinary...
这些概念并非孤立存在,它们之间存在着紧密的联系和相互转化的过程。例如,PO可以作为BO的一部分,用来存储和读取数据;VO则可能由多个PO组合而成,以满足特定的显示需求。在实际应用中,一个BO可能会调用多个DAO...
- VO与PO之间的相互转换可以使用`BeanUtils.copyProperties()`方法实现。 #### 十、延迟加载与非延迟加载 - **延迟加载**: - 如果采用了延迟加载机制但希望在某些情况下实现非延迟加载,可以通过`Hibernate....
"SSH框架详解" SSH框架是由Struts、Spring、Hibernate三个主体组件组成的,它们分别负责Web层、业务层和持久化层的工作。下面我们将详细介绍SSH框架中的每个...三者之间的相互协作,实现了整个系统的自动化和高效化。
这不仅涵盖了输入电压范围、输出电压、电流密度、电感等关键指标,还涉及了设计过程中考虑的各种物理量之间的相互关系和计算方法。 ### 一、基本设计参数 #### 输入电压范围 输入电压范围设定为90VAC到264VAC,这...
在项目开发中,业务分层会涉及不同类型的Bean之间需要相互转换,如PO与DTO之间,PO与VO之间等。手动编码setter/getter各个对应属性,会显得臃肿繁琐。通过Mapstruct框架可简单方便地完成这一工作。 如何引入Map...
数据的流向是:ActionFormBean接受用户的数据,Action将数据从ActionFormBean中取出,封装成VO或PO,再调用业务层的Bean类,完成各种业务处理后再Forward。 4. SSH框架的优点 Hibernate的最大好处就是根据数据库的...
例如,PO(Persistent Object)层就是用于将领域对象转化为数据库中的持久化对象,如ORM(对象关系映射)框架。视图对象(View Object,如VO)则是用于在展示层中传递数据的对象,它们通常用于界面渲染。 分层架构...
1. **解析**:对象关系映射(ORM)是一种将对象模型与数据库模型相互转换的技术。这部分内容提供了关于如何正确使用ORM框架的指导,以提高开发效率和代码质量。 #### 六、工程结构 1. **解析**:工程结构部分主要...