GoForum🌐 V2EX

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

felix9ia · 2026-03-18 14:17 · 0 次点赞 · 1 条回复

方案 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 进行处理
    • 可读性差
    • 可维护性差
    • 类型不安全
1 条回复
leeqingshui · 2026-03-18 14:22
#1

追求完美没有意义 要快就方案 1,时间多就方案 3 哪种方案都会冗余,不过是多看会代码的事情

添加回复
你还需要 登录 后发表回复

登录后可发帖和回复

登录 注册
主题信息
作者: felix9ia
发布: 2026-03-18
点赞: 0
回复: 0