Notice
Recent Posts
Recent Comments
Link
투케이2K
26. (spring/스프링) mybatis 오라클 프로시저 호출 및 리턴 메시지 확인 실시 본문
[개발 환경 설정]
개발 툴 : 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();
}
}
반응형
'Spring' 카테고리의 다른 글
28. (spring/스프링) mybatis 오라클 프로시저 호출 및 다중 아웃 out 메시지, 커서 cursor 데이터 확인 실시 (0) | 2021.09.09 |
---|---|
27. (spring/스프링) RestApi 사용해 로컬 서버에 저장된 이미지 (image) 파일 호출 및 표시 실시 (0) | 2021.09.08 |
25. (spring/스프링) gradle , application.yml 개발 환경 , 운영 환경 구분 설정 실시 (0) | 2021.08.30 |
24. (spring/스프링) [thymeleaf/타임리프] 외부 css , js 파일 적용 및 configuration 설정 (0) | 2021.08.29 |
23. (spring/스프링) 스프링 gradle 환경 war 파일 생성 방법 (1) | 2021.08.28 |
Comments