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

news2025/3/14 7:57:53

以下是一个标准的 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 注解(如 @TableNameXxx.java(如 User.java
mapperMyBatis-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/*.xmlMyBatis 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);
    }
}

命名规范总结

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

注意事项

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL增删改查操作 -- CRUD

个人主页&#xff1a;顾漂亮 目录 1.CRUD简介 2.Create新增 使用示例&#xff1a; 注意点&#xff1a; 3.Retrieve检索 使用示例&#xff1a; 注意点&#xff1a; 4.where条件查询 前置知识&#xff1a;-- 运算符 比较运算符 使用示例&#xff1a; 注意点&#xf…

【算法day9】回文数-给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如&#xff0c;121 是回文&#…

蛋白质功能预测论文阅读记录2025(DPFunc、ProtCLIP)

前言 最近研究到瓶颈了&#xff0c;怎么优化都提升不了&#xff0c;遂开始看点最新的论文。 DPFunc 2025.1.2 Nature Communication 中南大学 论文地址&#xff1a;DPFunc: accurately predicting protein function via deep learning with domain-guided structure inform…

主流向量数据库对比

在 AI 的 RAG&#xff08;检索增强生成&#xff09;研发领域&#xff0c;向量数据库是存储和查询向量嵌入的核心工具&#xff0c;用于支持高效的语义搜索和信息检索。向量嵌入是文本或其他非结构化数据的数值表示&#xff0c;RAG 系统通过这些嵌入从知识库中检索相关信息&#…

54.HarmonyOS NEXT 登录模块开发教程(八):测试与调试技巧

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT 登录模块开发教程&#xff08;八&#xff09;&#xff1a;测试与调试技巧 文章目录 HarmonyOS NEXT 登录模块开发教程&#xff08;…

在Simulink中将Excel数据导入可变负载模块的方法介绍

文章目录 数据准备与格式要求Excel数据格式MATLAB预处理数据导入方法使用From Spreadsheet模块(直接导入Excel)通过MATLAB工作区中转(From Workspace模块)使用1-D Lookup Table模块(非线性负载映射)Signal Builder模块(变载工况导入)可变负载模块配置注意事项与调试在S…

动手学强化学习-记录

3.5 蒙特卡洛方法 统计每一个状态s出现的总次数和总回报&#xff0c;用大数定律&#xff0c;总回报/总次数≈状态s的期望回报 第4章 动态规划算法 策略迭代中的策略评估使用贝尔曼期望方程来得到一个策略的状态价值函数,这是一个动 态规划的过程;而价值迭代直接使用贝尔曼最…

阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台

阿里云操作系统控制台评测&#xff1a;国产AI运维 一站式运维管理平台 引言 随着云计算技术的飞速发展&#xff0c;企业在云端的运维管理面临更高的要求。阿里云操作系统控制台作为一款集运维管理、智能助手和系统诊断等多功能于一体的工具&#xff0c;正逐步成为企业高效管理…

C++中的const与类型转换艺术

目录 强制转换 static_cast const_cast reinterpret_cast dynamic_cast const关键字 修饰内置类型* 修饰指针类型* 类比 数组指针 指针数组 函数指针 指针函数 强制转换 C语言中的强制转换在C代码中依然可以使用&#xff0c;这种C风格的转换格式非常简单 TYPE a …

特辣的海藻!10

基础知识点 1.清除换行符 scan.nextInt()要加scan.nextLine()清楚换行符。 2.Map.Entry<K, V> Map.Entry是Map接口的嵌套接口&#xff0c;表示一个键值对&#xff08;Key-Value&#xff09; 常用方法&#xff1a; entry.getKey()&#xff1a;获取键 …

sqli-lab靶场学习(八)——Less26-28

前言 25关已经出现了初步的一些关键字过滤&#xff0c;通过双写可以绕过。后面的关卡&#xff0c;我们会遇到更多关键字过滤&#xff0c;需要各种技巧绕过。 Less26 第26关写了会过滤空格和注释符。有很多的答案&#xff0c;会用%a0替代空格&#xff0c;但据说这是sqli-labs部…

双指针算法专题之——复写零

文章目录 题目介绍思路分析异地复写优化为就地复写 AC代码 题目介绍 链接: 1089. 复写零 思路分析 那么这道题我们依然可以使用双指针算法来解决 异地复写 先不考虑题目的要求&#xff0c;直接就地在原数组上修改&#xff0c;可能不太好想&#xff0c;我们这里可以先在一个…

python-leetcode-子数组最大平均数 I

643. 子数组最大平均数 I - 力扣&#xff08;LeetCode&#xff09; 可以使用滑动窗口&#xff08;Sliding Window&#xff09;的方法来解决这个问题。具体步骤如下&#xff1a; 先计算数组 nums 中前 k 个元素的和 sum_k&#xff0c;作为初始窗口的和。然后滑动窗口&#xff0…

【度的数量——数位DP】

题目 分析 数位DP可以解决“区间内满足某种性质的数的个数”的问题 通常按照数位分支&#xff0c;形成一颗数位树 最左分支的值由上界值决定&#xff0c;右分支可以直接计算权重 有可能最左分支会有一个权重 代码 #include <bits/stdc.h> using namespace std;cons…

搭建阿里云专有网络VPC

目录 一、概述 二、专有网络vpc 2.1 vpc基本信息 2.2 vpc资源管理 2.3 vpc网段管理 三、交换机 四、NAT网关 4.1 绑定弹性公网IP 4.2 NAT网关信息 4.3 绑定的弹性公网IP 4.4 DNAT 4.5 SNAT 五、弹性公网IP 六、访问控制ACL&#xff08;绑定交换机&#xff09; 6…

windows系统,pycharm运行.sh文件

博主亲身试验过&#xff0c;流程简单&#xff0c;可用。 需要pycharm &#xff0c;git。 注意需要Git Bash.exe &#xff0c;也就是Git Bash的应用程序&#xff0c;而不是快捷方式。 需要把这个应用程序的路径复制一下。可以通过右键&#xff0c;复制文件地址的方式。 接着在…

论文调研 | 一些开源的AI代码生成模型调研及总结【更新于250313】

本文主要介绍主流代码生成模型&#xff0c;总结了基于代码生成的大语言模型&#xff0c;按照时间顺序排列。 在了解代码大语言模型之前&#xff0c;需要了解代码相关子任务 代码生成 文本生成代码(Text to code):根据自然语言描述生成代码 重构代码&#xff08;Refactoring …

Unity Timeline 扩展

这里认为大家已经会timeline的基本使用了&#xff0c;只介绍怎么自定义扩展。 第一步.自定义Track 首先要自定义一条轨道。剪辑是要在轨道里跑的&#xff0c;系统自带的轨道我们加不了自定义剪辑&#xff0c;得新建自己用的。这个很简单。 [TrackClipType(typeof(TransformTw…

qt介绍信号槽一

信号和槽时qt框架中事件处理的一种机制&#xff0c;qt是基于窗口框架的程序&#xff0c;基于窗口框架额程序都是基于事件的&#xff0c;本质信号对应的就是一个事件&#xff0c;槽对应事件处理的动作。信号槽机制类似于设计模式力的观察者模式。观察者模式就是我一直观察是否有…

【linux】解决 Linux 系统中 root 用户无法打开图形界面问题

【linux】解决 Linux 系统中 root 用户无法打开图形界面问题 问题描述&#xff1a; 在 Linux 系统中&#xff0c;当我们远程SSH尝试以 root 用户身份运行需要图形界面的应用程序时&#xff0c;可能会遇到以下错误信息&#xff1a; MoTTY X11 proxy: Unsupported authorisati…