Notice
Recent Posts
Recent Comments
Link
투케이2K
14. (spring/스프링) mybatis 사용해 오라클 함수 (function) 호출 및 결과 확인 실시 본문
[ 개발 환경 설정 ]
개발 툴 : 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
반응형
'Spring' 카테고리의 다른 글
Comments