- 浏览: 1595084 次
- 性别:
文章分类
- 全部博客 (2929)
- 非技术 (18)
- Eclipse (11)
- JAVA (31)
- 正则表达式 (0)
- J2EE (4)
- DOS命令 (2)
- WEB前端 (52)
- JavaScript (69)
- 数据库 (8)
- 设计模式 (0)
- JFreechart (1)
- 操作系统 (1)
- 互联网 (10)
- EasyMock (1)
- jQuery (5)
- Struts2 (12)
- Spring (24)
- 浏览器 (16)
- OGNL (1)
- WebService (12)
- OSGi (14)
- 软件 (10)
- Tomcat (2)
- Ext (3)
- SiteMesh (2)
- 开源软件 (2)
- Hibernate (2)
- Quartz (6)
- iBatis (2)
最新评论
PO即 Persistence Object
VO即 Value Object
VO和PO的主要区别在于:
VO是独立的Java Object。
PO是由Hibernate纳入其实体容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反应到实际数据库中。
实际上,这个VO被用作Data Transfer Object,即所谓的DTO。想必,VO就是Data Access Object ---DAO了啦。为什么要有这二者之分呢?如在传统的MVC架构中,位于Model层的PO,是否允许被传递到其他层面。由于PO的更新最终将被映射到 实际数据库中,如果PO在其他层面(如View层)发生了变动,那么可能会对Model层造成意想不到的破坏。
主要想说的还是如何进行二者之间的转换:
属性复制可以通过Apache Jakarta Commons Beanutils(http://jakarta.apache.org/commons/beanutils/
)组件提供的属性批量复制功能,避免繁复的get/set操作。down下来之后,里面的API DOC一应俱全。
对于一些无需处理其它处理(如过滤)直接用BeanUtilsBean.copyProperties方法,其参考如下:
public static void copyProperties(java.lang.Object dest,
java.lang.Object orig)
throws java.lang.IllegalAccessException,
java.lang.reflect.InvocationTargetExceptioCopy property values from the
origin bean to the destination bean for all cases where the property
names are the same.
范例1:
TUseranotherUser = new TUser();
user.setName( " Emma " );
user.setUserType( 1 );
try {
BeanUtils.copyProperties(anotherUser,user);
System.out.println( " UserName=> "
+ anotherUser.getName()
);
System.out.println( " UserType=> "
+ anotherUser.getUserType()
);
} catch (IllegalAccessExceptione) {
e.printStackTrace();
} catch (InvocationTargetExceptione) {
e.printStackTrace();
}
也可以利用其中的一些方法在copy属性的时候达到自己的要求,如:
范例2
*Createdon2006-4-26
*/
package com.util;
import java.beans.PropertyDescriptor;
import java.util.Collection;
import org.apache.commons.beanutils.PropertyUtils;
/***/ /** */ /***/ /**
*CopyUtil
* @author Jkallen
*/
public class CopyUtil {
/***/ /** */ /***/ /**
*Copypropertiesoforigtodest
*ExceptiontheEntityandCollectionType
* @param dest
* @param orig
* @return thedestbean
*/
public static ObjectcopyProperties(Objectdest,Objectorig) {
if (dest == null || orig == null ) {
return dest;
}
PropertyDescriptor[]destDesc = PropertyUtils.getPropertyDescriptors(dest);
try {
for ( int i = 0 ;i < destDesc.length;i ++ ) {
ClassdestType = destDesc[i].getPropertyType();
ClassorigType = PropertyUtils.getPropertyType(orig,destDesc[i].getName());
if (destType != null && destType.equals(origType)
&& ! destType.equals(Class. class )) {
if ( ! Collection. class .isAssignableFrom(origType)) {
try {
Objectvalue = PropertyUtils.getProperty(orig,destDesc[i].getName());
PropertyUtils.setProperty(dest,destDesc[i].getName(),value);
} catch (Exceptionex) {
}
}
}
}
return dest;
} catch (Exceptionex) {
throw new CopyException(ex);
// returndest;
}
}
/***/ /** */ /***/ /**
*Copypropertiesoforigtodest
*ExceptiontheEntityandCollectionType
* @param dest
* @param orig
* @param ignores
* @return thedestbean
*/
public static ObjectcopyProperties(Objectdest,Objectorig,String[]ignores) {
if (dest == null || orig == null ) {
return dest;
}
PropertyDescriptor[]destDesc = PropertyUtils.getPropertyDescriptors(dest);
try {
for ( int i = 0 ;i < destDesc.length;i ++ ) {
if (contains(ignores,destDesc[i].getName())) {
continue ;
}
ClassdestType = destDesc[i].getPropertyType();
ClassorigType = PropertyUtils.getPropertyType(orig,destDesc[i].getName());
if (destType != null && destType.equals(origType)
&& ! destType.equals(Class. class )) {
if ( ! Collection. class .isAssignableFrom(origType)) {
Objectvalue = PropertyUtils.getProperty(orig,destDesc[i].getName());
PropertyUtils.setProperty(dest,destDesc[i].getName(),value);
}
}
}
return dest;
} catch (Exceptionex) {
throw new CopyException(ex);
}
}
static boolean contains(String[]ignores,Stringname) {
boolean ignored = false ;
for ( int j = 0 ;ignores != null && j < ignores.length;j ++ ) {
if (ignores[j].equals(name)) {
ignored = true ;
break ;
}
}
return ignored;
}
}
可以看到,在范例1中通过方法copyProperties的时候,二者之间在的属性名必须相同(Copy property
values from the origin bean to the destination bean for all cases where
the property names are the same)。而在范例2中通过
Object value = PropertyUtils.getProperty(orig, destDesc[i].getName());
PropertyUtils.setProperty(dest, destDesc[i].getName(), value);
也是将源与目的之间copy相同的属性名。而VO是在前台显示,所以难免会用到PO中所不存在的属性值。比如PO中可能是一个对象,而VO中则可能是此对象的全部属性。其中的一些转换则需要依据前台需要针对性地处理啦!
Reference: Apache DOC and <>
发表评论
-
使用Java 动态代理实现AOP
2009-07-22 14:29 580目前整个开发社区对AOP(Aspect Oriented P ... -
Java中用动态代理类实现记忆功能
2009-07-22 14:30 680记忆是衍生自lisp,python, ... -
JAVA动态代理实现方法
2009-07-22 14:31 664在目前的Java开发包中包含了对动态代理的支持,但是其实现只支 ... -
对代理模式与Java动态代理类的理解(转)
2009-07-22 14:32 7421. 代理模式 代理模式的作用是:为其他对象 ... -
十年与java 相关的名字
2009-07-22 17:12 700RickardOberg:J2EE奇才 文/ ... -
搞懂java中的synchronized关键字
2009-07-28 17:48 578实际上,我关于java的基 ... -
字符串转化为unicode编码
2009-07-31 16:16 859package com.util; import java. ... -
移位运算符的规则及其数学意义
2009-07-31 18:02 729移位运算符就是在二进制的基础上对数字进行平移。按照平移的方 ... -
几个谜题,深入的了解java
2009-08-03 17:02 701在2009年的JavaOne大会上,Joshua Bloch和 ... -
一、我对java中编码的理解(摘)
2009-08-06 09:17 5941. 编码的产生 对电 ... -
四、深入下package,import:(摘)
2009-08-06 09:18 671注:因package,import涉及较多内容,另开一个帖子了 ... -
三、我对java中类路径的理解(摘)
2009-08-06 09:18 500Java中的类路径分“编译后的存放路径” 和 “运行时的查找路 ... -
二、我对java中类装载的理解(摘)
2009-08-06 09:18 7461.Java中的所有类,必须 ... -
java class文件格式解析(摘)
2009-08-06 09:19 7601.目的 ... -
关于 JavaBean 规范你还是应该知道的二三事
2009-08-06 09:22 793作为 Java 程序员,对于 JavaBean 也许你会说再熟 ... -
synchronized(this)的几个简单示例
2009-08-06 10:31 782一、当两个并发线程访问同一个对象object中的这个synch ... -
java压缩对象 与 对象的序列化
2009-08-07 17:39 642gzip是目前广泛应用的一种压缩方式,它具有很高的压缩比和压缩 ... -
Java常见问题集锦
2009-08-12 12:22 649如何设置Java 2(JDK1.2)的环境变量? 哪些Jav ... -
JavaFX尝鲜
2009-08-17 17:24 487java6出来以后,其一大 ... -
Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
2009-08-17 17:24 6701. 在Servlet/Filter等Servlet web环 ...
相关推荐
Java中 PO VO BO DTO DAO 和 POJO 关系图
NULL 博文链接:https://ewf-momo.iteye.com/blog/1738853
本人以前搞不懂这些o的区别,特意查找资料总结了一下,希望也可以帮到其他人
PO可以严格对应数据库表,一张表对映一个PO。... VO:value object值对象、view object视图对象 PO:持久对象 QO:查询对象 DAO:数据访问对象——同时还有DAO模式 DTO:数据传输对象——同时还有DTO模式
主要介绍了java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解,需要的朋友可以参考下
common-dto:数据交互层(VO、PO、BO、DTO等) service-user:用户服务提供者(用户注册、登录、权限等) operation-system:运营系统(服务消费者) 集成技术 spring spring mvc spring boot spring boot actuator...
java8 源码 ICS项目 模型篇 请求出入参 请求入参 所有Controller入参,一律使用 DTO结尾进行交互 所有 DTO 命名,前面采用驼峰命名,后面DTO大写 所有DTO内参数,如果是一组,请用List<类型>进行接口,尽量不用分隔符隔...
Nginx配置文件详解Linux 安装JenkinsJAVA 多线程详解java 多线程学习How to create a Hello World with IntelliJ and Aspect JJava各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分Java finally...
应用对象,Web层和Service层之间抽象的复用对象 VO View Object 显示层对象,Web向模板传输的对象 Query 数据查询对象 各层接收上层的查询请求 个人使用 简写 全写 说明 DO Data Object 数据库表映射类,DAO层向上...