Python 官方文档:入门教程 => 点击学习
目录起因1. 将Entity转化为Vo2. 将List<Entity>转换为List<Vo>封装到工具类后使用性能以及原理ConvertUtil工具类源码起因
使用 mybatis-plus 操作后获得的数据类型为 Entity,但是前端界面往往需要展示一些其他的字段数据,此时就需要 将 Entity 转化为 Vo。
那么他们三者的关系是什么呢?面向的使用对象不同
entity: 对应数据库表模型
vo: 对应需要返回到前端的数据模型
dto: 对应后台内部调用的数据模型
package com.springblog.entity.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class BlogVo implements Serializable {
private String title;
private String otherProperty;
}
package com.springblog.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@TableName("m_blog")
public class BlogEntity implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String title;
private String description;
private String content;
private LocalDateTime created;
}
@GetMapping("/one/{id}")
public R oneDefine(@PathVariable(name = "id") Long id) {
BlogEntity blogEntity = blogService.queryBlogById(id);
BlogVo blogVo = new BlogVo();
BeanUtil.copyProperties(blogEntity,blogVo);
blogVo.setOtherProperty("前端展示额外字段");
return R.ok().put("data", blogVo);
}
如果采用最简单粗暴的方式,那么这个过程应该是这样的:
BeanUtil.copyProperties(source,target)
将每一个Entity转化为vo过于繁琐,这很不好
@GetMapping("/list1")
public R list1(@RequestBody Map<String, Object> params) {
QueryWrapper<BlogEntity> queryWrapper = new QueryWrapper<>();
List<BlogEntity> list = blogMapper.selectList(queryWrapper);
ArrayList<BlogVo> voList = new ArrayList<>();
list.forEach(item->{
BlogVo voItem = new BlogVo();
BeanUtil.copyProperties(item,voItem);
voList.add(voItem);
});
return R.ok().put("data", voList);
}
封装后,将 Entity 转化为 Vo
@GetMapping("/one/{id}")
public R oneDefine(@PathVariable(name = "id") Long id) {
BlogEntity blogEntity = blogService.queryBlogById(id);
BlogVo blogVo = ConvertUtil.entityToVo(blogEntity, BlogVo.class);
blogVo.setOtherProperty("前端展示额外字段");
return R.ok().put("data", blogVo);
}
封装后,将 List<Entity> 转换为List<Vo>
@GetMapping("/list1")
public R list1(@RequestBody Map<String, Object> params) {
QueryWrapper<BlogEntity> queryWrapper = new QueryWrapper<>();
List<BlogEntity> list = blogMapper.selectList(queryWrapper);
List<BlogVo> blogVos = ConvertUtil.entityToVoList(list, BlogVo.class);
return R.ok().put("data", blogVos);
}
package com.springblog.common.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class ConvertUtil {
public static final Logger logger = LoggerFactory.getLogger(ConvertUtil.class);
public static <T> T entityToVo(Object source, Class<T> target) {
if (source == null) {
return null;
}
T targetObject = null;
try {
targetObject = target.newInstance();
BeanUtils.copyProperties(source, targetObject);
} catch (Exception e) {
e.printStackTrace();
}
return targetObject;
}
public static <T> List<T> entityToVoList(Collection<?> sourceList, Class<T> target) {
if (sourceList == null) {
return null;
}
List<T> targetList = new ArrayList<>(sourceList.size());
try {
for (Object source : sourceList) {
T targetObject = target.newInstance();
BeanUtils.copyProperties(source, targetObject);
targetList.add(targetObject);
}
} catch (Exception e) {
logger.error("convert error ", e);
}
return targetList;
}
}
到此这篇关于Java详解entity转换到vo过程的文章就介绍到这了,更多相关Java entity转vo内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Java详解entity转换到vo过程
本文链接: https://lsjlt.com/news/152263.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0