原理都是取出Page包装的对象,然后实现对象之间的互传,在返回Page,这里介绍几种实现方式

1. 这个mapper是基于mapStruct,常用来实现Model,DTO的互转,

    <!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-jdk8 --><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-jdk8</artifactId><version>1.3.0.Final</version></dependency>

引 Jar,pom文件引Jar,还有build插件,Maven 编译等,稍微麻烦些

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.6.1</version><configuration><source>${java.version}</source><target>${java.version}</target><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.22</version></path><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>1.3.0.Final</version></path></annotationProcessorPaths><compilerArgs><arg>-Amapstruct.suppressGeneratorTimestamp=true</arg><arg>-Amapstruct.defaultComponentModel=spring</arg></compilerArgs></configuration></plugin>

以下是demo示例

 public Page<CustomerDTO> page2(){PageRequest pageRequest = PageRequest.of(0, 20, Sort.Direction.DESC,"customerNumber");Page<CustomersEntity> all = customerRepo.findAll(pageRequest);Page<CustomerDTO> map = all.map(e -> customerMapper.toCustomerDto(e));return map;}

2. 基于Json实现对象的互转,这里我用的是Hutool包,(注意这里如果涉及时间类型的字段映射,可能会转换错误)

   public Page<CustomerDTO> page3(){PageRequest pageRequest = PageRequest.of(0, 20, Sort.Direction.DESC,"customerNumber");Page<CustomersEntity> all = customerRepo.findAll(pageRequest);Page<CustomerDTO> map = all.map(e -> JSONUtil.toBean(JSONUtil.toJsonStr(e),CustomerDTO.class));return map;}

注意,Hutool包的JsonUtil在转换对象的时候,有时候会因为时间类型(LocalDateTime)的字段,转换错误,第一种Mapper方式还没试

3. 使用构造方法实现对象的转换,在V0中定义如下的构造方法即可,注意参数

public MoveRecordVo(MoveInfo moveInfo) {this.assetId = moveInfo.getAssetId();this.assetName = moveInfo.getAssetName();this.startTime = moveInfo.getStartTime();this.endTime = moveInfo.getEndTime();this.moveTime = null;this.moveStatus = moveInfo.getMoveStatus();this.remarks = moveInfo.getRemarks();this.isOperate = null;}

这样在转换对象的时候,就很方便了

Page<MoveInfo> all = moveInfoRepository.findAll(pageRequest);
Page<MoveRecordVo> map = all.map(e -> new MoveRecordVo(e));

4. 还有一种方法,稍微麻烦一点,就是先把Page转成List,再根据之前的分页参数(JPA,根据前端传参,计算好的分页参数Pageable)返回封装Page,代码如下,不想细整理了

public Page<TranscodeRecordVo> findAll(TranscodeDto transcodeDto, int page, int rows, String sord, String sidx) {if (StrUtil.isBlankIfStr(sidx)) {sidx = "transcodeId";}PageRequest pageRequest = PageRequest.of(page - 1, rows, Sort.by(Sort.Order.asc(sidx), Sort.Order.desc("collectTime")));Page<Transcode> all = transcodeRepository.findAll((Specification<Transcode>) (root, query, cb) -> {List<Predicate> predicates = Lists.newArrayList();predicates.add(cb.equal(root.get("groupId"), transcodeDto.getGroupId()));if (!StrUtil.isBlankIfStr(transcodeDto.getAssetId())) {predicates.add(cb.equal(root.get("assetId"), transcodeDto.getAssetId()));}if (!StrUtil.isBlankIfStr(transcodeDto.getAssetName())) {predicates.add(cb.like(root.get("assetName"), "%" + transcodeDto.getAssetName() + "%"));}if (!StrUtil.isBlankIfStr(transcodeDto.getTranscodeStatus())) {predicates.add(cb.equal(root.get("transcodeStatus"), transcodeDto.getTranscodeStatus()));}if (!StrUtil.isBlankIfStr(transcodeDto.getFromStartTime())) {predicates.add(cb.greaterThanOrEqualTo(root.get("endTime"), transcodeDto.getFromStartTime()));}if (!StrUtil.isBlankIfStr(transcodeDto.getToEndTime())) {predicates.add(cb.lessThanOrEqualTo(root.get("endTime"), transcodeDto.getToEndTime()));}return cb.and(predicates.toArray(new Predicate[0]));}, pageRequest);ArrayList<TranscodeRecordVo> list = Lists.newArrayList();all.getContent().forEach(e -> {TranscodeRecordVo vo = new TranscodeRecordVo();BeanUtil.copyProperties(e, vo);list.add(vo);});list.forEach(e -> {if (NodeResultEnum.TranscodeStatus.STARTED.getKey().equals(e.getTranscodeStatus())) {e.setTransTime(DateUtil.formatBetween(ChronoUnit.MILLIS.between(e.getStartTime(), LocalDateTime.now()), BetweenFormater.Level.SECOND));} else {e.setTransTime(DateUtil.formatBetween(ChronoUnit.MILLIS.between(e.getStartTime(), e.getEndTime()), BetweenFormater.Level.SECOND));}if (NodeResultEnum.TranscodeStatus.FAILED.getKey().equals(e.getTranscodeStatus())) {e.setIsOperate(YesOrNoEnum.YES.getCode());} else {e.setIsOperate(YesOrNoEnum.NO.getCode());}});return new PageImpl<>(list, all.getPageable(), all.getTotalElements());}

