当前位置: 首页 > news >正文

网站建设 展滔科技大厦线下推广100种方式

网站建设 展滔科技大厦,线下推广100种方式,金融品牌网站设计,成品短视频软件推荐下载免费po转vo工具类 1.反射调用2.JSON序列化方式3.注解驱动4.ModelMappe5.手动映射6.总结7.扩展方法 1.反射调用 这个方法会创建一个新的实例,并将所有公共字段复制到目标对象中,而不修改原来的实例。因此,如果目标类包含 private 或 final 字段&am…

po转vo工具类

  • 1.反射调用
  • 2.JSON序列化方式
  • 3.注解驱动
  • 4.ModelMappe
  • 5.手动映射
  • 6.总结
  • 7.扩展方法

1.反射调用

这个方法会创建一个新的实例,并将所有公共字段复制到目标对象中,而不修改原来的实例。因此,如果目标类包含 private 或 final 字段,则需要额外的手动处理。

1.工具类

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;public class PoVoConverter<T, V> {protected final Class<T> clazz;public PoVoConverter(Class<T> clazz) {this.clazz = clazz;}public T voToPo(V vo) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {T po = clazz.newInstance();Field[] declaredFields = clazz.getDeclaredFields();for (Field declaredField : declaredFields) {declaredField.setAccessible(true);Field voField = vo.getClass().getDeclaredField(declaredField.getName());voField.setAccessible(true);declaredField.set(po, voField.get(vo));}return po;}public V poToVo(T po) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {V vo = clazz.newInstance();Field[] declaredFields = clazz.getDeclaredFields();for (Field declaredField : declaredFields) {declaredField.setAccessible(true);Field poField = po.getClass().getDeclaredField(declaredField.getName());poField.setAccessible(true);declaredField.set(vo, poField.get(po));}return vo;}
}

2.使用方式

PoVoConverter<User, UserVo> converter = new PoVoConverter<>(User.class);
User user = converter.voToPo(userVo);
UserVo userVo = converter.poToVo(user);

3.总结
优势:简单易懂,不需要任何额外配置
劣势:性能较差,因为需要多次反射调用,而且有可能遇到安全限制

2.JSON序列化方式

  • 该方法使用 Jackson 库将 VO 对象转换为 JSON 字符串,并将字符串反序列化回 PO 类型,以此实现转换
  • 注意:此方法的优点是效率较高,但是可能需要管理 JSON 库的依赖关系

1.工具类

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.TypeFactory;public class PoVoConverter<T, V> {protected final Class<T> clazz;public PoVoConverter(Class<T> clazz) {this.clazz = clazz;}public T voToPo(V vo) throws IOException {ObjectMapper mapper = new ObjectMapper();return mapper.readValue(mapper.writeValueAsString(vo), TypeFactory.defaultInstance().constructType(clazz));}public V poToVo(T po) throws IOException {ObjectMapper mapper = new ObjectMapper();return mapper.readValue(mapper.writeValueAsString(po), TypeFactory.defaultInstance().constructType(clazz));}
}

2.使用方式

PoVoConverter<User, UserVo> converter = new PoVoConverter<>(User.class);
User user = converter.voToPo(userVo);
UserVo userVo = converter.poToVo(user);

3.总结
优势:高性能,适用于大数据量的情况
劣势:需要额外的 JSON 库支持,如果 JSON 字符串过大,则可能导致内存溢出

3.注解驱动

推荐使用 JSON 序列化方法,因为它具有较高的性能并且易于理解和维护。如果需要更高的安全性,可以考虑使用注解驱动方法

1.代码

@Service
@MapperScan("com.andy.mapper")
public interface UserMapper {@Mappings({@Mapping(source = "vo.id", target = "id"),@Mapping(source = "vo.name", target = "name"),@Mapping(source = "vo.age", target = "age")})User poToVo(UserVo vo);@Mappings({@Mapping(source = "id", target = "vo.id"),@Mapping(source = "name", target = "vo.name"),@Mapping(source = "age", target = "vo.age")})UserVo voToPo(User po);
}

2.总结
优势:简洁明了,易于维护。
劣势:需要使用第三方库,比如 MyBatis

4.ModelMappe

这里,模型映射器会自动检测用户类和 VO 类型上的 @Mapping 注解,并将 VO 类型映射到 PO 类型,反之亦然

1.导入坐标

<dependency><groupId>org.modelmapper</groupId><artifactId>modelmapper</artifactId><version>3.2.0</version>
</dependency>

2.使用方式

public class UserService {private ModelMapper modelMapper = new ModelMapper();public UserVo toVo(User po) {return modelMapper.map(po, UserVo.class);}public User toPo(UserVo vo) {return modelMapper.map(vo, User.class);}
}

3.总结
优势:无须手动编写映射代码,易于维护
劣势:可能导致依赖冲突

5.手动映射

这种方式就是我们常用的get()和set()

1.使用方式

public T voToPo(V vo) {T po = clazz.newInstance();po.setId(vo.getId());po.setName(vo.getName());po.setEmail(vo.getEmail());return po;
}public V poToVo(T po) {V vo = clazz.newInstance();vo.setId(po.getId());vo.setName(po.getName());vo.setEmail(po.getEmail());return vo;
}

3.总结
优势:有更多的控制权,适合特定场景
劣势:代码中有大量的get/set

6.总结

方法缺点优点
反射调用性能较低,可能受到安全限制简单易懂,适合小型项目
JSON 序列化需要额外的 JSON 库支持,可能产生大量垃圾信息高效,适合大型项目
注解驱动需要第三方库,复杂度较高易于维护,性能良好
ModelMapper可能导致冲突无须手动编写映射代码,易于维护
手动映射手动编写映射代码更多控制权

7.扩展方法

1.BeanUtils.copyProperties();

2.UserVo userVo = JSON.parseObject(JSON.toJSONString(user), UserVo.class);

http://www.15wanjia.com/news/54641.html

相关文章:

  • 响应适网站开发百度首页排名优化价格
  • 装修设计网站哪个好用今日财经新闻
  • 三河网站seo东莞seo排名外包
  • 套模板做网站 链接怎么做百度推广优化
  • 怎么找有赞做网站软文推广去哪个平台好
  • 制作企业网站首页效果图seo主要做哪些工作
  • 理性仁网站如何做估值分析长沙免费建站网络营销
  • 网站后台重置密码怎么做苏州手机关键词优化
  • 灰产源码资源网如何优化关键词搜索
  • 聊城做网站最好的网络公司内容营销
  • 洛阳做网站那家好seo网站关键词排名快速
  • wordpress编辑器文件南昌seo实用技巧
  • 张家界网站建设方案百度知道问答
  • 新疆网站备案百度人工客服电话多少
  • 网站上动态图片怎么做北京seo平台
  • 摄影作品欣赏网站西安做推广优化的公司
  • html可以做动态网站吗免费做网站怎么做网站
  • 上海做网站报价谷歌浏览器手机版官网下载
  • 网站关键词怎么做效果好cctv 13新闻频道
  • 宁波网站优化公司价格小网站搜什么关键词好
  • 做网站开发的营业执照技能培训网站
  • 电竞网站开发需求报告饥饿营销案例
  • 做淘宝客需要企业网站吗微信社群营销推广方案
  • 网上做兼职网站有哪些长沙seo代理
  • 广州中学生网站制作宁波seo关键词优化教程
  • 公司网站优化推广吸引人的微信软文
  • 合肥网站排名优化公司哪家好营销说白了就是干什么的
  • 老域名网站不收录搜索引擎竞价排名
  • 新网站建设的工作总结电商推广和网络推广的策略
  • dede网站白屏天津搜索引擎优化