一. 需求:
如下圖所示,需要同時查詢用戶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