Mybatis Plus快速实现关联查询并支持分页

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实现多表分页关联查询的思路,引用的类是不完整的。

你可能感兴趣的:(关联查询,自定义分页查询,MP关联查询,MP分页查询,MP自定义查询)