![]() | 1 OrangeAdd 2022-10-16 12:27:01 +08:00 可以看下 mapstruct |
5 optional 2022-10-16 13:14:41 +08:00 mapstruct+1 |
![]() | 6 dreamlike 2022-10-16 14:28:52 +08:00 via Android 深拷贝 我就比较弱智 我先序列化 json 然后反序列化 浅拷贝 我靠 vo2dto 这个插件搞的 基本走编码时代码生成的路子 出问题好查 |
7 bthulu 2022-10-16 14:33:09 +08:00 IDE 自动生成 clone 方法啊, 你难道用反射? 那你还怎么用 GraalVM |
![]() | 8 zhiyu1998 OP @dreamlike 浅拷贝我也有这个插件,哈哈哈,但是有时候懒得写就直接 BeanUtils 了,可以查问题这个学到了! |
![]() | 10 Red998 2022-10-16 16:50:50 +08:00 ![]() Apache 这个性能有点低 。推荐插件吧 https://plugins.jetbrains.com/plugin/18264-beanmappingkey 深拷贝:new 一个全新对象 set 最稳 |
![]() | 11 shelken 2022-10-16 17:16:22 +08:00 via iPhone ![]() @redorblacck886 感谢,前两周写的时候就在找有没有自动 builder 相同字段名字转换的,要不然一个一个手打对应字段太难受了 |
![]() | 12 ConnorTomato 2022-10-16 17:23:53 +08:00 ![]() BeanMappingKey + 1 ,是一个 V2 小伙伴写的。自动 get set ,一目了然,绝不可能出错。 BeanUtils 有各种坑, 曾经遇到一个坑是 RPC 调用的时候,序列化报错。 |
![]() | 13 zhiyu1998 OP @redorblacck886 我超 这个 new bee |
14 silencil 2022-10-16 18:24:29 +08:00 via iPhone 也是用 mapstruct |
![]() | 15 Red998 2022-10-16 18:29:57 +08:00 @shelken 嗯 用工具类浅拷贝 虽然方便其实还是反射调用。虽然性能在调用次数其实差不多。但是 set 最快也最稳 哪里有问题一目了然。缺点代码多 |
![]() | 16 mikicomo 2022-10-16 18:38:22 +08:00 |
![]() | 17 wolfie 2022-10-16 18:42:02 +08:00 mapstruct 编译期处理,速度快、有问题反编译就能看到原因。 |
18 billly 2022-10-16 21:49:06 +08:00 直接用插件生成方法,简单高效 |
![]() | 22 xuanbg 2022-10-17 08:27:02 +08:00 有像我一样从来不用浅拷贝的么? 深拷贝我和#6 一样,简单粗暴序列化+反序列化。这样不但能深拷贝,还可以转换任意复杂类型呢。好用得一逼! |
![]() | 23 tedzhou1221 2022-10-17 09:13:43 +08:00 @mikicomo 你们使用 kryo 时,序列化的对象里有个添加字段,依赖这个对象的服务需要重启吗? |
24 yule111222 2022-10-17 10:03:12 +08:00 不用这些,一律手写,可以避免很多问题 如果 2 个对象结构一模一样,明显存在设计问题 |
25 aooooobaibai 2022-10-17 11:02:26 +08:00 idea plugin : GenerateAllSetter |
![]() | 26 zhiyu1998 OP @chg87599671 感谢推荐 虽然这个已经是很久以前的插件了 哈哈哈 |
![]() | 27 zhiyu1998 OP @yule111222 这个确实应该考虑下 |
![]() | 28 mikicomo 2022-10-17 11:10:15 +08:00 @tedzhou1221 #23 场景不一样,我们深拷贝的都是内部使用的中间变量,提供给外部的实体是另一套,并不会使用深拷贝 |
![]() | 29 RedBeanIce 2022-10-17 13:05:06 +08:00 自己写 getset ,通过插件配合。 |
![]() | 30 oldshensheep 2022-10-17 16:37:26 +08:00 MapStruct 用了就回不去了,转换对象只用写一个接口……代码自动生成。性能是最好的,和自己写 GetSet 是一样的。 |
![]() | 31 oldshensheep 2022-10-17 16:51:14 +08:00 ![]() spring 的那个速度也还可以,主要用它可以不用写代码……可以偷懒,但是它比 MapStruct 慢了一个数量级差不多,我现在都是使用的 MapStruct 。 MapStruct 拓展性也比较好,你可以自定义转换代码,可以在转换后完成一些操作等等。 如果你要定义一个 User 转换器 @Mapper public interface UserMapper { UserMapper INSTANCE = Mappers.getMapper(UserMapper.class); UserVo toUserVo(User user); } 然后 var userVO = UserMapper .INSTANCE .toUserVo(user) 就可以转换完成 各种 DTO 转换器速度的比较 https://zhuanlan.zhihu.com/p/420054993 |
![]() | 32 zhiyu1998 OP @oldshensheep 心动了 |