ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 쿼리 결과값을 리턴받은 DTO를 가지고JSON구조 만드는 방법
    IT/개발 기록 2018. 10. 30. 20:08


    JSON구조 만들기






    환경구성



    1. Cafe, Menu DTO

    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
    public class Cafe {
        
        private String cafe_Id;
        private String cafe_Nm;
        private String cafe_img_Nm;
        private String cafe_img_Dir;
        private int price;
        private String lunch_YN;
        private String dinner_YN;
        private String oper_Time;
        private String build_Addr;
        private String build_Nm;
        private String build_Tel;
        private String build_Home;
        private String build_Key;
        private double build_X;
        private double build_Y;
        private double build_Score;
        private String use_YN;
     
        private Menu menu_L;
        private Menu menu_D;
        
    }
     
    cs

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class Menu {
        
        private String cafe_Id;
        private String menu_Date;
        private String menu_Div;
        private String menu_img_Nm;
        private String menu_img_Dir;
        private String rice;
        private String soup;
        private String side_Dish1;
        private String side_Dish2;
        private String side_Dish3;
        private String side_Dish4;
        private String side_Dish5;
        private String side_Dish6;
        private String side_Dish7;
        private String side_Dish8;
        private String dessert1;
        private String dessert2;
     
    }
     
    cs

    2. Cafe, Menu Table 각각의 결과값


    Cafe : Menu = 1: M 구조





    목표



    목표로 하는 Json 구조



    설명



    1. 각각의 쿼리 결과를 List로 받는다


    1
    2
    3
    4
    5
    List<Cafe> lists = new ArrayList<Cafe>();
    lists = session.selectList("CafeteriaSqlMap.selectcafes");
     
    List<Menu> menu = new ArrayList<Menu>();
    menu = session.selectList("CafeteriaSqlMap.selectmenus");
    cs


    2. 자신이 원하는 구조와 데이터로 예외처리를 걸어 1:M에서 1인 Cafe DTO에 담아준다


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for(int i=0; i<lists.size(); i++) {
        for(int j=0; j<menu.size(); j++) {
            if(lists.get(i).getCafe_Id().equals(menu.get(j).getCafe_Id())) {
                if("D".equals(menu.get(j).getMenu_Div())) {
                    lists.get(i).setMenu_D(menu.get(j));
                }else if("L".equals(menu.get(j).getMenu_Div())) {
                    lists.get(i).setMenu_L(menu.get(j));
                }
            }
        }    
    }
    return lists;
    cs


    3. 리턴받은 List<Cafe>를 json형식으로 출력해주는 다양한 방법을 통해 확인한다.




    생각해 볼 부분



    1. 

    회사에서는 dto를 만들지 않고 쿼리결과를 map으로 리턴받아 서비스단에서 가공하여 넥사크로 라이브러리를 통해 dataset구조로 넘기는데

    dto를 만들어 처리를 해보자고 마음을 먹고 하려는데

    'dto를 만들면 구조가 이미 정해져 있으니 One쿼리로 처리할 수 있지 않을까?'

    라고 생각해 Cafe, Menu테이블 조인을 걸어 결과값을 리턴받아 처리하려고 했지만 구글에 많은 글을 봐도

    그러한 내용은 나와있지 않았다... 방법이 없는건지...  


    1:M관계의 테이블 조인을 걸어 M관계가 되면 이 M의 결과를 dto구조와 맵핑해 자동으로 원하는 json형식으로 리턴!

    시간이 생기면 다시 한번 공부해봐될것 같다.


    2.

    json결과를 menu_L과 menu_D의 객체를 각각 두는 아래처럼 하는게 목표였지만


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
            "cafe_Id": "CAFE005",
            "cafe_Nm": "구디식당005",
            "menu_L": {
                "cafe_Id": "CAFE005",
                "menu_Date": "20181023",
                "menu_Div": "L",
            },
            "menu_D": {
                "cafe_Id": "CAFE005",
                "menu_Date": "20181023",
                "menu_Div": "D",
            }
    }
    cs

    사실, 항상 menu상세는 2개씩 나오니 아래처럼 구조를 잡아도 된다 
    이 데이터를 어떻게 활용할거냐? 의 맞춰 더 필요한 방법으로 만들면 될 것 같다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {
            "cafe_Id": "CAFE005",
            "cafe_Nm": "구디식당005",
            "menu": [{
                "cafe_Id": "CAFE005",
                "menu_Date": "20181023",
                "menu_Div": "L",
            },{
                "cafe_Id": "CAFE005",
                "menu_Date": "20181023",
                "menu_Div": "D",
            }]
    }
    cs







    댓글