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<T> implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "总记录数")
private int total;
@ApiModelProperty(value = "列表数据")
private List<T> 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<T> 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 <S,T> PageData<T> copy(IPage<S> page) {
PageData<T> result = new PageData<T>();
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 <S>
* @param <T>
* @return
*/
public static <S, T> PageData<T> copyAndConvert(IPage<S> page, List<T> list) {
PageData<T> result = copy(page);
result.setList(list);
return result;
}
public static <S, T> PageData<T> copyAndConvert(IPage<S> page, Function<S, T> function) {
PageData<T> 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<SupplierContractEntity> {
List<SupplierContractDTO> selectPage(IPage<SupplierContractDTO> page, @Param("contract") SupplierContractDTO supplierContractDTO);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.SupplierContractDao">
<resultMap type="xxx.SupplierContractEntity" id="supplierContractMap">
<result property="id" column="id"/>
<result property="supplierId" column="supplier_id"/>
<result property="contractNo" column="contract_no"/>
<result property="contractAName" column="contract_a_name"/>
<result property="contractACompanyName" column="contract_a_company_name"/>
<result property="contractACardNo" column="contract_a_card_no"/>
<result property="contractAAddress" column="contract_a_address"/>
<result property="contractAPhone" column="contract_a_phone"/>
<result property="contractBName" column="contract_b_name"/>
<result property="contractBCompanyName" column="contract_b_company_name"/>
<result property="contractBCardNo" column="contract_b_card_no"/>
<result property="contractBAddress" column="contract_b_address"/>
<result property="contractBPhone" column="contract_b_phone"/>
<result property="contractStartDate" column="contract_start_date"/>
<result property="contractEndDate" column="contract_end_date"/>
<result property="contractSignedAddress" column="contract_signed_address"/>
<result property="sort" column="sort"/>
<result property="creator" column="creator"/>
<result property="createDate" column="create_date"/>
<result property="updater" column="updater"/>
<result property="updateDate" column="update_date"/>
<result property="remark" column="remark"/>
<result property="enabled" column="enabled"/>
<result property="isDelete" column="is_delete"/>
<result property="tenantCode" column="tenant_code"/>
</resultMap>
<select id="selectPage" resultType="xxx.SupplierContractDTO">
SELECT sc.`*`, ss.supplier_name supplierName FROM supplier_contract sc
LEFT JOIN supplier ss ON ss.id = sc.supplier_id AND ss.is_delete = 0
WHERE sc.is_delete = 0
<if test="contract.supplierId != null">
and sc.supplier_id = #{contract.supplierId}
</if>
</select>
</mapper>
3.Service接口以及相关实现类
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
public interface SupplierContractService extends IService<SupplierContractEntity> {
PageData<SupplierContractDTO> 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<SupplierContractDao, SupplierContractEntity> implements SupplierContractService {
@Override
public PageData<SupplierContractDTO> findPage(SupplierContractDTO supplierContractDTO) {
IPage<SupplierContractDTO> page = new Page<>(supplierContractDTO.getPage(), supplierContractDTO.getLimit());
List<SupplierContractDTO> 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<PageData<SupplierContractDTO>> page(@ModelAttribute SupplierContractQuery query){
PageData<SupplierContractDTO> page = supplierContractService.findPage(ObjectUtil.source2Target(query, SupplierContractDTO.class));
return new Result<PageData<SupplierContractDTO>>().ok(page);
}
}
注意:
1.controller里面的query对象需要继承BasicQuery;
2.xxxDao需要继承BasicQueryDto;
备注:本文仅用来记录mybatis-plus实现多表分页关联查询的思路,引用的类是不完整的。