现在 dto 包里混着入参和出参、entity 既当持久化对象又直接往上层传,职责不清;审计字段(创建人/时间、修改人/时间、逻辑删除)也只能各处手写,容易漏。而且 MyBatis 的手写 XML 样板多,逻辑删除和审计无法统一。借这次重构把模型按 dto/vo/bo/po 分层,并让持久层统一走 MyBatis-Plus。
做法上,不一口气全部进行迁移,每次只处理一个PO对象以及它的引用链,旧 dto/entity 标为废弃、按引用链逐个迁移、确认 0 引用后再删除。
以 SysUser 链为试点:SysUserPo 作为 MP 实体并继承 BasePo,Service 内部用 SysUserBo,Controller 入参用 Dto、出参用 Vo(BaseVo 实现,由 BaseVoResponseAdvice 统一包装),对象转换放进 mapstruct 的 Converter。
审计字段靠 BasePo 定义的字段自动传递到其他PO类上,以及 MetaObjectHandler 自动填充,逻辑删除靠 MP 提供的 TableLogic 注解自动过滤与转换;
Mapper 则改为继承项目级 AuditableMapper (继承自MP的BaseMapper,约束实体为 BasePo 并补齐批量更新/删除的审计功能)。手写 XML 逐步收敛,仅复杂连表查询保留,并在其中显式写 is_deleted = 0。
参考 PR #156 的实现。
现在 dto 包里混着入参和出参、entity 既当持久化对象又直接往上层传,职责不清;审计字段(创建人/时间、修改人/时间、逻辑删除)也只能各处手写,容易漏。而且 MyBatis 的手写 XML 样板多,逻辑删除和审计无法统一。借这次重构把模型按
dto/vo/bo/po分层,并让持久层统一走 MyBatis-Plus。做法上,不一口气全部进行迁移,每次只处理一个PO对象以及它的引用链,旧 dto/entity 标为废弃、按引用链逐个迁移、确认 0 引用后再删除。
以
SysUser链为试点:SysUserPo作为 MP 实体并继承BasePo,Service 内部用SysUserBo,Controller 入参用 Dto、出参用 Vo(BaseVo实现,由BaseVoResponseAdvice统一包装),对象转换放进 mapstruct 的 Converter。审计字段靠 BasePo 定义的字段自动传递到其他PO类上,以及
MetaObjectHandler自动填充,逻辑删除靠 MP 提供的TableLogic注解自动过滤与转换;Mapper 则改为继承项目级
AuditableMapper(继承自MP的BaseMapper,约束实体为BasePo并补齐批量更新/删除的审计功能)。手写 XML 逐步收敛,仅复杂连表查询保留,并在其中显式写is_deleted = 0。参考 PR #156 的实现。