【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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM