1. 程式人生 > 其它 >【MybatisPlus】Wrappers條件構造器構造or條件查詢

【MybatisPlus】Wrappers條件構造器構造or條件查詢

一. 需求:

如下圖所示,需要同時查詢使用者id 和版本號,這裡使用MybatisPlus的構造器構造or()條件查詢

二. 程式碼如下:

1.入參物件

package com.leigod.modules.gamemaster.dto.Request;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date; /** * @author: Sam.yang * @date: 2020/11/19 17:44 * @desc: 崩潰日誌上傳 */ @Data @ApiModel(value = "崩潰日誌上傳d物件") public class CrashLogQryRequest { /** * 開始時間 */ @ApiModelProperty(value = "查詢開始時間 格式 yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date begin;
/** * 結束時間 */ @ApiModelProperty(value = "查詢結束時間 格式 yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date end; /** * 使用者id */ @ApiModelProperty(value = "使用者id") private String query; @ApiModelProperty(value = "日誌型別 1.崩潰日誌, 2.語音異常") private
Integer type; /** * 渠道 */ @ApiModelProperty(value = "渠道") private Integer reqChannel; /** * 解決狀態 0-已解決 1-為解決 */ @ApiModelProperty(value = "解決狀態 0-已解決 1-為解決 不傳則查詢全部") private Integer status; }

2.介面定義:

    /**
     * 查詢崩潰日誌列表
     *
     * @param pageSize 每頁記錄數
     * @param pageNo   當前頁碼
     * @param request  查詢物件
     * @return 分頁結果
     */
    @GetMapping("/list")
    @ApiOperation(value = "崩潰日誌列表(批量查詢)")
    public Result<IPage<CrashLog>> listCrashLog(@RequestParam(defaultValue = "10") Integer pageSize,
                                                @RequestParam(defaultValue = "1") Integer pageNo,
                                                CrashLogQryRequest request) {

        LambdaQueryWrapper<CrashLog> wrapper = Wrappers.<CrashLog>lambdaQuery()
                .eq(!ObjectUtils.isEmpty(request.getStatus()), CrashLog::getStatus, request.getStatus())
                .eq(!ObjectUtils.isEmpty(request.getReqChannel()), CrashLog::getReqChannel, request.getReqChannel())
                .eq(!ObjectUtils.isEmpty(request.getType()), CrashLog::getType, request.getType())
                .orderByDesc(CrashLog::getCreateTime);
        if (StringUtils.isNotBlank(request.getQuery())) {
            wrapper.nested(x -> x.like(CrashLog::getVersion, request.getQuery()).or().like(CrashLog::getUserId, request.getQuery()));
        }


        if (!ObjectUtils.isEmpty(request.getBegin())) {
            wrapper.ge(CrashLog::getCrashTime, DateUtil.beginOfDay(request.getBegin()));
        }

        if (!ObjectUtils.isEmpty(request.getEnd())) {
            wrapper.le(CrashLog::getCrashTime, DateUtil.endOfDay(request.getEnd()));
        }
        Page<CrashLog> dbPage = crashLogService.page(new Page<>(pageNo, pageSize), wrapper);

        return Result.ok(dbPage);
    }

最終打印出來的SQL結果:

SELECT  id,user_id,version,crash_log_url,crash_time,type,req_channel,create_time,create_by,update_by,update_time,status  FROM crash_log 
 WHERE (type = ? AND (version LIKE ? OR user_id LIKE ?)) ORDER BY create_time DESC