条件查询文章列表汇总

129 阅读1分钟

条件查询文章列表汇总

一、基础准备

1、分页参数

@Data
@Slf4j
public class PageRequestDto {

    protected Integer size;
    protected Integer page;
    // 参数检查,设置默认参数
    public void checkParam() {
        if (this.page == null || this.page < 0) {
            setPage(1);
        }
        if (this.size == null || this.size < 0 || this.size > 100) {
            setSize(10);
        }
    }
}

2、PageResponseResult类

public class PageResponseResult extends ResponseResult implements Serializable {
    private Integer currentPage;
    private Integer size;
    private Integer total;

    public PageResponseResult(Integer currentPage, Integer size, Integer total) {
        this.currentPage = currentPage;
        this.size = size;
        this.total = total;
    }

    public PageResponseResult() {

    }

    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }
}

3、查询参数WmNewsPageReqDto

@Data
public class WmNewsPageReqDto extends PageRequestDto {

    /**
     * 状态
     */
    private Short status;
    /**
     * 开始时间
     */
    private Date beginPubDate;
    /**
     * 结束时间
     */
    private Date endPubDate;
    /**
     * 所属频道ID
     */
    private Integer channelId;
    /**
     * 关键字
     */
    private String keyword;
}

二、核心代码

1、前端展示界面

image.png

2、后端核心分页代码

/**
 * 条件查询文章列表
 *
 * @param dto
 * @return
 */
@Override
public ResponseResult findList(WmNewsPageReqDto dto) {
    //1.检查参数
    //分页检查
    dto.checkParam();

    //2.分页条件查询
    IPage page = new Page(dto.getPage(), dto.getSize());
    LambdaQueryWrapper<WmNews> lambdaQueryWrapper = new LambdaQueryWrapper();
    //状态精确查询
    if (dto.getStatus() != null) {
        lambdaQueryWrapper.eq(WmNews::getStatus, dto.getStatus());
    }

    //频道精确查询
    if (dto.getChannelId() != null) {
        lambdaQueryWrapper.eq(WmNews::getChannelId, dto.getChannelId());
    }

    //时间范围查询
    if (dto.getBeginPubDate() != null && dto.getEndPubDate() != null) {
        lambdaQueryWrapper.between(WmNews::getPublishTime, dto.getBeginPubDate(), dto.getEndPubDate());
    }

    //关键字的模糊查询
    if (StringUtils.isNotBlank(dto.getKeyword())) {
        lambdaQueryWrapper.like(WmNews::getTitle, dto.getKeyword());
    }

    //查询当前登录人的文章
    lambdaQueryWrapper.eq(WmNews::getUserId, WmThreadLocalUtil.getUser().getId());

    //按照发布时间倒序查询
    lambdaQueryWrapper.orderByDesc(WmNews::getPublishTime);


    page = page(page, lambdaQueryWrapper);

    //3.结果返回
    ResponseResult responseResult = new PageResponseResult(dto.getPage(), dto.getSize(), (int) page.getTotal());
    responseResult.setData(page.getRecords());


    return responseResult;
}