Notice
Recent Posts
Recent Comments
Link
투케이2K
15. (spring/스프링) mybatis 사용해 select 절 where like in 조건 조회 실시 - foreach 사용 본문
Spring
15. (spring/스프링) mybatis 사용해 select 절 where like in 조건 조회 실시 - foreach 사용
투케이2K 2021. 7. 23. 19:37[ 개발 환경 설정 ]
개발 툴 : 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 조회 : like , in -->
<select id="selectMultiWhere" parameterType="hashmap" resultType="map">
select *
from test_user
where t_name like '%' || #{name} || '%'
<![CDATA[
and t_idx <= 30
]]>
and t_dept in
<foreach collection="deptList" item="dept" separator="," open="(" close=")">
#{dept}
</foreach>
</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>> selectMultiWhere(Map map); // 리턴값으로 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>> selectMultiWhere(Map map) {
List<Map<String, Object>> result = dbMapper.selectMultiWhere(map);
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/selectMultiWhere?name=김&deptList=[고구려, 백제, 신라]]
// [input : 서비스에서 설정한 파라미터 개수와 같아야합니다]
// [output : 조회된 데이터를 json 형식 string값으로 반환합니다]
@PostMapping("/selectMultiWhere")
public String selectMultiWhere(@RequestParam Map<String, String> param) {
System.out.println("\n");
System.out.println("=======================================");
System.out.println("[DBApiController] : [selectMultiWhere] : [start]");
System.out.println("[request keySet] : " + String.valueOf(param.keySet()));
System.out.println("[request name] : " + String.valueOf(param.get("name")));
System.out.println("[request deptList] : " + String.valueOf(param.get("deptList")));
System.out.println("=======================================");
System.out.println("\n");
// 리턴 값 데이터 정의
String result = null;
try {
// 리스트 생성 및 파라미터로 받은 데이터 삽입 실시
String data = param.get("deptList");
data = data.replaceAll("\\[","");
data = data.replaceAll("\\]","");
data = data.replaceAll(" ", "");
data = data.replaceAll("\\\"", "");
//List<String> deptList = Arrays.asList(data.split(",")); //리스트 선언 및 배열 데이터 삽입
List<String> deptList = new ArrayList<>(Arrays.asList(data.split(","))); //리스트 선언 및 배열 데이터 삽입
// DBMapper.xml (DB조회) 부분에서 parameterType 을 hashmap으로 선언해서 해쉬맵 객체 생성
Map <String, Object> map = new HashMap<>();
map.put("name", param.get("name")); // DBMapper.xml (DB조회) 부분에서 받는 파라미터 타입명과 일치 필요
map.put("deptList", deptList); // DBMapper.xml (DB조회) 부분에서 받는 파라미터 타입명과 일치 필요 (foreach collection)
// 배열에 데이터가 포함된 경우만 db 조회 요청 실시
if(deptList != null && deptList.size() >0){
result = String.valueOf(dbService.selectMultiWhere(map));
}
}
catch (Exception e){
e.printStackTrace();
}
// db 조회 결과 값 확인 실시
result = result.replaceAll("[=]", ":"); //json 형식으로 변환
System.out.println("\n");
System.out.println("=======================================");
System.out.println("[DBApiController] : [selectMultiWhere] : [response]");
System.out.println("[data] : " + String.valueOf(result));
System.out.println("=======================================");
System.out.println("\n");
return result;
}
}
[결과 출력]
반응형
'Spring' 카테고리의 다른 글
Comments