1.相关基础类和工具类的准备
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 分页结果数据接收对象
*
*/
@Data
@ApiModel(value = "分页数据")
public class PageData implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "总记录数")
private int total;
@ApiModelProperty(value = "列表数据")
private List list;
@ApiModelProperty(value = "每页显示数量")
private int size;
@ApiModelProperty(value = "可显示的页数")
private int pages;
@ApiModelProperty(value = "当前页码,从1开始")
private int current;
public PageData(){}
/**
* 分页
* @param list 列表数据
* @param total 总记录数
*/
public PageData(List list, long total) {
this.list = list;
this.total = (int)total;
}
}
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sxbscm.common.page.PageData;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
public class PageBuilder {
private static PageData copy(IPage page) {
PageData result = new PageData();
result.setSize((int)page.getSize());
result.setTotal((int)page.getTotal());
result.setPages((int)page.getPages());
result.setCurrent((int)page.getCurrent());
return result;
}
/**
* 数据 转化
* @param page
* @param list
* @param
* @param
* @return
*/
public static PageData copyAndConvert(IPage page, List list) {
PageData result = copy(page);
result.setList(list);
return result;
}
public static PageData copyAndConvert(IPage page, Function function) {
PageData result = copy(page);
result.setList(page.getRecords().stream().map(v -> function.apply(v)).collect(Collectors.toList()));
return result;
}
}
@Data
@ApiModel
public class SupplierContractQuery extends BasicQuery {
@ApiModelProperty(value = "供应商ID")
private Long supplierId;
}
@Data
@ApiModel
public class BasicQuery implements Serializable {
@ApiModelProperty(value = "页面尺寸",required = true)
private int limit;
@ApiModelProperty(value = "当前页码",required = true)
private int page;
@ApiModelProperty(value = "排序字段",required = false)
private String orderByField;
}
@Data
@ApiModel
public class BasicQueryDto implements Serializable {
@ApiModelProperty(value = "页面尺寸",required = true)
private int limit;
@ApiModelProperty(value = "当前页码",required = true)
private int page;
@ApiModelProperty(value = "排序字段",required = false)
private String orderByField;
}
2.对应的Dao接口以及mapper配置文件
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
@Mapper
public interface SupplierContractDao extends BaseMapper {
List selectPage(IPage page, @Param("contract") SupplierContractDTO supplierContractDTO);
}
3.Service接口以及相关实现类
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
public interface SupplierContractService extends IService {
PageData findPage(SupplierContractDTO supplierContractDTO);
}
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SupplierContractServiceImpl extends ServiceImpl implements SupplierContractService {
@Override
public PageData findPage(SupplierContractDTO supplierContractDTO) {
IPage page = new Page<>(supplierContractDTO.getPage(), supplierContractDTO.getLimit());
List supplierContractDTOS = this.getBaseMapper().selectPage(page, supplierContractDTO);
return PageBuilder.copyAndConvert(page, supplierContractDTOS);
}
}
4.Controller的调用
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("supplier")
public class SupplierContractController {
@Autowired
private SupplierContractService supplierContractService;
@GetMapping("page")
@ApiOperation("分页")
public Result> page(@ModelAttribute SupplierContractQuery query){
PageData page = supplierContractService.findPage(ObjectUtil.source2Target(query, SupplierContractDTO.class));
return new Result>().ok(page);
}
}
注意:
1.controller里面的query对象需要继承BasicQuery;
2.xxxDao需要继承BasicQueryDto;
备注:本文仅用来记录mybatis-plus实现多表分页关联查询的思路,引用的类是不完整的。