Notice
Recent Posts
Recent Comments
Link
투케이2K
3. (spring/스프링) 오라클 DB 접속 및 select , insert , delete , procedure 프로시저 호출 수행 실시 본문
Spring
3. (spring/스프링) 오라클 DB 접속 및 select , insert , delete , procedure 프로시저 호출 수행 실시
투케이2K 2021. 7. 7. 13:35/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : inteli j
개발 언어 : spring
/* =========================== */
/* =========================== */
[폴더 및 파일 추가]
/* =========================== */
/* =========================== */
[소스 코드 : controller >> DBApiController]
package com.project.solutionpackage.controller;
import com.project.solutionpackage.model.Insert_DB_UserInfo_Model;
import com.project.solutionpackage.model.Return_DB_Json_Model;
import com.project.solutionpackage.service.DBService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class DBApiController {
/**
* [클래스 설명]
* 1. api 호출 경로 및 리턴 데이터 반환 실시
* 2. 실제로 api 호출 (req) 및 반환 (res) 이루어지는 클래스
* */
// [service 설정 : 로직 연결 위함]
// [로직 : 사용자 API 호출 >> 컨트롤러에서 서비스 호출 >> 서비스에서 DB Mapper 호출]
@Autowired
private DBService dbService;
// [root 경로 지정]
/*@GetMapping("/")
public JsonModel root() {
return new JsonModel(0, "루트페이지 입니다.");
}*/
// [get : Map 방식]
// [경로 지정 : http://localhost:7000/date]
// [input : 서비스에서 설정한 파라미터 개수와 같아야합니다]
// [output : 모델에서 설정한 return 타입으로 결과를 반환합니다]
@GetMapping("/date")
public Return_DB_Json_Model date() {
System.out.println("");
System.out.println("[DBApiController] : [date]");
System.out.println("");
System.out.println("");
System.out.println("[DBApiController] : [date]");
System.out.println("[response] : " + new Return_DB_Json_Model("T", dbService.date()));
System.out.println("");
return new Return_DB_Json_Model("T", dbService.date());
}
// [post : Map 방식]
// [경로 지정 : http://localhost:7000/userInfo?idx=5]
// [input : 서비스에서 설정한 파라미터 개수와 같아야합니다]
// [output : 조회된 데이터를 json 형식 string값으로 반환합니다]
@PostMapping("/userInfo")
public String userInfo(@RequestParam Map<String, String> param) {
System.out.println("");
System.out.println("[DBApiController] : [userInfo]");
System.out.println("[request keySet] : " + String.valueOf(param.keySet()));
System.out.println("[request idx] : " + String.valueOf(param.get("idx")));
System.out.println("");
// 리턴 값 데이터 정의
String idx = param.get("idx");
String result = String.valueOf(dbService.userInfo(idx));
result = result.replaceAll("[=]", ":"); //json 형식으로 변환
System.out.println("");
System.out.println("[DBApiController] : [userInfo]");
System.out.println("[response] : " + String.valueOf(result));
System.out.println("");
return result;
}
// [post : Map 방식]
// [경로 지정 : http://localhost:7000/userInfoList?dept=백제&idx=5]
// [input : 서비스에서 설정한 파라미터 개수와 같아야합니다]
// [output : 조회된 데이터를 json 형식 string값으로 반환합니다]
@PostMapping("/userInfoList")
public String userInfoList(@RequestParam Map<String, String> param) {
System.out.println("");
System.out.println("[DBApiController] : [userInfoList]");
System.out.println("[request keySet] : " + String.valueOf(param.keySet()));
System.out.println("[request dept] : " + String.valueOf(param.get("dept")));
System.out.println("[request idx] : " + String.valueOf(param.get("idx")));
System.out.println("");
// 리턴 값 데이터 정의
String dept = param.get("dept");
int idx = Integer.parseInt(param.get("idx"));
String result = String.valueOf(dbService.userInfoList(dept, idx));
result = result.replaceAll("[=]", ":"); //json 형식으로 변환
System.out.println("");
System.out.println("[DBApiController] : [userInfoList]");
System.out.println("[response] : " + String.valueOf(result));
System.out.println("");
return result;
}
// [post : Map 방식]
// [경로 지정 : http://localhost:7000/insertUser?idx=61&name=towk&sex=m&age=28&dept=개발부&phone=01012345678&addr=서울&rank=연구원&marri=x&familly=5&hobby=코딩]
// [input : 서비스에서 설정한 파라미터 개수와 같아야합니다]
// [output : 모델에서 설정한 return 타입으로 결과를 반환합니다]
@PostMapping("/insertUser")
public Return_DB_Json_Model insertUser(Insert_DB_UserInfo_Model user) {
System.out.println("");
System.out.println("[DBApiController] : [insertUser]");
System.out.println("[request idx] : " + String.valueOf(user.getIdx()));
System.out.println("[request name] : " + String.valueOf(user.getName()));
System.out.println("[request sex] : " + String.valueOf(user.getSex()));
System.out.println("[request age] : " + String.valueOf(user.getAge()));
System.out.println("[request dept] : " + String.valueOf(user.getDept()));
System.out.println("[request phone] : " + String.valueOf(user.getPhone()));
System.out.println("[request addr] : " + String.valueOf(user.getAddr()));
System.out.println("[request rank] : " + String.valueOf(user.getRank()));
System.out.println("[request marri] : " + String.valueOf(user.getMarri()));
System.out.println("[request familly] : " + String.valueOf(user.getFamilly()));
System.out.println("[request hobby] : " + String.valueOf(user.getHobby()));
System.out.println("");
if (dbService.insertUser(user) > 0) {
System.out.println("");
System.out.println("[DBApiController] : [insertUser]");
System.out.println("[response] : " + new Return_DB_Json_Model("T", "Success"));
System.out.println("");
return new Return_DB_Json_Model("T", "Success"); //정상 삽입 완료 시 상태값 반환
} else {
System.out.println("");
System.out.println("[DBApiController] : [insertUser]");
System.out.println("[response] : " + new Return_DB_Json_Model("F", "Failed"));
System.out.println("");
return new Return_DB_Json_Model("F", "Failed"); //삽입 실패 시 상태값 반환
}
}
// [post : Map 방식]
// [경로 지정 : http://localhost:7000/updateUser?idx=100&name=towk]
// [input : 서비스에서 설정한 파라미터 개수와 같아야합니다]
// [output : 모델에서 설정한 return 타입으로 결과를 반환합니다]
@PostMapping("/updateUser")
public Return_DB_Json_Model updateUser(@RequestParam Map<String, String> param) {
System.out.println("");
System.out.println("[DBApiController] : [updateUser]");
System.out.println("[request keySet] : " + String.valueOf(param.keySet()));
System.out.println("[request idx] : " + String.valueOf(param.get("idx")));
System.out.println("[request name] : " + String.valueOf(param.get("name")));
System.out.println("");
if (dbService.updateUser(Integer.parseInt(param.get("idx")), param.get("name")) > 0) {
System.out.println("");
System.out.println("[DBApiController] : [updateUser]");
System.out.println("[response] : " + new Return_DB_Json_Model("T", "Success"));
System.out.println("");
return new Return_DB_Json_Model("T", "Success"); //정상 수정 완료 시 상태값 반환
} else {
System.out.println("");
System.out.println("[DBApiController] : [updateUser]");
System.out.println("[response] : " + new Return_DB_Json_Model("F", "Failed"));
System.out.println("");
return new Return_DB_Json_Model("F", "Failed"); //수정 실패 시 상태값 반환
}
}
// [post : Map 방식]
// [경로 지정 : http://localhost:7000/deleteUser?name=twok]
// [input : 서비스에서 설정한 파라미터 개수와 같아야합니다]
// [output : 모델에서 설정한 return 타입으로 결과를 반환합니다]
@PostMapping("/deleteUser")
public Return_DB_Json_Model deleteUser(@RequestParam Map<String, String> param) {
System.out.println("");
System.out.println("[DBApiController] : [deleteUser]");
System.out.println("[request keySet] : " + String.valueOf(param.keySet()));
System.out.println("[request name] : " + String.valueOf(param.get("name")));
System.out.println("");
if (dbService.deleteUser(param.get("name")) > 0) {
System.out.println("");
System.out.println("[DBApiController] : [deleteUser]");
System.out.println("[response] : " + new Return_DB_Json_Model("T", "Success"));
System.out.println("");
return new Return_DB_Json_Model("T", "Success"); //정상 수정 완료 시 상태값 반환
} else {
System.out.println("");
System.out.println("[DBApiController] : [deleteUser]");
System.out.println("[response] : " + new Return_DB_Json_Model("F", "Failed"));
System.out.println("");
return new Return_DB_Json_Model("F", "Failed"); //수정 실패 시 상태값 반환
}
}
// [post : Map 방식]
// [경로 지정 : http://localhost:7000/userProcedure?dept=백제]
// [input : 서비스에서 설정한 파라미터 개수와 같아야합니다]
// [output : 조회된 데이터를 json 형식 string값으로 반환합니다]
@PostMapping("/userProcedure")
public String userProcedure(@RequestParam Map<String, String> param) {
System.out.println("");
System.out.println("[DBApiController] : [userProcedure]");
System.out.println("[request keySet] : " + String.valueOf(param.keySet()));
System.out.println("[request dept] : " + String.valueOf(param.get("dept")));
System.out.println("");
// 리턴 값 데이터 정의
String dept = param.get("dept");
Map map = dbService.userProcedure(dept);
System.out.println("");
System.out.println("[DBApiController] : [userProcedure]");
System.out.println("[Map keySet] : " + String.valueOf(map.keySet()));
System.out.println("[Map msg] : " + String.valueOf(map.get("msg")));
System.out.println("[Map cur] : " + String.valueOf(map.get("cur")));
System.out.println("");
String O_MSG = String.valueOf(map.get("msg"));
String O_CURSOR = String.valueOf(map.get("cur"));
String result = String.valueOf(O_CURSOR);
result = result.replaceAll("[=]", ":"); //json 형식으로 변환
System.out.println("");
System.out.println("[DBApiController] : [userProcedure]");
System.out.println("[response] : " + String.valueOf(result));
System.out.println("");
return result;
}
}
[소스 코드 : mapper >> DBMapper]
package com.project.solutionpackage.mapper;
import com.project.solutionpackage.model.Insert_DB_UserInfo_Model;
import org.apache.ibatis.annotations.Mapper;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Mapper
public interface DBMapper {
/**
* [클래스 설명]
* 1. DBMapper.xml 쿼리 조회 결과 >> DB 데이터를 담을 그릇
* 2. service 에서 참조해서 사용한다
* */
// [DBMapper.xml 쿼리에서 선언한 변수 개수 및 타입에 맞게 파라미터 선언]
String date(); // 리턴값으로 string 사용 [출력]
// [DBMapper.xml 쿼리에서 선언한 변수 개수 및 타입에 맞게 파라미터 선언]
List<Map<String, Object>> userInfo(String idx); // 리턴값으로 List 사용 [출력]
// [DBMapper.xml 쿼리에서 선언한 변수 개수 및 타입에 맞게 파라미터 선언]
List<Map<String, Object>> userInfoList(String dept, int idx); // 리턴값으로 List 사용 [출력]
// [DBMapper.xml 쿼리에서 선언한 변수 개수 및 타입에 맞게 파라미터 선언]
int insertUser(Insert_DB_UserInfo_Model user); // 리턴값으로 int 사용 [상태값 확인 성공, 실패 여부]
// [DBMapper.xml 쿼리에서 선언한 변수 개수 및 타입에 맞게 파라미터 선언]
int updateUser(int idx, String name); // 리턴값으로 int 사용 [상태값 확인 성공, 실패 여부]
// [DBMapper.xml 쿼리에서 선언한 변수 개수 및 타입에 맞게 파라미터 선언]
int deleteUser(String name); // 리턴값으로 int 사용 [상태값 확인 성공, 실패 여부]
// [DBMapper.xml 쿼리에서 선언한 변수 개수 및 타입에 맞게 파라미터 선언]
void userProcedure(Map map); // void 설정
}
[소스 코드 : model >> Insert_DB_UserInfo_Model]
package com.project.solutionpackage.model;
import lombok.Data;
@Data
public class Insert_DB_UserInfo_Model {
/**
* [클래스 설명]
* 1. insert 포맷 형태 정의 클래스
* 2. controller 에서 사용한다
* */
private String idx;
private String name;
private String sex;
private String age;
private String dept;
private String phone;
private String addr;
private String rank;
private String marri;
private String familly;
private String hobby;
}
[소스 코드 : model >> Return_DB_Json_Model]
package com.project.solutionpackage.model;
import lombok.Data;
@Data
public class Return_DB_Json_Model {
/**
* [클래스 설명]
* 1. 최종적으로 반환할 데이터 포맷 형태 정의 클래스
* 2. controller 에서 사용한다
* */
// [현재 date 확인]
private String state;
private String message;
public Return_DB_Json_Model(String state, String message) {
this.state = state;
this.message = message;
}
}
[소스 코드 : service >> DBService]
package com.project.solutionpackage.service;
import com.project.solutionpackage.mapper.DBMapper;
import com.project.solutionpackage.model.Insert_DB_UserInfo_Model;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
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 String date() {
return dbMapper.date(); //컨트롤러에 리턴 실시
}
// [DBMapper 인터페이스 지정 >> DBApiController 리턴 값 지정]
public List<Map<String, Object>> userInfo(String idx) {
List<Map<String, Object>> result = dbMapper.userInfo(idx);
return result; //컨트롤러에 리턴 실시
}
// [DBMapper 인터페이스 지정 >> DBApiController 리턴 값 지정]
public List<Map<String, Object>> userInfoList(String dept, int idx) {
List<Map<String, Object>> result = dbMapper.userInfoList(dept, idx);
return result; //컨트롤러에 리턴 실시
}
// [DBMapper 인터페이스 지정 >> DBApiController 리턴 값 지정]
public int insertUser(Insert_DB_UserInfo_Model user) {
return dbMapper.insertUser(user); //컨트롤러에 리턴 실시
}
// [DBMapper 인터페이스 지정 >> DBApiController 리턴 값 지정]
public int updateUser(int idx, String name) {
return dbMapper.updateUser(idx, name); //컨트롤러에 리턴 실시
}
// [DBMapper 인터페이스 지정 >> DBApiController 리턴 값 지정]
public int deleteUser(String name) {
return dbMapper.deleteUser(name); //컨트롤러에 리턴 실시
}
// [DBMapper 인터페이스 지정 >> DBApiController 리턴 값 지정]
public Map userProcedure(String dept) {
Map map = new HashMap<>();
map.put("dept", dept);
dbMapper.userProcedure(map);
return map; //컨트롤러에 리턴 실시
}
}
[소스 코드 : 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 조건 절 조회 : db 시간 조회 -->
<select id="date" resultType="string">
<![CDATA[
select TO_CHAR(SYSDATE, 'YYYY-MM-DD')
from dual
]]>
</select>
<!-- select 조건 절 조회 : 한개 값 : 동등 서브 쿼리 -->
<select id="userInfo" resultType="map">
<![CDATA[
select *
from test_user
where t_idx = #{idx}
]]>
</select>
<!-- select 조건 절 조회 : like and 비교 연산 -->
<select id="userInfoList" resultType="map">
<![CDATA[
select *
from test_user
where t_dept like '%' || #{dept} || '%'
and t_idx >= #{idx}
order by to_number(t_idx) asc
]]>
</select>
<!-- update 특정 조건 수정 -->
<update id="updateUser">
<![CDATA[
update test_user
set
t_idx = #{idx}
where t_name = #{name}
]]>
</update>
<!-- insert 데이터 삽입 실시 -->
<insert id="insertUser">
<![CDATA[
insert into TEST_USER (T_IDX, T_NAME, T_SEX, T_AGE, T_DEPT, T_PHONE, T_ADDR, T_RANK, T_MARRI, T_FAMILLY, T_HOBBY)
values (#{idx}, #{name}, #{sex}, #{age}, #{dept}, #{phone}, #{addr}, #{rank}, #{marri}, #{familly}, #{hobby})
]]>
</insert>
<!-- delete 특정 데이터 삭제 실시 -->
<delete id="deleteUser">
<![CDATA[
delete
from TEST_USER
where t_name = #{name}
]]>
</delete>
<!-- 프로시저 호출 : input / output [msg : cursor] -->
<resultMap id="boardMap" type="hashmap" />
<select id="userProcedure" parameterType="hashmap" statementType="CALLABLE">
<![CDATA[
{ call TEST_USER_PROCEDURE (
#{dept},
#{msg, mode=OUT, jdbcType=VARCHAR, javaType=string},
#{cur, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=boardMap}
)}
]]>
</select>
</mapper>
[application.yml]
spring:
devtools:
livereload:
enabled: true
datasource:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@112.65.176.205:1521:servername
username: userschema
password: root1234
server:
port: 7000
mybatis:
mapper-locations: classpath:mappers/*.xml
type-aliases-package: com.project.solutionpackage.model
/* =========================== */
/* =========================== */
[결과 출력]
/* =========================== */
/* =========================== */
[오라클 프로시저 참고]
https://kkh0977.tistory.com/945?category=990101
/* =========================== */
반응형
'Spring' 카테고리의 다른 글
6. (spring/스프링) [JSP] spring 스프링 프로젝트에 JSP 적용 실시 (0) | 2021.07.08 |
---|---|
5. (spring/스프링) [thymeleaf/타임리프] spring 스프링 프로젝트에 thymeleaf 타임 리프 적용 실시 (0) | 2021.07.08 |
4. (spring/스프링) [파일 첨부] 기본 api 생성 및 오라클 DB 접속, 쿼리 실행 프로젝트 (0) | 2021.07.08 |
2. (spring/스프링) controller 컨트롤러 사용해 get, post api 생성 실시 (0) | 2021.07.06 |
1. (spring/스프링) inteli j 사용해 html + spring 개발 환경 구축 및 oracle db 연결 실시 (0) | 2021.07.05 |
Comments