跳到主要内容
版本:Next

项目结构

一个标准的 Spring Boot Maven 项目结构如下,理解每一层的职责是写好代码的前提。

标准目录结构​

demo/
├── pom.xml # Maven 依赖与构建配置
├── src/
│ ├── main/
│ │ ├── java/com/example/demo/
│ │ │ ├── DemoApplication.java # 启动类(必须在根包)
│ │ │ ├── controller/ # 控制层:接收请求、返回响应
│ │ │ ├── service/ # 业务层:核心业务逻辑
│ │ │ ├── mapper/ 或 repository/ # 数据访问层
│ │ │ ├── entity/ 或 model/ # 实体类 / 领域模型
│ │ │ ├── dto/ # 数据传输对象(请求/响应)
│ │ │ ├── config/ # 配置类(@Configuration)
│ │ │ ├── common/ # 通用类:统一返回、异常、常量
│ │ │ └── interceptor/ # 拦截器 / 过滤器
│ │ └── resources/
│ │ ├── application.yml # 主配置文件
│ │ ├── application-dev.yml # 开发环境配置
│ │ ├── application-prod.yml # 生产环境配置
│ │ ├── static/ # 静态资源(js/css/图片)
│ │ └── templates/ # 模板引擎页面(Thymeleaf 等)
│ └── test/java/... # 单元测试
└── target/ # 构建产物

分层职责​

层注解职责
Controller@RestController接收 HTTP 请求,参数校验,调用 Service,返回结果
Service@Service业务逻辑、事务控制(@Transactional)
Mapper/Repository@Mapper / @Repository数据库操作
Entity—与数据库表映射的实体
DTO—接口入参/出参对象,与 Entity 隔离
注意

Controller 只做「请求转发」,不要把业务逻辑写进 Controller;Entity 不要直接暴露给前端,应通过 DTO 转换。

调用链路​

HTTP 请求
→ Controller(参数接收与校验)
→ Service(业务逻辑、事务)
→ Mapper/Repository(SQL / 数据访问)
→ 数据库
← DTO 封装返回

包扫描规则​

@SpringBootApplication 默认扫描启动类所在包及其子包。因此:

  • 启动类必须放在根包(如 com.example.demo)。
  • 如果类放在扫描范围之外,需要显式指定:
@SpringBootApplication(scanBasePackages = {"com.example.demo", "com.other.module"})