坐标地址

看清楚-----那个飞的风筝才是我

 

vo与po

 场景:

控制层使用vo对象,数据层使用po对象,业务层负责将po对象转换成vo对象传递给控制层
vo和po对象之间转换可以用BeanUtils.copyProperties(vo, po);方法
如果数据层传递的是要给集合对象,譬如List集合,我是这么写的

Java code

?

1

2

3

4

5

6

7

8

List<DeptVO> voList=new ArrayList<DeptVO>();

List<DetPO> poList=dao.list();

DepartmentVO vo=null;

for(DeptPO po:poList){

    vo=new DepartmentVO();

    BeanUtils.copyProperties(vo, po);

    voList.add(vo);

}


结果符合需求,但是每个业务模块都使用这种写法,感觉效率太低了,
各位有没有好的解决方案或思路,能给介绍下,万分感谢

如果是spring的话可以采用AOP解决,可以将你的业务方法的返回值改为object,然后将需要转换的业务方法定义为切入点,使用spring的环绕增强 ,切入点你可以在spring的配置文件中定义

1

2

3

4

5

6

7

8

//通过MethodInterfceptor实现环绕增强,关键代码如下

public Object invoke(MethodInvocation invocation) throws Throwable{

try{

            List<DeptVO> voList=new ArrayList<DeptVO>();

              Object po=invocation.proceed();  //调用目标方法

              BeanUtils.copyProperties(vo, po); 

       }

  return  voList;//将你转换的后的对象返回出去 

}

自己写了个公共方法,勉强能用,分享下

Java code

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public static List copyList (List <? extends Object> poList , Class voClass){

         

        List voList=new ArrayList();

         

        Object voObj =null;

        for(Object poObj:poList){

            try {

                voObj = voClass.newInstance();

            } catch (InstantiationException | IllegalAccessException e) {

                e.printStackTrace();

            }

            BeanUtils.copyProperties(poObj, voObj);

            voList.add(voObj);

        }

        System.out.println("1111"+voList.size());

        return voList;

         

    }

 

调用

       List<DeptVO> voList=Util.copyList(poList, DeptVO.class);

 

posted on 2017-12-14 13:17  Augur  阅读(163)  评论(0编辑  收藏  举报

导航