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 4
Apache 这个性能有点低 。推荐插件吧 https://plugins.jetbrains.com/plugin/18264-beanmappingkey
深拷贝:new 一个全新对象 set 最稳 |
11
shelken 2022-10-16 17:16:22 +08:00 via iPhone 1
@redorblacck886 感谢,前两周写的时候就在找有没有自动 builder 相同字段名字转换的,要不然一个一个手打对应字段太难受了
|
12
ConnorTomato 2022-10-16 17:23:53 +08:00 1
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
chg87599671 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 2
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 心动了
|