返回

跨层级泛型类型转换:PageInfo 泛型与其他类型间的协奏曲

后端

在软件开发中,跨层级类型转换是不可避免的问题,尤其是在涉及到不同层级的数据交换时,例如 controller 层和 mapper 层之间的数据交换。为了解决这一问题,PageInfo 泛型应运而生。它可以方便地将不同层级的数据类型进行转换,从而实现数据在不同层级之间的无缝流转。

PageInfo 泛型简介

PageInfo 泛型是一个非常有用的工具,它可以让我们在不同的层级之间进行类型转换。PageInfo 泛型的基本语法如下:

public class PageInfo<T> {
    private List<T> list;
    private long total;
    private int pageNum;
    private int pageSize;
    //省略其他属性和方法
}

PageInfo 泛型包含了四个属性:list、total、pageNum 和 pageSize。list 属性是泛型类型,它可以存储任何类型的对象。total 属性表示数据的总条数,pageNum 属性表示当前页的页码,pageSize 属性表示每页显示的数据条数。

PageInfo 泛型在跨层级类型转换中的应用

PageInfo 泛型在跨层级类型转换中的应用非常广泛,下面是一些常见的应用场景:

  • controller 层与 mapper 层之间的数据转换: controller 层通常会返回 PageInfo 泛型类型的数据,而 mapper 层通常会返回 model 类型的数据。此时,我们可以使用 PageInfo 泛型将 model 类型的数据转换为 PageInfo 泛型类型的数据,从而实现数据在 controller 层和 mapper 层之间的无缝流转。
  • service 层与 dao 层之间的数据转换: service 层通常会返回 PageInfo 泛型类型的数据,而 dao 层通常会返回 list 类型的数据。此时,我们可以使用 PageInfo 泛型将 list 类型的数据转换为 PageInfo 泛型类型的数据,从而实现数据在 service 层和 dao 层之间的无缝流转。
  • 其他层级之间的数据转换: PageInfo 泛型还可以用于其他层级之间的数据转换,例如 web 层和业务层之间的数据转换、业务层和持久层之间的数据转换等。

PageInfo 泛型的使用示例

下面是一个使用 PageInfo 泛型进行跨层级类型转换的示例:

// controller 层代码
@RequestMapping("/list")
public PageInfo<UserVO> list(UserVO userVO) {
    // 查询数据
    PageInfo<UserModel> pageInfo = userService.list(userVO);

    // 将 model 类型的数据转换为 VO 类型的数据
    PageInfo<UserVO> result = new PageInfo<>();
    result.setList(pageInfo.getList().stream().map(UserModel::toVO).collect(Collectors.toList()));
    result.setTotal(pageInfo.getTotal());
    result.setPageNum(pageInfo.getPageNum());
    result.setPageSize(pageInfo.getPageSize());

    return result;
}

// mapper 层代码
public PageInfo<UserModel> list(UserVO userVO) {
    // 查询数据
    List<UserModel> list = userDao.list(userVO);

    // 将数据封装成 PageInfo 对象
    PageInfo<UserModel> pageInfo = new PageInfo<>();
    pageInfo.setList(list);
    pageInfo.setTotal(userDao.count(userVO));
    pageInfo.setPageNum(userVO.getPageNum());
    pageInfo.setPageSize(userVO.getPageSize());

    return pageInfo;
}

在这个示例中,我们在 controller 层使用了 PageInfo 泛型将 model 类型的数据转换为 VO 类型的数据,从而实现了数据在 controller 层和 mapper 层之间的无缝流转。

结束语

PageInfo 泛型是一个非常有用的工具,它可以让我们在不同的层级之间进行类型转换。PageInfo 泛型的应用非常广泛,它可以用于 controller 层与 mapper 层之间的数据转换、service 层与 dao 层之间的数据转换,以及其他层级之间的数据转换。