본문 바로가기
넥사크로

넥사크로에서 post로 파라미터 던져서 스프링부트 jpa로 데이터 조회

by 인생여희 2019. 11. 23.
반응형

넥사크로에서 post 방식으로 조회조건을 파라미터로 던지고, 스프링 부트에서 받아서 jpa로 데이터베이스에 접근해서 해당 데이터를 넘겨주는 시나리오다.

1.시나리오
게시판 생성 목록을 조회 할것이다. 게시판을 관리하는 화면에는 게시판 그룹이 있고, 게시판 대상이 있다. 게시판 그룹은 매니져, 팀장, 팀원 등이고, 게시판 대상은 매니져1년차, 매니져2년차 등 그룹을 더욱 세분화한 데이터다. 먼저 서버단 로직이다.

@Override
public List<?> selectBoard(VariableList variableList){
 
    //객체 데이터를 넣어줄 리스트 rows
    List <Map<String,Object>> resultObject = new ArrrayList<>();
 
    //게시판 그룹 - 넥사크로에서 post 방식으로 파라미터를 넘겨준값. 배열로 넘어온다.
    String boardGroup = (String)variableList.valueList().get(0);
 
    //게시판 대상
    String boardTarget = (String)variableList.valueList().get(1);
 
 
    //조회한 데이터를 담아줄 리스트
    List<BoardType>boardTypeList = null; //초기화
 
    //그룹이 전체이고 상세 데이터가 없을때
    if(boardGroup.equals("A") && boardTarget.isEmpty()){
 
        //그룹이 전체(enum 타입의 값들이다. )이고, 상세대상이 없을 경우
        String jpqlByTarget = "SELECT B "
                            + "FROM Board B "
                            + "WHERE boardGroup IS NOT NULL";
 
        //entityManager 객체에서 createQuery() 메서드를 호출하면 쿼리가 생성.
        //TypedQuery는 반환되는 엔티티가 정해져 있을 때 사용한다.
        TypedQuery<Board> query = em.createQuery(jpqlByTarget,Board.class);
 
        //반환값 리스트에 넣기
        boardTypeList = query.getResultList();
 
    //그룹이 전체이고 상세데이터가 존재할때
    }else if(boardGroup.equals("A") && !boardTarget.isEmpty()){
 
            //상세 데이터는 :targetValue로 셋팅
            String jpqlByTarget = "SELECT B "
            + "FROM Board B "
            + "WHERE boardGroup IS NOT NULL"
            + "AND BoardTarget = :targetValue";
 
            TypedQuery<Board> query = em.createQuery(jpqlByTarget,Board.class);
 
            //파라미터 넣기
            //enum타입으로 파라미터를 넣어줘야지, 클라이언트에서 넘어오는 string 값 형태로 적어주면 안된다!
            query.setParameter("targetValue", BoardTarget.valueOf(boardTarget));   
            //반환값 리스트에 넣기
            boardTypeList = query.getResultList(); 
 
    //그룹이 전체가 아니고 (특정값이 있고) , 대상이 존재할때 , 그룹+ 대상조회 조건        
    }else if(!boardGroup.equals("A") && !boardTarget.isEmpty()){
 
 
            String jpqlByGroupAndTarget = "SELECT B "
                                        + "FROM Board B "
                                        + "WHERE boardGroup = :boardGroup"
                                        + "AND BoardTarget = :targetValue";
 
            TypedQuery<Board> query = em.createQuery(jpqlByGroupAndTarget,Board.class);
 
            //파라미터 넣기
            //enum타입으로 파라미터를 넣어줘야지, 클라이언트에서 넘어오는 string 값 형태로 적어주면 안된다!
            query.setParameter("boardGroup", BoardTarget.valueOf(boardGroup));   
            query.setParameter("targetValue", BoardTarget.valueOf(boardTarget));   
            //반환값 리스트에 넣기
            boardTypeList = query.getResultList(); 
    }
 
    //리스트에 행 하나 하나의 객체(Map 타입)를 담아준다. 
    for (Object object : boardTypeList) {
        resultObject.add(Utils.convertObjectToFlattenedMap(object));
    }
 
    return resultObject;
 
 
}

Repository 쪽과 service 쪽은 생략한다. 바로 Contrller 은 아래와 같다. 설명은 주석을 참고하자.

 
//저장, 수정
 
@PostMapping("/board/select")
//variableList 객체로 넥사에서 넘어온 파라미터를 받는다.
//중요한 부분은 리턴값이 NexacroResult이다.
public NexacroResult selectBoard (VariableList variableList){
 
    //넥사에서 받아줄 데이터셋 이름 : 저장만 할거라서 필요는 없다. 참고로!
    String datasetName = "ds_board";
 
    //넥사크로 객체를 생성한다.
    NexacroResult nexacroResult = new NexacroResult();
 
    //서비스단 로직 호출 + 넥사에서 넘어온 파리미터 넘겨주기
    nexacroResult.addDataSet(datasetName,boardSelect(variableList));
 
 
    return nexacroResult;
}

 

마지막으로 넥사크로에서 어떤형태로 던져줄까?

this.fn_selectBoard = function(group, target){
 
    this.fn_transaction(
                "selectBoard"                       //콜백
                ,"절대경로"
                ,"/board/select"
                ,"송신데이터 셋"
                ,"수신할 데이터셋"
                ,"group="+group + " " + "target=" + target //파라미터
                ,true
                ,true
 
    )
 
}
반응형

'넥사크로' 카테고리의 다른 글

dataset 참고  (134) 2019.11.28
넥사크로 Dataset에 대하여  (137) 2019.11.22

댓글