PageV0对象互转PageV1
原理都是取出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相关推荐
- php 类的数组对象,javascript、php数组对象互转类
代码: /* @desc:数组和对象互转类 @param data 待转换的数据 */ function arrobj(data){ this.data = data /* @desc:对象转数组 * ...
- jQuery对象和DOM对象互转的问题、jQuery文件引入问题、DOM版本的网页开关灯
jQuery对象和DOM对象互转的问题 <!DOCTYPE html> <html lang="en"> <head><meta char ...
- JSON 和 JavaScript 对象互转
JSON 和 JavaScript 对象互转 要实现从JSON字符串转换为JavaScript 对象,使用 JSON.parse() 方法: var obj = JSON.parse('{" ...
- Jackson使用:String 与对象互转、Jackson 从 json 字符串转换出对象
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.从json字符串转换出对象 Pager类: import com.fasterxml.jacks ...
- jQuery 对象与Dom 对象互转
jQuery 对象与Dom 对象互转: $obj --[i],get(i)-->obj --$(obj)-->$obj; obj--$($(obj))-->$obj,多包装了也是$o ...
- JSON 和 JS 对象互转
JSON 和 JS 对象互转 要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法: var json = JSON.stringify({a: 'Hello', b: ...
- JQuery语法 JQuery对象与原生对象互转 文档就绪函数与window.onload的区别
[JQuery语法] 1.jQuery("选择器").action();通过选择器调用事件函数,但是jquery中,jquery可以用$("选择器").acti ...
- 税务局接口-xml格式和对象互转工具类使用说明
税务局接口-xml格式和对象互转工具类使用说明 注意: 由于税务局接口请求xml数据和返回xml数据和常规的不一样,所以手动写了一个工具类,本工具类只针对税务局xml请求参数和返回参数与对象互相. 说 ...
- xml与java对象互转
摘要:将XML文档与JAVA对象互转是很常见的需求,如果XML定义很规整这很好实现.然而在现实中"不规矩"的XML可能更常见,Marshaller便无能为力了吗?下面是一个小技巧, ...
最新文章
- 不知道什么时间收集的code
- 宏基因组-微生物组文章目录索引(180401)
- Postgresql在Windows下的解压安装
- Silverlight 解谜游戏 之十三 游戏暗示(2)
- MySQL 为什么用索引,为什么是 B+树,怎么用索引
- wsl 重启_漫谈在Windows Server 2019中安装使用WSL
- python3.6教程案例分析_python 3.6 --实战Scrapy
- 软件开发技术文档_你知道,直播软件开发需要做的准备工作有哪些?
- 用三年时间培养 1W 名高素质技术人才,这是一个什么样的计划?
- centos7图形化界面安装KVM虚拟机
- 9个完整android开源app项目
- 如何在EXCEL中练习VBA?
- 记一次成功修复U盘的痛苦经历
- c语言绝对值大小并输出原值,c语言中绝对值大小的比较
- html实现银行卡中间四位显示为*号,银行卡和手机号中隐藏的数字用*号代替,不能和文字垂直居中,有什么解决方案吗?...
- html仿写网易云音乐人页面,vue模仿网易云音乐的单页面应用
- Python网络爬虫:爬取腾讯招聘网职位信息 并做成简单可视化图表
- 软件测试证述职报告ppt,实验室检测员的述职报告ppt
- html page 制作,webpageHTML
- 我谈“孙宇晨拍天价午餐”