1. 程式人生 > 實用技巧 >mybatis-plus 多表條件分頁查詢

mybatis-plus 多表條件分頁查詢

今天寫mybatis-plus 多表條件分頁查詢的時候碰到很多問題,這裡記錄下

首先說下業務,這個是要展現的頁面。根據篩選的條件對資料進行分頁查詢。

1. 建立一個dto來對應查詢條件,我這個dto是繼承了自己寫的分頁用的model,主要是為了分頁的時候不用再寫pagesize和page

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class PagedWeeklyDto extends PagedModel {

    @ApiModelProperty(value = "查詢開始時間")
    private
LocalDateTime queryStartTime; @ApiModelProperty(value = "查詢結束時間") private LocalDateTime queryEndTime; @ApiModelProperty(value = "反饋狀態 '1'表示已反饋 '0'表示未反饋 '-1'表示全部狀態") private String feedbackStatus; @ApiModelProperty(value = "所選使用者Account集合 List<String>型別") private List<String> createAccounts; }

2 .還是像往常一樣去建立page和querywapper,這裡要注意下,一定要引入分頁的外掛,不引入的話會報錯

@Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }

3. 建立page和querywapper物件,這裡要具體說一下。這個 wi 指的是你sql中的表名,因為我的多表中基本都有這個欄位,不加的話,會出現欄位指定不明確的錯誤。

service:

       // 構造分頁物件
        Page<PagedWeeklyVo> page = new
Page<>(pagedWeeklyDto.getPageNo(),pagedWeeklyDto.getPageSize()); // 構造查詢物件 QueryWrapper<Info> queryWrapper = new QueryWrapper(); queryWrapper.and( v-> v.in("wi.create_account",createAccounts)); if(!StatusEnum.ALL_FEEDBACK.getCode().equals(feedbackStatus)){ queryWrapper.eq("wi.feedback_status",feedbackStatus); } queryWrapper.ge("wi.create_time",queryStartTime); queryWrapper.le("wi.create_time",queryEndTime);

mapper:這個是mapper層程式碼,我沒有寫到xml中(公司不允許)。我這裡查詢的條件是封裝到querywapper中的,沒有在sql中寫,這裡${ew.customSqlSegment} 必須要,這個是引用引數中的條件,page必須放到第一位,和 basemapper中selectPage是一個道理


@Select("select wi.weekly_no as weeklyNo,wi.feedback_status as feedbackStatus,wi.read_status as readStatus,wi.create_time as createTime,\n" +
" pc.content,\n" +
" pm.avatar,pm.name as nickname\n" +
"from weekly_info wi left outer join project_content pc on wi.weekly_no = pc.weekly_no\n" +
" left outer join project_member pm on pc.create_account = pm.account ${ew.customSqlSegment}")
IPage<PagedWeeklyVo> searchWeeklyPage(Page<PagedWeeklyVo> page, @Param(Constants.WRAPPER) QueryWrapper<Info> queryWrapper);

其實寫完後覺得沒啥,但是在寫的時候出現很多問題,大家一定要注意欄位必須要表明是哪個表的,就是第三個點