스프링부트 - 검색 작성

Wald Eisen·2023년 7월 20일

study

목록 보기
17/26

검색 기능은 사실, 주소창에 요청을 보내는거다. 검색을 해보면 ?q=같은 것이 떠있는데,
이게 바로 그 "요청의 내역"이다.

https://
www.google.com/ - 도메인
search - 엔드 포인트
?q=폴라리스&ie=UTF-8 - 쿼리스트링

  • 여기서 도메인은 아이피를 가리기 위해 쓰는것.
  • 쿼리스트링 형식: ?변수=값&변수=값&
  1. 이용자가 - /emp 엔드포인트에 접속할건데
    firstName이 ne인 사람만 검색해줘

  2. 주소창: /emp?firstName=ne

  3. 서버(컨트롤러 ex:카운터직원)
    @GetMapping("/emp")
    @RequestParam 쿼리스트링 -> 변수

플로우의 과정은 대충 이렇다. :

컨트롤러
: 서비스님, 직원리스트 주세요 이름에 ne가 포함된 직원 리스트로 주시면 되요.

서비스
: 리파지토리님, 직원 entity리스트 주세요 이름에 ne가 포함된 직원 entity리스트 주세요.

리파지토리
: ne가 포함된 걸 찾았습니다.
: 서비스님 직원 entity리스트 드릴게요.

-

서비스
: 감사합니다, 직원dto리스트로 만들었습니다.
: 컨트롤러님, 리스트를 드릴게요.

컨트롤러
: 고객님 요청하신  /emp?firstName=ne 나왔습니다

저번 시간에 했던 @GetMapping("/emp") 등은 엔드 포인트에 포함이 된다.


이렇게 치면 홍길동이 콘솔에 뜬다.


검색기능을 만들어보자.


이제 스크립트로 가자.


리포지토리에서 emp 서비스와 연동되는 코드를 짠 후..

emp 서비스에서 해당 요청을 처리하는 코드를 짜보자.

package com.example.hr1.domain.emp.service;

import java.util.List;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.hr1.domain.emp.dto.EmpDetailDTO;
import com.example.hr1.domain.emp.dto.EmpTableDTO;
import com.example.hr1.model.employees.entity.EmployeesEntity;
import com.example.hr1.model.employees.repository.EmployeesRepository;

@Service
public class EmpService {

    @Autowired
    private EmployeesRepository employeesRepository;

    public List<EmpTableDTO> getSearchEmpTableData(String firstName){
        // firstName이 null이면 findAll
        // firstName이 null이 아니면 findByFirstName~
        if(firstName == null){
            return EmpTableDTO.fromEntityList(employeesRepository.findAll());
        } else {
            return EmpTableDTO.fromEntityList(employeesRepository.findByFirstNameContainingIgnoreCase(firstName));
        }


    }

    public List<EmpTableDTO> getEmpTableData() {
        // List<EmployeesEntity> employeesEntityList = employeesRepository.findAll();

        // List<EmpTableDTO> empTableDTOList = new ArrayList<>();

        // for (int i = 0; i < employeesEntityList.size(); i++) {
        //     EmployeesEntity employeesEntity = employeesEntityList.get(i);

        //     EmpTableDTO empTableDTO = EmpTableDTO.builder()
        //             .employeeId(employeesEntity.getEmployeeId())
        //             .firstName(employeesEntity.getFirstName())
        //             .build();

        //     empTableDTOList.add(empTableDTO);
        // }

        // return empTableDTOList;

        return EmpTableDTO.fromEntityList(employeesRepository.findAll());
    }


    public EmpDetailDTO getEmpDetailData(Integer employeeId){
        Optional<EmployeesEntity> employeesEntityOptional = employeesRepository.findByEmployeeId(employeeId);

        if(!employeesEntityOptional.isPresent()){
            throw new RuntimeException("잘못된 요청입니다.");
        }

        return EmpDetailDTO.fromEntity(employeesEntityOptional.get());
    }

}

        // 인풋이 가지고 있는 값을 가지고 오면 된다.
        document.querySelector("#searchButton").addEventListener("click", ()=> {
            // alert(document.querySelector("#searchValue").value);

            // 쿼리 스트링을 하려면 어떻게 해야하는지를 떠올려보자
            // 서버에도 적은게 나갔다.
            location.href = "/emp?firstName=" + alert(document.querySelector("#searchValue").value);
        });

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

글 잘 봤습니다, 감사합니다.

답글 달기