스프링 JPA의 domain.Page를 이용하여 구현하였다.
Controller
@GetMapping("/stockinfo")
public String showStockInfo(Model model, @RequestParam(value="page", defaultValue="0") int page) {
Page<StockInfo> pagingStocks = stockDataLoader.getStockInfo(page);
model.addAttribute("paging", pagingStocks);
model.addAttribute("totalStocks", pagingStocks.getTotalElements());
return "stockinfo";
}
Service
public Page<StockInfo> findAll(int page) {
Pageable pageable = PageRequest.of(page, 20);
return stockInfoRepository.findAll(pageable);
}
성공적으로 페이지가 구성되었다. 하지만, 2786개의 데이터를 페이지만으로 확인하기는 쉽지않다. 분류와 검색 기능이 필요해 보인다.
public StockInfo findByItmsNmOrSrtnCd(String query) {
if(query.charAt(0) <= '9' && query.charAt(0) >= '0') {
return stockInfoRepository.findBySrtnCd(query);
}else{
return stockInfoRepository.findByItmsNm(query);
}
}
우선 서비스에서 입력받은 문자열의 맨앞자리가 숫자인지 파악하여 그에따라 종목명, 종목코드로 검색하도록 하였다.
@GetMapping("/stockinfo/search")
public String searchStockInfo(Model model, @RequestParam String query) {
StockInfo stocks = stockInfoService.findByItmsNmOrSrtnCd(query);
model.addAttribute("stock", stocks);
return "search_stockinfo";
}
그 후 컨트롤러를 이용해서 새로운 페이지인 search_stockinfo로 이동하도록 하였다.
우선 stream을 이용해서 시장분류만 하나의 리스트로 만들었다.
List<String> mrktCtgList = pagingStocks.getContent()
.stream()
.map(StockInfo::getMrktCtg)
.distinct()
.collect(Collectors.toList());
service에 시장분류로 데이터를 가져오는 부분을 추가하였다.
public Page<StockInfo> findAllByMrktCtg(String filter, int page) {
Pageable pageable = PageRequest.of(page, 20);
return stockInfoRepository.findAllByMrktCtg(filter, pageable);
}
성공적으로 완성하였다.