투케이2K

39. (spring/스프링) mybatis 에서 mysql 프로시저 호출 및 리턴 OUT 메시지 , SELECT 테이블 결과 확인 실시 본문

Spring

39. (spring/스프링) mybatis 에서 mysql 프로시저 호출 및 리턴 OUT 메시지 , SELECT 테이블 결과 확인 실시

투케이2K 2022. 6. 6. 15:02

[개발 환경 설정]

개발 툴 : inteli j

개발 언어 : spring

 

[컨트롤러 : DB_Maria_Api_Controller : 소스 코드]

import com.test.mobile_sm_univ.B_Service.DB_Maria_Service.DB_Maria_Api_Service;
import com.test.mobile_sm_univ.util.C_Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

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


// TODO [RestController / Api 처리]
@RestController
public class DB_Maria_Api_Controller {


    /**
     * // -----------------------------------------
     * TODO [클래스 설명]
     * // -----------------------------------------
     * 1. 데이터베이스 접근 및 컨트롤러 클래스
     * // -----------------------------------------
     * 2. 사용자가 api 호출을 통해서 접근 수행
     * // -----------------------------------------
     * 3. service 클래스 호출 및 로직 연결 실시
     * // -----------------------------------------
     * */





    /**
     * // -----------------------------------------
     * // TODO [빠른 로직 찾기 : 주석 로직 찾기]
     * // -----------------------------------------
     * // [SEARCH FAST] : [테스트 사용자 정보 요청]
     * // -----------------------------------------
     * */





    // TODO [Autowire 설정]
    @Autowired
    private DB_Maria_Api_Service db_maria_api_service;



    // TODO [전역 변수 선언 실시]
    private static final String CLASS_NAME = "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 호출 수행]
        List<Map<String, Object>> returnData = db_maria_api_service.PRO_SEL_TEST_USER("백제");


        // [리턴 받은 map 데이터 널 체크 실시]
        try {
            if (returnData != null){
                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.toString()));
                System.out.println("================================================");
                System.out.println("\n");

                // [리턴 데이터 반환]
                return returnData.toString();
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }


        // [리턴 데이터 반환]
        return "";
    }

} // TODO [클래스 종료]
 

[서비스 : DB_Maria_Api_Service : 소스 코드]

import com.test.mobile_sm_univ.C_Mapper.DB_Mapper_Maria.DB_Maria_Api_Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

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

// TODO [서비스 어노테이션]
@Service
public class DB_Maria_Api_Service {


    /**
     * // -----------------------------------------
     * TODO [클래스 설명]
     * // -----------------------------------------
     * 1. 데이터베이스 접근 및 서비스 클래스
     * // -----------------------------------------
     * 2. mapper 인터페이스 메소드 호출 수행 실시
     * // -----------------------------------------
     * */





    /**
     * // -----------------------------------------
     * // TODO [빠른 로직 찾기 : 주석 로직 찾기]
     * // -----------------------------------------
     * // [SEARCH FAST] : [테스트 사용자 정보 요청]
     * // -----------------------------------------
     * */





    // TODO [Autowire 설정]
    @Autowired
    private DB_Maria_Api_Mapper db_maria_api_mapper;





    private static final String CLASS_NAME = "DB_Maria_Api_Service";





    // TODO [SEARCH FAST] : [테스트 사용자 정보 요청]
    public List<Map<String, Object>> 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 인터페이스 호출 실시]
        List<Map<String, Object>> returnData = db_maria_api_mapper.PRO_SEL_TEST_USER(map);


        // [프로시저 수행 후 리턴 값 반환]
        return returnData;
    }

} // TODO [클래스 종료]
 

[매퍼 : 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] : [테스트 사용자 정보 요청]
    List<Map<String, Object>> PRO_SEL_TEST_USER(Map map); // [프로시저]


} // TODO [클래스 종료]
 

[mybatis : DB_Maria_Api_Mybatis : 소스 코드]

<?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 인터페이스 지정 -->
<mapper namespace="com.test.mobile_sm_univ.C_Mapper.DB_Mapper_Maria.DB_Maria_Api_Mapper">


    <!--
    // =========================================
    // [파일 설명]
    // =========================================
    1. DB 접근 및 쿼리, 프로시저, 함수 호출 수행 파일
    // =========================================
    2. mapper 리턴 데이터를 받을 인터페이스 설정 필요
    // =========================================
    -->





    <!--
    // =========================================
    // [빠른 로직 찾기 : 주석 로직 찾기]
    // =========================================
    // [SEARCH FAST] : [테스트 사용자 정보 요청]
    // =========================================
    -->





    <!--
    // =========================================
    // [SEARCH FAST] : [테스트 사용자 정보 요청]
    // =========================================
    // [select id] [mapper 인터페이스 지정 메소드] : PRO_SEL_TEST_USER
    // =========================================
    // [resultMap] : 프로시저 수행 후 리턴 메시지 및 커서 테이블이 담길 맵
    // =========================================
    -->
    <resultMap id="PRO_SEL_TEST_USER_RESULT_O_MSG" type="hashmap" />
    <resultMap id="PRO_SEL_TEST_USER_RESULT_O_CURSOR" type="hashmap" />
    <select id="PRO_SEL_TEST_USER" parameterType="hashmap" resultMap="PRO_SEL_TEST_USER_RESULT_O_MSG, PRO_SEL_TEST_USER_RESULT_O_CURSOR" 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
 

 


[결과 출력]


 
반응형
Comments