Mrzhs
V2EX  ›  Java

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

  •  
  •   Mrzhs · Aug 3, 2022 · 5613 views
    This topic created in 1553 days ago, the information mentioned may be changed or developed.

    码不动了,真的

    Picture

    40 replies  •  2022-08-05 11:27:39 +08:00
    ppxppx
    ppxppx
    Aug 3, 2022 via Android
    1
    BeanUtils.CopyProperties?
    hidemyself
    hidemyself
    Aug 3, 2022
    2
    BeanUtils 吧。。或者 MapStruct
    Mrzhs
    Mrzhs
    OP
    Aug 3, 2022
    3
    @ppxppx 我去试试
    Mrzhs
    Mrzhs
    OP
    Aug 3, 2022
    4
    @hidemyself 感谢
    dake0805
    dake0805
    Aug 3, 2022
    5
    我是用 IDEA 插件 https://github.com/gejun123456/intellij-generateAllSetMethod 生成,然后自己微调
    ligiggy
    ligiggy
    Aug 3, 2022
    6
    A 继承 B ?或者继承同一个接口?
    28Sv0ngQfIE7Yloe
    28Sv0ngQfIE7Yloe
    Aug 3, 2022
    7
    MapStruct 写一个 BaseMapper 然后泛型实现
    lazyfighter
    lazyfighter
    Aug 3, 2022
    8
    MapStruct
    issakchill
    issakchill
    Aug 3, 2022❤️1
    9
    如果只是一次性使用 推荐 idea 插件 https://plugins.jetbrains.com/plugin/7171-generateo2o
    a33291
    a33291
    Aug 3, 2022
    10
    按说 java 应该也有一些基于反射实现的 map 库,类似 automapper 或者 tinymapper 之类的,这种只要 2 个类字段一致(不一致时可通过配置修改,但是很多时候 dto 和 entity 字段是重叠的)只需要调用一个函数即可

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

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

    然后上 MapStruct
    14104chk
    14104chk
    Aug 3, 2022
    16
    可以抽出一个类 A ,里面含有所有的公共属性(多一两个也无所谓),然后组合到 in 和 orderDetl 里面。赋值的时候,直接 in.setA(orderDetl.getA())
    xy90321
    xy90321
    Aug 3, 2022 via iPhone
    17
    是有什么深意我没读懂吗?不是一个 Dozer BeanMapper 就解决的事情?
    Leviathann
    Leviathann
    Aug 3, 2022
    18
    正则替换一下
    Fatinora
    Fatinora
    Aug 3, 2022
    19
    我一般用这种方式,先用插件生成调用 setter 的代码段,配合 vim 的动作录制,快速且有静态检查
    version0
    version0
    Aug 3, 2022
    21
    嘿,我以前写过这种代码,当时迷信反射效率低,就手写过这种代码。🤣
    Sezxy
    Sezxy
    Aug 3, 2022 via Android
    22
    我一般都是 beanutils.copyproperties
    Saxton
    Saxton
    Aug 3, 2022 via iPhone
    23
    果断推荐 mapStruct 强推啊 延长寿命的东西
    Saxton
    Saxton
    Aug 3, 2022 via iPhone
    24
    @Vaspike 强推 mapStruct 。。。 非反射 编译自动 生成方法,配合 idea 插件自动补充注解,舒服到上天
    Saxton
    Saxton
    Aug 3, 2022 via iPhone
    25
    mapStruct 也有编译检查,字段写错类型不对会提示
    silentsky
    silentsky
    Aug 4, 2022 via Android
    26
    如果你用 beanutil ,等有一天改属性的时候你就知道难受,至少这种方式会给你编译报错
    dqzcwxb
    dqzcwxb
    Aug 4, 2022
    27
    @version0 #21 虽然但是,反射确实不如手写 set 效率高
    106npo
    106npo
    Aug 4, 2022 via Android
    28
    Json encode&decode
    bthulu
    bthulu
    Aug 4, 2022
    29
    字段都一样, 你为什么要用两个实体类呢, 吃饱了撑的吗?
    guanhui07
    guanhui07
    Aug 4, 2022
    30
    mapStruct
    hahaFck
    hahaFck
    Aug 4, 2022
    31
    java 就是实体分的太多了,大量重复的属性。
    koloonps
    koloonps
    Aug 4, 2022
    32
    @bthulu 数据库查出来的对象比返回的参数要多
    lyxeno
    lyxeno
    Aug 4, 2022
    33
    用 BeanUtils 后续重构好像不太方便,我这种代码现在都是用 Github Copilot 帮忙自动生成的

    然后自己写的时候注意一点,没必要的实体类就不另外新增了,减少这种重复代码
    luomao
    luomao
    Aug 4, 2022
    34
    orika
    north521
    north521
    Aug 4, 2022
    35
    @Saxton 补全插件能发一下吗?
    blackshow
    blackshow
    Aug 4, 2022
    36
    MapStruct
    tramm
    tramm
    Aug 4, 2022
    37
    mapstruct
    Spring 的 beanutil
    Hutool 的 beanutil...
    bthulu
    bthulu
    Aug 4, 2022
    38
    @koloonps 这还不简单, spring 天生支持返回时过滤字段
    ruanimal
    ruanimal
    Aug 5, 2022
    39
    @jones2000 没见过几万字段的系统吗
    jones2000
    jones2000
    Aug 5, 2022
    40
    @ruanimal 没看出来你这个是什么系统, 不就是一个业务模块嘛。大家都是垒代码的。离做系统还远着呢。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5584 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 02:31 · PVG 10:31 · LAX 18:31 · JFK 21:31
    ♥ Do have faith in what you're doing.