투케이2K

14. (spring/스프링) mybatis 사용해 오라클 함수 (function) 호출 및 결과 확인 실시 본문

Spring

14. (spring/스프링) mybatis 사용해 오라클 함수 (function) 호출 및 결과 확인 실시

투케이2K 2021. 7. 21. 07:56

[ 개발 환경 설정 ]

개발 툴 : inteli j

개발 언어 : spring


[ 폴더 및 파일 추가 ]


[소스코드 : application.yml]

spring:
  devtools:
    livereload:
      enabled: true
  datasource:
    driver-class-name: oracle.jdbc.OracleDriver
    url: jdbc:oracle:thin:@115.68.176.215:1521:username
    username: userschema
    password: pw1234



server:
  port: 7000



mybatis:
  mapper-locations: classpath:mappers/*.xml
  type-aliases-package: com.project.solutionpackage.model

[소스코드 : mappers >> DBMapper.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.solutionpackage.mapper.DBMapper">

    <!-- select function 함수 조회 -->
    <select id="userFunction" resultType="map">
        <![CDATA[
        select GET_DEPT_CHECK(#{name}, #{dept})
            from dual
        ]]>
    </select>

</mapper>

[소스코드 : mapper >> DBMapper]

package com.project.solutionpackage.mapper;

import com.project.solutionpackage.model.Insert_DB_Image_Model;
import com.project.solutionpackage.model.Insert_DB_UserInfo_Model;
import com.project.solutionpackage.model.Insert_Table_Model;
import org.apache.ibatis.annotations.Mapper;

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

@Mapper
public interface DBMapper {

    /**
     * [클래스 설명]
     * 1. DBMapper.xml 쿼리 조회 결과 >> DB 데이터를 담을 그릇
     * 2. service 에서 참조해서 사용한다
     * */

    // [DBMapper.xml 쿼리에서 선언한 변수 개수 및 타입에 맞게 파라미터 선언]
    List<Map<String, Object>> userFunction(String name, String dept); // 리턴값으로 List 사용 [출력]

}

[소스코드 : service >> DBService]

package com.project.solutionpackage.service;

import com.project.solutionpackage.mapper.DBMapper;
import com.project.solutionpackage.model.Insert_DB_Image_Model;
import com.project.solutionpackage.model.Insert_DB_UserInfo_Model;
import com.project.solutionpackage.model.Insert_Table_Model;
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 DBService {

    /**
     * [클래스 설명]
     * 1. DBMapper 인터페이스 호출 및 controller 에 반환 할 리턴 값 정의
     * 2. controller 에서 사용한다
     * */

    // [DBMapper 인터페이스 설정 : db 데이터 참조 [DBMapper.xml]]
    @Autowired
    private DBMapper dbMapper;


    // [DBMapper 인터페이스 지정 >> DBApiController 리턴 값 지정]
    public List<Map<String, Object>> userFunction(String name, String dept) {
        List<Map<String, Object>> result = dbMapper.userFunction(name, dept);
        return result; //컨트롤러에 리턴 실시
    }

}

[소스코드 : controller >> DBApiController]

package com.project.solutionpackage.controller;

import com.project.solutionpackage.model.*;
import com.project.solutionpackage.service.DBService;
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.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.*;

// [rest 방식 컨트롤러 / Controller = view 연결]
@RestController
public class DBApiController {

    /**
     * [클래스 설명]
     * 1. api 호출 경로 및 리턴 데이터 반환 실시
     * 2. 실제로 api 호출 (req) 및 반환 (res) 이루어지는 클래스
     * */


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



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

        // 리턴 값 데이터 정의
        String name = param.get("name");
        String dept = param.get("dept");
        List<Map<String, Object>> result = dbService.userFunction(name, dept);
        ArrayList formatList = new ArrayList();
        for(int i=0; i<result.size(); i++){
            HashMap<String, Object> map = new HashMap<String, Object>(result.get(i));

            // 해쉬맵에 포함된 key 값 가져온다
            Set<String> keySet = map.keySet();
            String key = String.valueOf(keySet);
            key = key.substring(1, key.length()-1);

            // 해쉬맵에 포함된 value 값 가져온다
            Collection<Object> values = map.values();
            String format = "";
            format = String.valueOf(values);
            format = format.replaceAll("[=]", ":"); //json 형식으로 변환
            format = format.substring(1, format.length()-1);

            System.out.println("\n");
            System.out.println("=======================================");
            System.out.println("[DBApiController] : [userFunction] : [parse]");
            System.out.println("[idx] : " + String.valueOf(i));
            System.out.println("[keySet] : " + String.valueOf(key));
            System.out.println("[data] : " + String.valueOf(format));
            System.out.println("=======================================");
            System.out.println("\n");
            formatList.add(format);
        }

        System.out.println("\n");
        System.out.println("=======================================");
        System.out.println("[DBApiController] : [userFunction] : [response]");
        System.out.println("[data] : " + String.valueOf(formatList.toString()));
        System.out.println("=======================================");
        System.out.println("\n");
        return formatList.toString();
    }

}

[결과 출력]


[오라클 함수 생성 참고]

https://blog.naver.com/kkh0977/222438610081

 

135. (Oracle/오라클) function 함수 생성 및 for in loop 개별 데이터 json 형식으로 반환 실시

[ 개발 환경 설정 ] 개발 툴 : Toad 개발 언어 : Oracle [함수 호출 방법] [소스 코드] [결과 출력]

blog.naver.com


반응형
Comments