Notice
Recent Posts
Recent Comments
Link
투케이2K
38. (spring/스프링) mybatis 에서 mysql 프로시저 호출 및 리턴 OUT 메시지 확인 실시 본문
[개발 환경 설정]
개발 툴 : inteli j
개발 언어 : spring
[컨트롤러 : DB_Maria_Api_Controller : 소스 코드]
// TODO [SEARCH FAST] : [테스트 사용자 정보 요청]
@GetMapping("/testUser")
public String testUser(@RequestParam Map<String, String> param){ // [쿼리 파람 방식]
//public String testUser(@RequestBody Map<String, String> param){ // [body 방식]
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("testUser"));
System.out.println("[INPUT] : "+String.valueOf(param.toString()));
System.out.println("================================================");
System.out.println("\n");
/**
* // -----------------------------------------
* [호출 방법]
* // -----------------------------------------
* 1. 호출 방식 : GET
* // -----------------------------------------
* 2. 호출 방법 : http://localhost:7000/testUser
* // -----------------------------------------
* 3. 리턴 데이터 :
* Y : SUCCESS : M_DEGUB : [2]
* // -----------------------------------------
* */
// [service 호출 수행]
String returnData = db_maria_api_service.PRO_SEL_TEST_USER("백제");
// [리턴 받은 map 데이터 널 체크 실시]
try {
if (C_Util.stringNotNull(returnData) == true){ // [널 값이 아닌 경우]
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("testUser"));
System.out.println("[RESULT] : "+String.valueOf(returnData));
System.out.println("================================================");
System.out.println("\n");
// [리턴 데이터 반환]
return returnData;
}
}
catch (Exception e){
e.printStackTrace();
}
// [리턴 데이터 반환]
return "";
}
[서비스 : DB_Maria_Api_Service : 소스 코드]
// TODO [SEARCH FAST] : [테스트 사용자 정보 요청]
public String PRO_SEL_TEST_USER(String dept){
// [mybatis xml 에서 설정한 인풋값 명칭에 맞게 데이터 가공 실시]
Map map = new HashMap<>();
map.put("I_DEPT_NAME", String.valueOf(dept));
// [map 인풋값 확인 실시]
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("PRO_SEL_TEST_USER"));
System.out.println("[INPUT] : "+String.valueOf(map.toString()));
System.out.println("================================================");
System.out.println("\n");
// [mapper 인터페이스 호출 실시]
String returnData = db_maria_api_mapper.PRO_SEL_TEST_USER(map);
// [프로시저 수행 후 리턴 값 반환]
return returnData;
}
[매퍼 : DB_Maria_Api_Mapper : 소스 코드]
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
// TODO [매퍼 어노테이션]
@Mapper
public interface DB_Maria_Api_Mapper {
/**
* // -----------------------------------------
* TODO [클래스 설명]
* // -----------------------------------------
* 1. 데이터베이스 접근 및 매퍼 인터페이스
* // -----------------------------------------
* 2. 데이터베이스 쿼리문 수행 xml 리턴 값 받음
* // -----------------------------------------
* */
/**
* // -----------------------------------------
* // TODO [빠른 로직 찾기 : 주석 로직 찾기]
* // -----------------------------------------
* // [SEARCH FAST] : [테스트 사용자 정보 요청]
* // -----------------------------------------
* */
// TODO [SEARCH FAST] : [테스트 사용자 정보 요청]
String PRO_SEL_TEST_USER(Map map); // [프로시저]
} // TODO [클래스 종료]
[mybatis : DB_Maria_Api_Mybatis : 소스 코드]
<!--
// =========================================
// [SEARCH FAST] : [테스트 사용자 정보 요청]
// =========================================
// [select id] [mapper 인터페이스 지정 메소드] : PRO_SEL_TEST_USER
// =========================================
// [resultMap] : 프로시저 수행 후 리턴 메시지 및 커서 테이블이 담길 맵
// =========================================
-->
<select id="PRO_SEL_TEST_USER" parameterType="hashmap" resultType="String" statementType="CALLABLE">
<![CDATA[
{ call PRO_SEL_TEST_USER(
#{I_DEPT_NAME, mode=IN, jdbcType=VARCHAR, javaType=string},
#{O_MSG}
)}
]]>
</select>
[DB Connection : application.yml : 소스 코드]
# [Maria DB]
maria:
driver-class-name: org.mariadb.jdbc.Driver
jdbc-url: jdbc:mariadb://3.44.128.63:3306/test?characterEncoding=UTF-8&serverTimezone=UTC&characterEncoding=utf8&noAccessToProcedureBodies=true
username: test
password: test@1234
hikari:
maximum-pool-size: 20
connection-timeout: 30000
[Mysql 프로시저 : 소스 코드]
/**************************************************************/
-- [DELIMITER : 프로시저 앞,뒤의 위치하여 안에 있는 부분은 한번에 실행]
DELIMITER $$
/**************************************************************/
DROP PROCEDURE IF EXISTS PRO_SEL_TEST_USER;
-- [이미 생성된 프로시저가 있으면 DROP]
CREATE PROCEDURE PRO_SEL_TEST_USER -- [프로시저 생성]
(
IN I_DEPT_NAME VARCHAR(100) CHARACTER SET UTF8, -- [인풋 : 부서 이름]
OUT O_MSG VARCHAR(500) CHARACTER SET UTF8 -- [리턴 : 메시지]
)
/**************************************************************/
/***************************************************************
[프로시저 설명]
[설 명] : 사용자 정보 조회 프로시저
[프로시저 호출] :
CALL PRO_SEL_TEST_USER(''백제'', @O_MSG);
SELECT @O_MSG;
[프로시저 삭제] :
DROP PROCEDURE PRO_SEL_TEST_USER;
[프로시저 생성 목록 확인] :
SHOW PROCEDURE STATUS;
***************************************************************/
/**************************************************************/
PROC_BODY :BEGIN
/**************************************************************/
-- [전역 변수 선언]
DECLARE M_DEBUG VARCHAR(100) DEFAULT '''';
-- [SQL 수행 EXCEPTION 처리]
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
-- [롤백 처리 실시]
ROLLBACK;
-- [리턴 데이터 삽입]
SET O_MSG = CONCAT('N : EXCEPTION : M_DEGUB : ', '[', CAST(M_DEBUG AS CHAR), ']');
END;
-- [1] : 인풋 데이터 널 체크 수행 실시
SET M_DEBUG = '1'; -- [디버깅 단계]
IF I_DEPT_NAME IS NULL OR I_DEPT_NAME = '' OR LENGTH(I_DEPT_NAME) = 0 THEN
-- [리턴 데이터 삽입]
SET O_MSG = CONCAT('N : INPUT DATA IS NULL : M_DEGUB : ', '[', CAST(M_DEBUG AS CHAR), ']');
-- [프로시저 종료]
LEAVE PROC_BODY;
END IF;
-- [2] : 부서에 포함된 사용자 정보 출력 실시
SET M_DEBUG = '2'; -- [디버깅 단계]
-- [리턴 데이터 삽입]
SET O_MSG = CONCAT('Y : SUCCESS : M_DEGUB : ', '[', CAST(M_DEBUG AS CHAR), ']');
/**************************************************************/
END$$;
DELIMITER ;
/**************************************************************/
[결과 출력]
반응형
'Spring' 카테고리의 다른 글
Comments