首先实现类先继承实现好接口:
方法实现,我用的是自带的page方法,把传参pagenum和pagesize放到page对象中,注意这个page对象是导包是从:
package com.baomidou.mybatisplus.extension.plugins.pagination;不能导入错了,ProvinceSorce就是对应数据库的实体类了,用来接受对应的字段;最后这个tableddatainfo是自己封装的返回方法,实际开发中如果不想封装可以直接返回list数据,也就是page.getRecords;
/**
* 全身得分情况分页条件查询
*
* @param hospitalScoreDetailQuery 筛选条件
* @return 查询结果
*/
@Override
public TableDataInfo queryByPage(HospitalScoreDetailQuery hospitalScoreDetailQuery) {
if (StringUtils.isBlank(hospitalScoreDetailQuery.getReportDate())){
return new TableDataInfo(0,Collections.emptyList());
}
//获取医院等级字典列表
List<SysDictData> level = iSysDictTypeService.selectDictDataByType("sys_hosp_leve");
Map<String, String> collect = level.stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
// PageUtils.startPage();
MPJLambdaWrapper<ProvinceScore> wrapper= new MPJLambdaWrapper<ProvinceScore>()
.selectAll(ProvinceScore.class)
.leftJoin(TsWebHospital.class,
TsWebHospital::getHospname, ProvinceScore::getHospitalName)
.eq(StringUtils.isNotBlank(hospitalScoreDetailQuery.getReportDate()),
ProvinceScore::getDate, hospitalScoreDetailQuery.getReportDate())
.eq(StringUtils.isNotBlank(hospitalScoreDetailQuery.getHospitalThirdType()), ProvinceScore::getHospitalType,
hospitalScoreDetailQuery.getHospitalThirdType())
.eq(StringUtils.isNotBlank(hospitalScoreDetailQuery.getLevel()),ProvinceScore::getHospitalLevel,collect.get(hospitalScoreDetailQuery.getLevel()))
.orderByAsc(ProvinceScore::getSort);
//分页核心
int pageNum = hospitalScoreDetailQuery.getPageNum();
int pageSize = hospitalScoreDetailQuery.getPageSize();
//注意导包:mybatisplus
Page<ProvinceScore> provinceScorePage = new Page<>();
provinceScorePage.setSize(pageSize);
provinceScorePage.setCurrent(pageNum);
provinceScorePage.setOptimizeCountSql(true);
Page<ProvinceScore> page = page(provinceScorePage, wrapper);
List<ProvinceScore> records = page.getRecords();
List<ProvinceScore> provinceScores = Optional.ofNullable(records).orElse(Collections.emptyList());
List<ProvinceScoreVO> voList = BeanUtil.copyToList(provinceScores, ProvinceScoreVO.class);
voList.forEach(vo -> {
//数据封装
vo.setChapterFive(new ProvinceScoreBO(vo.getChapterFiveTotalScore(), vo.getChapterFiveScore(), vo.getChapterFiveScoreRate()));
vo.setChapterFour(new ProvinceScoreBO(vo.getChapterFourTotalScore(), vo.getChapterFourScore(), vo.getChapterFourScoreRate()));
vo.setChapterThree(new ProvinceScoreBO(vo.getChapterThreeTotalScore(), vo.getChapterThreeScore(), vo.getChapterThreeScoreRate()));
vo.setChapterTwo(new ProvinceScoreBO(vo.getChapterTwoTotalScore(), vo.getChapterTwoScore(), vo.getChapterTwoScoreRate()));
vo.setChapterOne(new ProvinceScoreBO(vo.getChapterOneTotalScore(), vo.getChapterOneScore(), vo.getChapterOneScoreRate()));
vo.setQuarterly(new ProvinceScoreBO(vo.getQuarterlyTotalScore(), vo.getQuarterlyScore(), vo.getQuarterlyScoreRate()));
vo.setYear(new ProvinceScoreBO(vo.getYearTotalScore(), vo.getYearScore(), vo.getYearScoreRate()));
vo.setHand(new ProvinceScoreBO(vo.getHandTotalScore(), vo.getHandScore(), vo.getHandScoreRate()));
vo.setAuto(new ProvinceScoreBO(vo.getAutoTotalScore(), vo.getAutoScore(), vo.getAutoScoreRate()));
vo.setTotal(new ProvinceScoreBO(vo.getTotalScore(), vo.getScore(), vo.getScoreRate()));
vo.setTotalAchieved(new ProvinceScoreBO(vo.getFullScore(), vo.getTotalAchievedScore(), vo.getTotalAchievedScoreRate()));
});
return new TableDataInfo(page.getTotal(), voList);
}
provinceScorePage.setOptimizeCountSql(true);的作用:在分页的时候会执行两条sql
--原始sql
SELECT * FROM ts_province_score t LEFT JOIN ts_web_hospital t1 ON t1.hospname = t.hospital_name WHERE ...
--开启之后
-- 1. 用来查总数(count)
SELECT COUNT(*) FROM ts_province_score t LEFT JOIN ts_web_hospital t1 ON t1.hospname = t.hospital_name WHERE ...
-- 2. 用来查分页数据
SELECT * FROM ts_province_score t LEFT JOIN ts_web_hospital t1 ON t1.hospname = t.hospital_name WHERE ... LIMIT ? OFFSET ?
附:TableDateInfo返回类,这里的状态码就自己设置了就可以了
import java.io.Serializable;
import java.util.List;
/**
* 表格分页数据对象
*
*
*/
public class TableDataInfo implements Serializable
{
private static final long serialVersionUID = 1L;
/** 总记录数 */
private long total;
/** 列表数据 */
private List<?> rows;
/** 消息状态码 */
private int code;
/** 消息内容 */
private String msg;
/**
* 表格数据对象
*/
public TableDataInfo()
{
}
/**
* 分页
*
* @param list 列表数据
* @param total 总记录数
*/
public TableDataInfo(List<?> list, int total)
{
this.rows = list;
this.total = total;
}
/**
* 表格数据对象
*/
public TableDataInfo(long total, List<?> list)
{
this.setCode(HttpStatus.SUCCESS);
this.setMsg("查询成功");
this.setTotal(total);
this.setRows(list);
}
public long getTotal()
{
return total;
}
public void setTotal(long total)
{
this.total = total;
}
public List<?> getRows()
{
return rows;
}
public void setRows(List<?> rows)
{
this.rows = rows;
}
public int getCode()
{
return code;
}
public void setCode(int code)
{
this.code = code;
}
public String getMsg()
{
return msg;
}
public void setMsg(String msg)
{
this.msg = msg;
}
}