掌握标准项目结构,为后续开发打下坚实基础
本文是用户管理系统实战系列的第三篇,专门针对Java新手讲解如何搭建标准的SpringBoot项目结构。我们将采用最小可行架构,确保结构清晰、易于理解和扩展。
🎯 本章学习目标
- ✅ 理解标准SpringBoot项目结构
- ✅ 掌握各层级的职责划分
- ✅ 学会文件组织的正确方式
- ✅ 为后续功能开发做好准备
🏗️ 项目结构规划
标准目录结构
user-management/
├── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── jackson/
│ │ └── usermanager/
│ │ ├── controller/ # 控制层
│ │ ├── service/ # 业务层
│ │ ├── mapper/ # 数据访问层
│ │ └── domain/ # 实体类
│ └── resources/
│ ├── mapper/ # MyBatis映射文件
│ ├── application.yml # 配置文件
│ └── static/ # 静态资源
└── pom.xml # Maven依赖配置
🔧 详细文件结构说明
1. 控制层(Controller)- 接收请求
位置 :src/main/java/com/jackson/usermanager/controller/
UserController.java
2. 业务层(Service)- 处理业务逻辑
位置 :src/main/java/com/jackson/usermanager/service/
UserService.java(接口)
UserServiceImpl.java(实现类)
3. 数据访问层(Mapper)- 数据库操作
位置 :src/main/java/com/jackson/usermanager/mapper/
UserMapper.java
4. 实体类(Domain)- 数据模型
位置 :src/main/java/com/jackson/usermanager/model/domain/
User.java
java
package com.jackson.usermanager.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.util.Date;
@Data
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Integer id;
// 用户昵称
private String nickName;
// 密码(加密存储)
private String pwd;
// 手机号(唯一)
private String phone;
// 角色:0-普通用户,1-管理员
private Integer role;
// 状态:0-正常,1-删除
private Integer status;
// 创建时间(自动填充)
@TableField(fill = FieldFill.INSERT)
private Date createTime;
// 更新时间(自动填充)
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
5. 配置文件目录
位置 :src/main/resources/
application.yml
yaml
#Spring相关
spring:
application:
name: user-manager
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/user-manager
username: root
password: 123456
#服务相关
server:
port: 8080
servlet:
context-path: /api
mapper/UserMapper.xml
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jackson.usermanager.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.jackson.usermanager.model.domain.User">
<id property="id" column="id" />
<result property="nick_name" column="nick_name" />
<result property="pwd" column="pwd" />
<result property="phone" column="phone" />
<result property="role" column="role" />
<result property="status" column="status" />
<result property="create_time" column="create_time" />
<result property="update_time" column="update_time" />
</resultMap>
<sql id="Base_Column_List">
id,nick_name,pwd,phone,role,status,
create_time,update_time
</sql>
</mapper>
🚀 实际操作步骤
第一步:创建包结构
在IDEA中按照以下顺序创建包:
- 右键src/main/java目录 → New → Package
- 逐级创建包 :
com.jackson.usermanager- 在该包下创建:
controller,service,service.impl,mapper,mode.domain
第二步:启动类添加扫描mapper
位置 :src/main/java/com/jackson/usermanager/
UserManagerApplication.java:
java
......
@SpringBootApplication
@MapperScan("com.jackson.usermanager.mapper")
public class UserManagerBackendApplication {
......
}
🌟 架构设计理念
分层架构的优势
用户请求 → Controller → Service → Mapper → 数据库
↑ ↑ ↑ ↑ ↑
│ │ │ │ │
视图交互 请求处理 业务逻辑 数据操作 数据存储
各层职责明确
| 层级 | 职责 | 关注点 |
|---|---|---|
| Controller | 接收请求,返回响应 | 参数校验、结果封装 |
| Service | 业务逻辑处理 | 事务管理、业务规则 |
| Mapper | 数据持久化操作 | SQL执行、结果映射 |
| Domain | 数据载体 | 数据结构、验证规则 |
🔍 新手常见问题解答
❓ 为什么要分这么多层?
答:分层让代码结构清晰,每层只关注自己的职责,便于维护和测试。
❓ Service接口和实现类都要创建吗?
答:是的,这是面向接口编程的体现,便于后续扩展和Mock测试。
❓ 包名为什么要用域名倒写?
答:这是Java包命名规范,确保全球唯一性,避免冲突。
❓ 实体类为什么放在domain包?
答:domain包通常存放领域模型,体现业务实体概念。
📝 代码规范建议
命名规范
- ✅ 类名使用大驼峰:UserController
- ✅ 方法名使用小驼峰:getUserById
- ✅ 包名全部小写:com.jackson.usermanager
注解使用规范
java
// Controller层注解
@RestController
@RequestMapping("/api/user")
// Service层注解
@Service
// Mapper层注解
@Mapper
// 依赖注入注解
@Autowired 或 @RequiredArgsConstructor
🎯 下一步学习预告
第四篇:用户登录功能
💫 本章总结
通过本章学习,我们完成了:
- ✅ 标准SpringBoot项目结构搭建
- ✅ 各层级代码文件的创建和组织
- ✅ 理解分层架构的设计理念
- ✅ 基础业务逻辑代码编写
💡 实践建议:按照文章步骤亲手搭建项目结构,理解每个文件的作用!
📌 下篇预告:我们将开始实现具体的业务功能,首先完善用户登录功能。准备好你的开发环境,我们下次见!
💬 互动话题:你在搭建项目结构时遇到过哪些问题?或者对哪个层级的职责不太清楚?欢迎在评论区交流讨论!