很多时候单表查询接口我们没有那么多复杂的操作,我们一般都会直接这么写
List<YourEntity> results = yourEntityDao.select();
这么写既快捷又方便,很多简单的查询一般都回这样写,但是如果想对id进行一个排序呢?
那很多人应该会像下边这样写
Example example = new Example(YourEntity.class);
example.setOrderByClause("id desc");
Example.Criteria criteria = example.createCriteria();
if (drpr.getDetectionCode()!= null) {
criteria.andLike("detectionCode", "%" + drpr.getDetectionCode() + "%");
}
if (drpr.getBatch()!= null) {
criteria.andLike("batch", "%" + drpr.getBatch() + "%");
}
if (drpr.getDetectionTime()!= null) {
criteria.andLike("detectionTime", "%" + drpr.getDetectionTime() + "%");
}
if (drpr.getOperator()!= null) {
criteria.andLike("operator", "%" + drpr.getOperator() + "%");
}
yourEntityDao.selectByExample(example);
这样写当然也可以,但是所有的参数我们都要定义一遍,如果正好这个表的参数很多,那岂不是会很麻烦,有没有简单一点的方法呢?当然有!
既然不能直接查出来就是排序好的,那为什么不查出来之后再排序呢?话不多说,我们直接上完整代码
List<YourEntity> results = yourEntityDao.select();
results.sort(Comparator.comparing(YourEntity::getYourProperty));//升序
results.sort(Comparator.comparing(YourEntity::getYourProperty).reversed());//降序
我们可以发现经过这样处理过后,数据已经是我们想要的顺序了,那么问题来了,如果这个数据需要分页呢,如果需要分页,那么结果出来你就会惊奇的发现,他只会将每个分好页的数据进行排序,并不会将所有的进行排序,那我们先查询、排序然后再进行分页呢?显然也是不行的,我们会发现分页直接失效了,因为PageHelper中startPage开启分页方法只对后面的sql查询起作用,我们后边并没有sql查询了,所以这个分页也就失效了
List<YourEntity> results = yourEntityDao.select();
results.sort(Comparator.comparing(YourEntity::getYourProperty));//升序
results.sort(Comparator.comparing(YourEntity::getYourProperty).reversed());//降序
com.github.pagehelper.Page<Result> resultPage = PageHelper.startPage(page.getPageNum(), page.getPageSize());
return Result.data(resultPage.getTotal(), results);
那我们要怎么处理呢?其实很简单,我们直接上最终代码
com.github.pagehelper.Page<Result> resultPage = PageHelper.startPage(page.getPageNum(), page.getPageSize()).setOrderBy("id desc");
List<YourEntity> results = yourEntityDao.select();
return Result.data(resultPage.getTotal(), results);
至此,完美解决
最后欢迎大家留言指出不足与错误