Spring Boot + MyBatis-Plus 项目目录结构

以下是一个标准的 Spring Boot + MyBatis-Plus 项目目录结构及文件命名规范,包含每个目录和文件的作用说明,适用于中大型项目开发:


项目根目录结构

lua 复制代码
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
yaml 复制代码
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
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
java 复制代码
public interface UserMapper extends BaseMapper<User> {
    // 自定义方法(可选)
    @Select("SELECT * FROM user WHERE age > #{age}")
    List<User> selectByAgeGreaterThan(Integer age);
}
Service 实现类 UserServiceImpl.java
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);
    }
}

命名规范总结

  1. 包名 :全小写,层级清晰(如 com.example.project.module)。
  2. 类名 :大驼峰(如 UserController)。
  3. 接口与实现类 :
    • 接口:XxxService.java
    • 实现类:XxxServiceImpl.java
  4. Mapper 接口 :XxxMapper.java
  5. 实体类 :Xxx.java
  6. DTO/VO :XxxDTO.java、XxxVO.java
  7. 测试类 :XxxTest.java(如 UserServiceTest.java)

注意事项

  1. 避免过度使用 XML :MyBatis-Plus 的 BaseMapper 和 QueryWrapper 已覆盖 90% 的 SQL 场景。
  2. 统一异常处理 :在 exception 包下定义全局异常处理器 GlobalExceptionHandler.java。
  3. 分页插件配置 :在 config 包下添加 MyBatisPlusConfig.java 配置分页插件。

通过以上结构,项目将具备良好的可维护性和扩展性。

相关推荐
.Hypocritical.33 分钟前
SpringBoot+Vue 前后端分离项目部署到云服务器
服务器·vue.js·spring boot
云和数据.ChenGuang1 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整指南
java·人工智能·spring boot·后端·重构·springai
豆角焖肉2 小时前
SpringBoot 集成腾讯 AI 人脸识别
人工智能·spring boot·后端·人脸识别·腾讯 ai·base64 图片
十年Java程序媛2 小时前
Java String、StringBuilder、StringBuffer 底层原理|字符串拼接性能与线程安全
java·开发语言·spring boot·安全·面试
她的男孩3 小时前
升级 Spring Boot 4 后流程起不来、登录却报缺租户:Forge Admin 补上 applicationTaskExecutor 与旧 Sa-Tok
spring boot·安全·工作流引擎
AIGC小尼3 小时前
本地 AI 漫剧流水线模型缓存与特征向量持久化:IPAdapter 预编码、特征池复用与内存池管理实战
人工智能·spring boot·缓存·预编码算法·comfyui·ai漫剧
IT研究室4 小时前
最新计算机毕业设计选题推荐-基于spring boot的幼儿园管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
威哥爱编程4 小时前
【AI全栈12-10】Spring Boot 用多模态做商品图审核 / 发票识别
java·spring boot·后端
威哥爱编程4 小时前
【AI全栈12-09】Spring Boot 用流式输出做打字机对话:点下去不再干等
java·spring boot·后端
梁云亮4 小时前
在 IDEA 中运行 Tomcat 时,直接在 server.xml 中配置的 <Context> 无效
tomcat·intellij-idea·虚拟路径