V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
felix9ia
V2EX  ›  问与答

[求助] Mybatis 自定义 Mapper 查询需要返回的字段 entityDO 并没有怎么办?

  •  
  •   felix9ia · 2 小时 39 分钟前 · 129 次点击

    方案 1:在 DO 中冗余字段 + @Transient

    在 DO 中增加额外字段,用于承载转换后的数据(如 URL 、格式化字段等),并通过 @Transient 标注为非持久化字段。

    缺点:

    • 是否会污染 DO ?
    • DO 本应只表达数据库结构,这样做会不会破坏领域边界?

    方案 2:Mapper 直接返回 VO

    mapper 层通过 select 直接返回 VO (或 CO )。

    缺点:

    • 拿到结果后不方便使用 MapStruct 做 assembler 转换:
      • 例如:OSS 的 key → URL 转换
      • GEO 坐标转换
      • bitmap 字段解析与转换

    方案 3:引入中间 DTO ( DO → DTO → VO )

    在 DO 和 VO 之间增加一层 DTO ,作为数据转换的中间载体。

    缺点:

    • 类层级增加,显得冗余
    • 维护成本高
    • DTO 的归属不清晰(是否应该放在 infra 层?)

    其他不太靠谱的方案

    • 使用 ResultMap + Map 进行处理
      • 可读性差
      • 可维护性差
      • 类型不安全
    3 条回复    2026-03-18 15:54:30 +08:00
    leeqingshui
        1
    leeqingshui  
       2 小时 32 分钟前
    追求完美没有意义
    要快就方案 1,时间多就方案 3
    哪种方案都会冗余,不过是多看会代码的事情
    felix9ia
        2
    felix9ia  
    OP
       1 小时 58 分钟前
    @leeqingshui 明白,我以为大家会有更好的方案....那如果是 JOIN 2 张表的结果,似乎就不能选方案 1 了,只能选方案 3 了吧?
    ymy3232
        3
    ymy3232  
       57 分钟前
    一直都是方案 3 ,以前手写都写过来了,现在有了 AI 更快。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5597 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:51 · PVG 16:51 · LAX 01:51 · JFK 04:51
    ♥ Do have faith in what you're doing.