본문 바로가기
개발자 전향 프로젝트

[Spring Boot] 세상 쉬운 검색창(검색 로직) 만들기 1-2 (백 로직)

by 샘오리 2022. 9. 24.

샘플 Entity는 Staff로 정하고 설명을 위해 제공

<!--샘플 엔티티-->
@Getter
@Entity
@NoArgsConstructor
public class Staff {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;

}

Controller

@Controller
public class StaffController {

  private final StaffService staffService;

  public StaffController(StaffService staffService) {
    this.staffService = staffService;
  }

  @GetMapping(value = "/search")
  String search(Model model, @RequestParam("searchValue") String searchValue, Model model {
  
  
<!-- 아무것도 입력하지 않을 시 전체 리스트를 뿌려주는 함수로 재매핑 -->
        if (Objects.equals(searchValue, "")) {
            return "redirect:/조회하는 함수 url 매핑";
        }
        
        
<!-- 입력한 값이 있다면, 그 값을 통해서 검색 로직을 실행시킨 후 view단의 th:each="staff : ${staffList}" 에 넣는 작업 --> 
        else {
            model.addAttribute("staffList", staffService.findBySearchValue(searchValue));
            return "staffList";
        }
    }
}

VIEW 단의 예시 테이블

 <tbody class="table-content">
    <tr th:id="${staff.name}" th:each="staff : ${staffList}" class="table-row">
    <td class="table-data" th:text="${staff.id}"></td>
    <td class="table-data" th:text="${staff.name}"></td>
    <td class="table-data" th:text="${staff.age}"></td>
                                        ...

Service

@RequiredArgsConstructor
@Service
public class StaffService {

    private final StaffRepository staffRepository;

    public List<Staff> findBySearchValue(String searchValue) {
        return staffRepository.findBySearchValue(searchValue);
    }

}

Repository

@Repository
public interface CodeSheetRepository extends JpaRepository<Staff, Long> {

    @Transactional
    @Query(value = "SELECT * FROM STAFF s WHERE s.NAME LIKE %:searchValue% OR s.AGE LIKE %:searchValue% ",  nativeQuery = true)
    List<Staff> findBySearchValue(@Param("searchValue") String searchValue);

}

음성지원