Spring Data Jpa多表聯合分頁查詢
阿新 • • 發佈:2018-11-21
參考:https://blog.csdn.net/qq_36144258/article/details/80298354
近期一個專案用到Spring Data Jpa,Jpa用來做單表查詢非常的簡單粗暴,可以說不用寫sql,但是涉及到複雜的多表操作,還是要寫sql,這個時候需要用到@Query註解。@Query用法可見https://mp.csdn.net/postedit/82797015
@Query(value = "select new com.squid.service.dto.MyFriendDTO(uil.createdTime as inviteTime,ui.nickname as name,ui.grade as grade) from UserInviteLog as uil left join UserInfo as ui on uil.userId = ui.id where uil.inviteUserId = :userId and ui.grade > :grade", countQuery = "select count(uil.id) from UserInviteLog as uil left join UserInfo as ui on uil.userId = ui.id where uil.inviteUserId = :userId and ui.grade > :grade") Page<MyFriendDTO> findElitedByInviteUserId(@Param("userId")Long userId, @Param("grade")Integer grade, Pageable pageable);
com.squid.service.dto.MyFriendDTO是需要返回的實體類相當於我們XML中的resultMap,這個地方需要注意的是,一定要重寫返回的實體類的構造方法(具體引數根據new建立的引數設定,這裡是三參inviteTime、name、grade),否則將new失敗。
public MyFriendDTO(Long inviteTime, String name, Integer grade) { this.inviteTime = inviteTime; this.name = name; this.grade = grade; }
也可以不返回具體實體類直接返回List<Map<String, Object>>不過分頁就不好處理了。
countQuery就是為了配合Page計算總條數的。
分頁入參Pageable,我們和單表分頁一樣直接丟進去,springdata會幫我們處理好。