这里是我业务中的代码,关于List,Page对象,稍微复杂点的操作

PageV0对象互转PageV1相关推荐

  1. php 类的数组对象,javascript、php数组对象互转类

    代码: /* @desc:数组和对象互转类 @param data 待转换的数据 */ function arrobj(data){ this.data = data /* @desc:对象转数组 * ...

  2. jQuery对象和DOM对象互转的问题、jQuery文件引入问题、DOM版本的网页开关灯

    jQuery对象和DOM对象互转的问题 <!DOCTYPE html> <html lang="en"> <head><meta char ...

  3. JSON 和 JavaScript 对象互转

    JSON 和 JavaScript 对象互转 要实现从JSON字符串转换为JavaScript 对象,使用 JSON.parse() 方法: var obj = JSON.parse('{" ...

  4. Jackson使用:String 与对象互转、Jackson 从 json 字符串转换出对象

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.从json字符串转换出对象 Pager类: import com.fasterxml.jacks ...

  5. jQuery 对象与Dom 对象互转

    jQuery 对象与Dom 对象互转: $obj --[i],get(i)-->obj --$(obj)-->$obj; obj--$($(obj))-->$obj,多包装了也是$o ...

  6. JSON 和 JS 对象互转

    JSON 和 JS 对象互转 要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法: var json = JSON.stringify({a: 'Hello', b: ...

  7. JQuery语法 JQuery对象与原生对象互转 文档就绪函数与window.onload的区别

    [JQuery语法] 1.jQuery("选择器").action();通过选择器调用事件函数,但是jquery中,jquery可以用$("选择器").acti ...

  8. 税务局接口-xml格式和对象互转工具类使用说明

    税务局接口-xml格式和对象互转工具类使用说明 注意: 由于税务局接口请求xml数据和返回xml数据和常规的不一样,所以手动写了一个工具类,本工具类只针对税务局xml请求参数和返回参数与对象互相. 说 ...

  9. xml与java对象互转

    摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中"不规矩"的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧, ...

最新文章

  1. 不知道什么时间收集的code
  2. 宏基因组-微生物组文章目录索引(180401)
  3. Postgresql在Windows下的解压安装
  4. Silverlight 解谜游戏 之十三 游戏暗示(2)
  5. MySQL 为什么用索引,为什么是 B+树,怎么用索引
  6. wsl 重启_漫谈在Windows Server 2019中安装使用WSL
  7. python3.6教程案例分析_python 3.6 --实战Scrapy
  8. 软件开发技术文档_你知道,直播软件开发需要做的准备工作有哪些?
  9. 用三年时间培养 1W 名高素质技术人才,这是一个什么样的计划?
  10. centos7图形化界面安装KVM虚拟机
  11. 9个完整android开源app项目
  12. 如何在EXCEL中练习VBA?
  13. 记一次成功修复U盘的痛苦经历
  14. c语言绝对值大小并输出原值,c语言中绝对值大小的比较
  15. html实现银行卡中间四位显示为*号,银行卡和手机号中隐藏的数字用*号代替,不能和文字垂直居中,有什么解决方案吗?...
  16. html仿写网易云音乐人页面,vue模仿网易云音乐的单页面应用
  17. Python网络爬虫:爬取腾讯招聘网职位信息 并做成简单可视化图表
  18. 软件测试证述职报告ppt,实验室检测员的述职报告ppt
  19. html page 制作,webpageHTML
  20. 我谈“孙宇晨拍天价午餐”

热门文章

  1. redis.conf 7.0 配置和原理全解,生产王者必备
  2. 前端开发就业方向有哪些?
  3. 日式皮肤管理4招教你皮肤管理的流程
  4. 彻底理解浏览器的Http缓存机制
  5. 如何自动化 OWASP ZAP
  6. 决策树之构造决策树(一)
  7. 【51NOD 1501】【51NOD 算法马拉松19】石头剪刀布威力加强版
  8. python配置文件(ini文件)
  9. 人到中年心事重的人,抓紧读懂曾国藩这4句话,莫让余生越混越差
  10. 更改服务器操作系统的方法,更改服务器操作系统