BeanUtils.copyProperties();确实为我们做了很多事情,虽然不能完美完成深拷贝,但是对于 po、vo、dto 的拷贝已经足够用了。但是其还是有一些不够完美的地方。
不足几点如下:
-
不能拷贝 list,而拷贝 list 的情况又大量存在,因此会有许多重复代码。
for (S source : sources) { T target = new T(); copyProperties(source, target); list.add(target); }
-
有一些简单的查询,仅仅需要转换一下 vo 也需要 new Vo()。
public Vo findById(Integer id) { Vo vo = new Vo(); Po po = dao.findById(id); copyProperties(po, vo); return vo; }
-
这种拷贝方式是没有返回值的,jdk8 支持 stream() 操作之后,支持不是很友好,不方便 lambda 表达式的使用,因此我们决定通过集成 BeanUtils 类,自己造一个方便用的轮子。
1使用
我们将新创建一个工具类 BeanConvertUtils,使用如下,当我们要转换 po、vo 时,只需要:
// 使用前
public Vo findById(Integer id) {
Vo vo = new Vo();
Po po = dao.findById(id);
copyProperties(po, vo);
return vo;
}
// 使用后
public