1. 程式人生 > >Spring boot 多表關聯查詢

Spring boot 多表關聯查詢

返回值:

如圖:,返回結果中,根據股票程式碼關聯查詢了股票名稱,這邊spring boot 有自帶jpa的寫法,下一篇,介紹roo.join();這邊介紹下hibernate的寫法,

Controller:

 /**
    * 查詢最新的標的券得分介面
* @return
*/
@GetMapping(value = "/allScore")
public Result find(@PageableDefault(value = 15,sort = {"securityScore"},direction = Sort.Direction.DESC)Pageable pageable
                ,
@RequestParam(value = "code",required = false) String code){ Grid grid = svService.findAllScore(pageable,code); return ResultUtil.success(grid); }
Service:
/**
 * 查詢最新標的券的得分
* @return
*/
public Grid findAllScore(Pageable pageable,String code){
    Sort sort = new Sort(Sort.Direction.DESC,"stopTime"
); PageRequest pr = new PageRequest(0,1,sort); //findByStopTimeIsNotNull方法就是排除了stoptime欄位為空的情況,在用PageRequest排序 Page<SvScoreRecord> currentScore = svScoreRecordRepository.findByStopTimeIsNotNull(pr); String recordId = currentScore.getContent().get(0).getId(); Page<SvScoreStock> page = null; if
(StringUtils.isEmpty(code)) { page = svScoreRepository.findAllScore(recordId,pageable); if (page.getSize() <= 0){ throw new ServiceException(ResultEnum.NO_FACTOR.getCode(),"查詢不到當前股票最新的分"); } } else { page = svScoreRepository.findAllScoreByCode(code,recordId,pageable); if (page.getSize() <= 0){ throw new ServiceException(ResultEnum.NO_FACTOR.getCode(),"查詢不到所有股票最新的分"); } } Grid grid = new Grid(null,page.getTotalPages()); List list1 = new ArrayList(); list1.add(0,"tradingcode"); list1.add(1,"secuabbr"); list1.add(2,"securityScore"); list1.add(3,"financeConversionRate"); list1.add(4,"tradingPledgeRate"); grid.setIds(list1); List list2 = new ArrayList(); list2.add(0,"股票程式碼"); list2.add(1,"股票名稱"); list2.add(2,"標的券得分"); list2.add(3,"融資融券基準折算率"); list2.add(4,"股票質押率"); grid.setHds(list2); grid.setRows(page.getContent()); return grid; }

Repository:

@Query("select s.tradingcode as tradingcode, s.recordId as recordId, s.securityScore as securityScore," +
        " s.financeConversionRate as financeConversionRate, s.tradingPledgeRate as tradingPledgeRate," +
        " t.secuabbr as secuabbr from SV_SCORE s left join s.stock t where s.tradingcode = ?1 and s.recordId = ?2")
Page<SvScoreStock> findAllScoreByCode(String code,String recordId,Pageable pageable);
@Query("select s.tradingcode as tradingcode, s.recordId as recordId, s.securityScore as securityScore," +
        " s.financeConversionRate as financeConversionRate, s.tradingPledgeRate as tradingPledgeRate," +
        " t.secuabbr as secuabbr from SV_SCORE s left join s.stock t where s.recordId = ?1")
Page<SvScoreStock> findAllScore(String recordId,Pageable pageable);