有什么较为通用的办法解决两个实体类传递相同参数?

2022-08-03 16:33:07 +08:00
 Mrzhs

码不动了,真的

3720 次点击
所在节点    Java
40 条回复
ppxppx
2022-08-03 16:35:48 +08:00
BeanUtils.CopyProperties?
hidemyself
2022-08-03 16:36:41 +08:00
BeanUtils 吧。。或者 MapStruct
Mrzhs
2022-08-03 16:37:38 +08:00
@ppxppx 我去试试
Mrzhs
2022-08-03 16:38:11 +08:00
@hidemyself 感谢
dake0805
2022-08-03 16:50:43 +08:00
我是用 IDEA 插件 https://github.com/gejun123456/intellij-generateAllSetMethod 生成,然后自己微调
ligiggy
2022-08-03 16:54:12 +08:00
A 继承 B ?或者继承同一个接口?
Morii
2022-08-03 16:54:57 +08:00
MapStruct 写一个 BaseMapper 然后泛型实现
lazyfighter
2022-08-03 16:55:18 +08:00
MapStruct
issakchill
2022-08-03 17:07:35 +08:00
如果只是一次性使用 推荐 idea 插件 https://plugins.jetbrains.com/plugin/7171-generateo2o
a33291
2022-08-03 17:14:57 +08:00
按说 java 应该也有一些基于反射实现的 map 库,类似 automapper 或者 tinymapper 之类的,这种只要 2 个类字段一致(不一致时可通过配置修改,但是很多时候 dto 和 entity 字段是重叠的)只需要调用一个函数即可

楼上提到的 BeanUtils 也许就是干这事的?对 java 不太熟
jones2000
2022-08-03 17:16:40 +08:00
成员变量太多了, 拆类
wzcloud
2022-08-03 17:18:57 +08:00
没有代码质量管控的话,直接用 map 呗,反正是后来者维护。
Vaspike
2022-08-03 17:22:08 +08:00
嫌麻烦的话直接 jackson 序列化第一个对象后填充到第二个对象,楼上各位似乎没提供这种思路,当然可能性能堪忧

当然我平时是把相同属性放到公共父类,写一个反射的工具方法(网上应该能搜到类似的)
LLaMA2
2022-08-03 17:27:48 +08:00
#13 楼的算是一种套路了,然后这种在 TS 中根本不算啥,
WispZhan
2022-08-03 19:56:32 +08:00
@jones2000 +1

然后上 MapStruct
14104chk
2022-08-03 20:04:33 +08:00
可以抽出一个类 A ,里面含有所有的公共属性(多一两个也无所谓),然后组合到 in 和 orderDetl 里面。赋值的时候,直接 in.setA(orderDetl.getA())
xy90321
2022-08-03 20:28:11 +08:00
是有什么深意我没读懂吗?不是一个 Dozer BeanMapper 就解决的事情?
Leviathann
2022-08-03 20:37:36 +08:00
正则替换一下
ns09005264
2022-08-03 22:32:13 +08:00
我一般用这种方式,先用插件生成调用 setter 的代码段,配合 vim 的动作录制,快速且有静态检查
ns09005264
2022-08-03 22:35:44 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/870449

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX