투케이2K

28. (spring/스프링) mybatis 오라클 프로시저 호출 및 다중 아웃 out 메시지, 커서 cursor 데이터 확인 실시 본문

Spring

28. (spring/스프링) mybatis 오라클 프로시저 호출 및 다중 아웃 out 메시지, 커서 cursor 데이터 확인 실시

투케이2K 2021. 9. 9. 08:03

[개발 환경 설정]

개발 툴 : inteli j

개발 언어 : spring


[소스코드 (mybatis) : mappers >> DB_Mapper.xml]

    <!-- 프로시저 호출 : input / output [msg : cursor] : hashmap 형태로 받음 -->
    <resultMap id="PRO_TEST_MAP" type="hashmap" />
    <select id="PRO_TEST_PROCEDURE" parameterType="hashmap" statementType="CALLABLE">
        <![CDATA[
        { call PRO_TEST (
                #{input_number},
                #{input_name},

                #{out_msg_message, mode=OUT, jdbcType=VARCHAR, javaType=string},
                #{out_msg_title, mode=OUT, jdbcType=VARCHAR, javaType=string},
                #{out_msg_date, mode=OUT, jdbcType=VARCHAR, javaType=string},

                #{out_cursor_table, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=PRO_TEST_MAP}
            )}
        ]]>
    </select>

[소스코드 (인터페이스) : mapper >> DB_Mapper]

    // [DBMapper.xml 쿼리에서 선언한 변수 개수 및 타입에 맞게 파라미터 선언]
    void PRO_TEST_PROCEDURE(Map map); // [void 설정]
​

[소스코드 (서비스) : service >> DB_Service]

    // [DBMapper 인터페이스 지정 >> Controller 리턴 값 지정]
    public Map PRO_TEST_PROCEDURE(String number, String name) {
        Map map = new HashMap<>();
        map.put("input_number", number); // TODO [인풋 값]
        map.put("input_name", name); // TODO [인풋 값]

        dbMapper.PRO_TEST_PROCEDURE(map); // TODO [프로시저 호출 결과가 맵에 담김]
        return map; // 컨트롤러에 리턴 실시
    }
​

[소스코드 (컨트롤러) : controller >> DB_API_Controller]

    // [post body json : Map 방식]
    // [경로 지정 : http://localhost:7000/PRO_TEST_PROCEDURE]
    // [json : {"number" : "1", "name" : "투케이"} ]

    @PostMapping("/PRO_TEST_PROCEDURE")
    public String PRO_TEST_PROCEDURE(@RequestBody Map<String, String> param) {
        System.out.println("\n");
        System.out.println("=======================================");
        System.out.println("[DB_API_Controller] : [PRO_TEST_PROCEDURE] : [start]");
        System.out.println("[request keySet] : " + String.valueOf(param.keySet()));
        System.out.println("[request number] : " + String.valueOf(param.get("number")));
        System.out.println("[request name] : " + String.valueOf(param.get("name")));
        System.out.println("=======================================");
        System.out.println("\n");

        // [API 호출 인풋으로 들어온 데이터 변수에 담음]
        String number = String.valueOf(param.get("number"));
        String name = String.valueOf(param.get("name"));



        // [서비스 호출 및 DB 프로시저 리턴 값 받음]
        Map map = dbService.PRO_TEST_PROCEDURE(number, name); // 인풋값 삽입 실시

        String out_message = String.valueOf(map.get("out_msg_message")); // 아웃 메시지 가져온다
        String out_title = String.valueOf(map.get("out_msg_title")); // 아웃 메시지 가져온다
        String out_date = String.valueOf(map.get("out_msg_date")); // 아웃 메시지 가져온다

        String out_cursor = String.valueOf(map.get("out_cursor_table")); // 아웃 커서 가져온다



        // [api 결과 반환]
        return "";
    }

 

반응형
Comments