以下是一个标准的 Spring Boot + MyBatis-Plus 项目目录结构及文件命名规范,包含每个目录和文件的作用说明,适用于中大型项目开发:
项目根目录结构
src/
├── main/
│ ├── java/ # Java 源代码
│ │ └── com/example/ # 项目包根目录(根据公司域名定义)
│ │ ├── common/ # 通用模块(全局常量、工具类等)
│ │ ├── config/ # 配置类(数据源、MyBatis-Plus 插件等)
│ │ ├── controller/ # 控制器层(REST API)
│ │ ├── entity/ # 实体类(对应数据库表)
│ │ ├── mapper/ # Mapper 接口(继承 BaseMapper)
│ │ ├── service/ # 服务层接口
│ │ ├── service/impl/# 服务层实现类
│ │ ├── dto/ # 数据传输对象(Data Transfer Object)
│ │ ├── vo/ # 视图对象(View Object)
│ │ ├── enums/ # 枚举类
│ │ ├── filter/ # 过滤器(如登录拦截器)
│ │ ├── aspect/ # AOP 切面(日志、事务等)
│ │ └── exception/ # 自定义异常类及全局异常处理
│ │
│ └── resources/ # 资源文件
│ ├── static/ # 静态资源(HTML/CSS/JS)
│ ├── templates/ # 模板文件(如 Thymeleaf)
│ ├── mapper/ # XML 映射文件(可选)
│ ├── application.yml # 主配置文件
│ └── logback-spring.xml # 日志配置
│
└── test/ # 测试代码
└── java/
└── com/example/
├── mapper/ # Mapper 测试
└── service/ # Service 测试
关键目录及文件详解
1. src/main/java/com/example
目录名 | 作用 | 文件命名规范 |
---|---|---|
config |
存放 Spring Boot 配置类 | XxxConfig.java (如 MyBatisPlusConfig.java ) |
controller |
处理 HTTP 请求,调用 Service 层 | XxxController.java (如 UserController.java ) |
entity |
数据库表对应的实体类,使用 MyBatis-Plus 注解(如 @TableName ) |
Xxx.java (如 User.java ) |
mapper |
MyBatis-Plus 的 Mapper 接口,继承 BaseMapper<T> |
XxxMapper.java (如 UserMapper.java ) |
service |
服务层接口(定义业务逻辑) | XxxService.java (如 UserService.java ) |
service/impl |
服务层实现类 | XxxServiceImpl.java (如 UserServiceImpl.java ) |
dto |
数据传输对象(用于接口参数或返回结果) | XxxDTO.java (如 UserDTO.java ) |
vo |
视图对象(用于前端展示的定制化数据) | XxxVO.java (如 UserVO.java ) |
enums |
枚举类(状态码、类型等) | XxxEnum.java (如 ResultCodeEnum.java ) |
exception |
自定义异常类及全局异常处理器 | XxxException.java (如 BusinessException.java ) |
2. src/main/resources
目录/文件名 | 作用 | 文件命名规范 |
---|---|---|
application.yml |
主配置文件(数据源、MyBatis-Plus 配置等) | 无 |
mapper/*.xml |
MyBatis XML 映射文件(非必须,复杂 SQL 时使用) | XxxMapper.xml (如 UserMapper.xml ) |
static/ |
静态资源(HTML/CSS/JS/图片) | 无 |
templates/ |
模板文件(如 Thymeleaf、Freemarker) | 无 |
logback-spring.xml |
日志配置文件 | 无 |
配置文件示例
application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
configuration:
map-underscore-to-camel-case: true # 开启驼峰命名映射
global-config:
db-config:
id-type: auto # 主键自增
mapper-locations: classpath:mapper/*.xml # XML 映射文件路径(可选)
代码示例
实体类 User.java
@Data
@TableName("user") // 对应数据库表名
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
@TableField(fill = FieldFill.INSERT) // 自动填充创建时间
private LocalDateTime createTime;
}
Mapper 接口 UserMapper.java
public interface UserMapper extends BaseMapper<User> {
// 自定义方法(可选)
@Select("SELECT * FROM user WHERE age > #{age}")
List<User> selectByAgeGreaterThan(Integer age);
}
Service 实现类 UserServiceImpl.java
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Override
public List<User> getUsersByAge(Integer age) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", age);
return baseMapper.selectList(wrapper);
}
}
命名规范总结
- 包名:全小写,层级清晰(如
com.example.project.module
)。 - 类名:大驼峰(如
UserController
)。 - 接口与实现类:
- 接口:
XxxService.java
- 实现类:
XxxServiceImpl.java
- 接口:
- Mapper 接口:
XxxMapper.java
- 实体类:
Xxx.java
- DTO/VO:
XxxDTO.java
、XxxVO.java
- 测试类:
XxxTest.java
(如UserServiceTest.java
)
注意事项
- 避免过度使用 XML:MyBatis-Plus 的
BaseMapper
和QueryWrapper
已覆盖 90% 的 SQL 场景。 - 统一异常处理:在
exception
包下定义全局异常处理器GlobalExceptionHandler.java
。 - 分页插件配置:在
config
包下添加MyBatisPlusConfig.java
配置分页插件。
通过以上结构,项目将具备良好的可维护性和扩展性。