투케이2K

26. (spring/스프링) mybatis 오라클 프로시저 호출 및 리턴 메시지 확인 실시 본문

Spring

26. (spring/스프링) mybatis 오라클 프로시저 호출 및 리턴 메시지 확인 실시

투케이2K 2021. 9. 6. 14:30

[개발 환경 설정]

개발 툴 : inteli j

개발 언어 : spring


[폴더 및 파일 설정]


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

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- mapper >> interface 매핑 : id 값 중요 (interface 메소드) -->
<mapper namespace="com.project.researchpackage.mapper.DB_Mapper">


    <!-- 프로시저 호출 : input [I_NO , I_NAME] / output [msg] -->
    <!-- output [msg] 형태 : Y : SUCCESS -->
    <resultMap id="PRO_INS_DATA" type="hashmap" />
    <select id="PRO_INS_DATA_PROCEDURE" parameterType="hashmap" statementType="CALLABLE">
        <![CDATA[
        { call PRO_INS_DATA (
                #{I_NO},
                #{I_NAME},
                #{msg, mode=OUT, jdbcType=VARCHAR, javaType=string, resultMap=PRO_INS_MOWEB}
            )}
        ]]>
    </select>


</mapper>

[소스코드 : mapper >> DB_Mapper]

package com.project.researchpackage.mapper;

import org.apache.ibatis.annotations.Mapper;

import java.sql.Blob;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/** [DBMapper xml 파일 매핑] */
@Mapper
public interface DB_Mapper {
    /**
     * [클래스 설명]
     * 1. DBMapper.xml 쿼리 조회 결과 >> DB 데이터를 담을 그릇
     * 2. service 에서 참조해서 사용한다
     * */

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

}

[소스코드 : service >> DB_Service]

package com.project.researchpackage.service;

import com.project.researchpackage.mapper.DB_Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.sql.Blob;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/** [서비스 어노테이션 : 내부에서 자바 로직을 처리] */
@Service
public class DB_Service {
    /**
     * [클래스 설명]
     * 1. DBMapper 인터페이스 호출 및 controller 에 반환 할 리턴 값 정의
     * 2. controller 에서 사용한다
     * */



    // [Autowired 어노테이션 : 필요한 의존 객체의 타입에 해당하는 빈을 찾아 주입 [생성자, setter, 필드]]
    // [DBMapper 인터페이스 설정 : db 데이터 참조 [DBMapper.xml]]
    @Autowired
    private DB_Mapper dbMapper;



    // [DBMapper 인터페이스 지정 >> DBApiController 리턴 값 지정]
    public Map PRO_INS_DATA(String no, String name) {
        Map map = new HashMap<>();
        map.put("I_NO", no); // TODO [인풋 값]
        map.put("I_NAME", name); // TODO [인풋 값]
        dbMapper.PRO_INS_DATA_PROCEDURE(map); // TODO [프로시저 호출 결과가 맵에 담김]
        return map; // 컨트롤러에 리턴 실시
    }

}
​

[소스코드 : controller >> DB_API_Controller]

package com.project.researchpackage.controller;

import com.project.researchpackage.service.DB_Service;
import lombok.extern.slf4j.Slf4j;
import org.apache.logging.log4j.util.Base64Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.configurationprocessor.json.JSONArray;
import org.springframework.boot.configurationprocessor.json.JSONException;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.util.Base64Utils;
import org.springframework.web.bind.annotation.*;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.sql.Blob;
import java.util.*;

/** [크로스 도메인 접속 허용 설정] */
@CrossOrigin("*")


/** [RestController = rest api 요청 / Controller = view 연결] */
@RestController
public class DB_API_Controller {
    /**
     * [클래스 설명]
     * 1. api 호출 경로 및 리턴 데이터 반환 실시
     * 2. 실제로 api 호출 (req) 및 반환 (res) 이루어지는 클래스
     * */





    // [service 설정 : 로직 연결 위함]
    // [로직 : 사용자 API 호출 >> 컨트롤러에서 서비스 호출 >> 서비스에서 DB Mapper 호출]
    @Autowired
    private DB_Service dbService;





    
    // [post body json : Map 방식]
    // [경로 지정 : http://localhost:7000/PRO_INS_DATA]
    // [json : {no:1, name:twok}]
    // [input : 서비스에서 설정한 파라미터 개수와 같아야합니다]
    // [output : 조회된 데이터를 json 형식 string값으로 반환합니다]
    @PostMapping("/PRO_INS_DATA")
    public String PRO_INS_DATA(@RequestBody Map<String, String> param) {
        System.out.println("\n");
        System.out.println("=======================================");
        System.out.println("[DB_API_Controller] : [PRO_INS_DATA] : [start]");
        System.out.println("[request keySet] : " + String.valueOf(param.keySet()));
        System.out.println("[request no] : " + String.valueOf(param.get("no")));
        System.out.println("[request name] : " + String.valueOf(param.get("name")));
        System.out.println("=======================================");
        System.out.println("\n");

        //TODO [DB 프로시저 실행 서비스 호출]
        String no = String.valueOf(param.get("no"));
        String name = String.valueOf(param.get("name"));
        Map map = dbService.PRO_INS_DATA(no, name); // 프로시저 호출 및 map 으로 데이터 받음
        String O_MSG = String.valueOf(map.get("msg")); // map 에서 msg 데이터 확인 실시시

        //TODO [JSON STIRNG 반환 실시]
        JSONObject result = null;
        try {
            result.put("message", O_MSG);
        }
        catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("\n");
        System.out.println("=======================================");
        System.out.println("[DB_API_Controller] : [PRO_INS_DATA] : [result]");
        System.out.println("[data] : " + String.valueOf(result.toString()));
        System.out.println("=======================================");
        System.out.println("\n");

        return result.toString();
    }

}
​

 

반응형
Comments