VO에서 값을 가져오기 위해 vo.get이름() 이런식으로 가져오는데

getdata1 ~getdata32 이렇게 숫자증가단위로 여러개가 있는 경우

for문을 돌리면서 가져오고 싶을때가 있다.

vo를 for문으로 값을 가져오기 위해 자바 리플렉션을 사용했다.

저렇게 하면 메소드를 문자열로 바꿔서 불러올수가 있다.

 

map형식을 써도 되긴 하지만 애초에 vo형태를 잡아놓은것도 있고 다른데서 쓰고 있기 때문에

리플렉션의 비용이 조금더 들어가더라도 아래와 같은 방법을 사용 했다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    
        for(int count=1; count < 32; count++){
            
            String time = count+"";
            if(time.length()==1){
                time = "0"+count;
            }
            Class<?> c = vo.getClass();
            
            String value = null;
            try {
                Method method = c.getMethod("getT"+time);
                try {
                    value =  (String) method.invoke(vo);
                } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (NoSuchMethodException | SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            HisDataVO updateVO = new HisDataVO();
        
            if(value.equals("")){
                value = null;
            }
            System.out.println(time+"회 :"+value);
            updateVO.setCOUNT(value);
            updateVO.setRECORD_DAY(vo.getRECORD_MON()+time);
            updateVO.setBUILDING_ID(vo.getBUILDING_ID());
            try {
                 result = goalSettingService.updateHead(updateVO);
            } catch (Exception e) {
                // TODO: handle exception
                System.out.println(e);
                System.out.println("업데이트 실패 "+time+"회");
                msg = "수정 실패 하였습니다";
            }
            
            
        }
        
cs

 

 

+ Recent posts