一般来说对于查询数据list集合(比如查询文章),都有一些多功能的查询,就比如按时间排序,按浏览量排序,还有分页,限制查询几条,从第几条开始查询。是否为查询用户相关的文章,为了保证接口的复用性,我一般查询list集合只写了一个接口,但传过来的参数有很多,这样查询文章集合,无论查询文章集合是按时间查,按热度查,还是查询用户相关文章,还是查询相关标签下的文章都可以,但是不知道这样子查询有什么问题...
/**
*
* 查询相关文章 (按热度,按时间,按照搜索值,是否有用户id,标签)
*/
@PostMapping("/selectArtcleByUser")
public Result <List<Artcle>> selectArtcleByUser(@RequestBody PageVo pageVo) {
QueryWrapper queryWrapper = QueryWrapper.create();
//判断搜索有没有值
if (pageVo.getSearch()!=null){
queryWrapper.where(ARTCLE.ARTCLE_TITLE.like(pageVo.getSearch()));
}
//判断是不是根据用户查询
if(pageVo.getUserId()!=null) {
queryWrapper.where(ARTCLE.USER_ID.eq(pageVo.getUserId()));
}
//判断标签(可以为空)
if(pageVo.getStyle()!=null) {
//标签为全部不连表查
if(!Objects.equals(pageVo.getStyle(), "全部")) {
queryWrapper.join(CLASSIFY).on(CLASSIFY.ID.eq(ARTCLE.CLASSFY_ID))
.where(CLASSIFY.CLASS_NAME.eq(pageVo.getStyle()));
}
}
//判断排序类型
if(pageVo.getSortType().equals("data")){
queryWrapper.orderBy(ARTCLE.CREATE_TIME.desc());
}
else {
queryWrapper.orderBy(ARTCLE.ARTCLE_LOOK.desc());
}
//判断页数(必传)
Page<Artcle> page1 = new Page<>();
page1.setPageSize(pageVo.getPageSize());
//从第几页查询
page1.setPageNumber(pageVo.getPageNumber());
Page<Artcle> page = artcleService.page(page1,queryWrapper);
return Result.ok(page.getRecords(),page.getTotalRow());
}
@Data
public class PageVo {
/**
*查询数目
*/
private int pageNumber;
/**
*查询页数
*/
private int pageSize;
/**
* 标签(或者分类,1对1,一对多),也可以是条件
*/
private String style;
/**
* 用户id
*/
private Long userId;
/**
* 排序类型
*/
private String sortType;
/**
* 搜索值
*/
private String search;
/**
* 查询状态(查什么)
*/
private int searchState;
}
pageVo就是一些查询条件
实体类
@Data
@EqualsAndHashCode(callSuper = false)
@Table("artcle")
public class Artcle extends BaseEntity {
/**
标签id
*/
@JsonFormat(shape = JsonFormat.Shape.STRING)
private Long classfyId;
/**
文章标题
*/
// @NonNull
private String artcleTitle;
/**
文章内容
*/
// @NonNull
private String artcleContent;
/**
浏览量
*/
private Integer artcleLook;
// @Table(exist = false)
// @TableField(exist = false)
@Column(ignore = true)
private String className;
/**
用户id
*/
private Long userId;
}
不知道这样子写规范不规范,这么多if是不是影响性能,但现在暂时是这样写的