架构

模块与包结构

模块名 = 表前缀;命名规范一览;参照实现在哪。

包结构

cn.minimao
├── app/<module>/{controller,service,dto,vo,convert}
├── domain
│   ├── handler/<module> + handler/<module>/cmd
│   ├── enums / enums/base
│   └── exception
├── infra/<module>/{model,mapper,repository,query}
├── data          # BaseRepository + 查询条件框架
├── plugin        # 扩展点(插件链)
├── common        # 上下文、线程、工具、异常
└── config        # 响应壳、MyBatis、Sa-Token、JSON 装配

命名规范

层后缀基类 / 契约位置
infraXxxDO必须 extends BaseDOinfra/<module>/model
infraXxxMapperBaseMapper<XxxDO> + @Mapperinfra/<module>/mapper
infraXxxRepositoryextends BaseRepository<XxxMapper, XxxDO>infra/<module>/repository
infraXxxPageQuery自定义 SQL 的分页载体,extends PageCarrierQueryinfra/<module>/query
domainXxxHandlerextends MiniMaoAbstractHandlerdomain/handler/<module>
domainXxxCmd纯 @Datadomain/handler/<module>/cmd
appXxxService@Serviceapp/<module>/service
appXxxDTO / XxxVO入参 / 出参app/<module>/{dto,vo}
appXxxConvert@Mapper(componentModel = "spring")app/<module>/convert
  • DO / VO / DTO / Cmd 统一 @Data;继承基类的要加 @EqualsAndHashCode(callSuper = true)。
  • @TableName("表名") 必填,模块名即表前缀。
  • infra/<module>/model 只放表映射实体,查询载体放 query——混在一起会让读者必须逐个看注解才能分辨。

参照实现

想知道"标准答案长什么样",直接看这三个包:app/users/**、domain/handler/users/**、infra/users/**。

提示:新增模块不要手抄目录,用骨架生成器:省下的时间用来写业务。

最后更新 2026-10-09编辑此页 →