Maven项目的架构(Spring Boot 实战版)
标准、可直接复用的 Maven 项目架构基于 Spring Boot贴合企业开发规范包含完整的目录结构、核心配置文件和分层代码示例简要Maven项目架构项目名字 src写所有代码的位置 main核心代码要交付给公司给客户的代码 java写java代码的文件夹。理论上可以写配置文件。不推荐写配置文件 包类接口等 resources写项目需要的配置文件的文件夹。直接创建maven项目自带不需要单独创建 test开发者用于测试main中编写代码是否正确的测试位置 java写java测试代码 resourses测试代码需要的配置文件不需要可以不写 pom.xml和src文件夹平行的是maven项目的配置文件。用于导入jar文件完整项目目录结构Maven 标准my-maven-project/ # 项目根目录artifactId ├── pom.xml # Maven 核心配置文件依赖、打包方式等 ├── src/ │ ├── main/ │ │ ├── java/ # 核心业务代码所有分层代码 │ │ │ └── com/ │ │ │ └── example/ │ │ │ ├── MyMavenApplication.java # 项目启动类 │ │ │ ├── controller/ # 控制层接收请求 │ │ │ │ └── UserController.java │ │ │ ├── service/ # 服务层业务逻辑 │ │ │ │ ├── UserService.java │ │ │ │ └── impl/ # 服务层实现类 │ │ │ │ └── UserServiceImpl.java │ │ │ ├── mapper/ # 持久层数据库映射MyBatis │ │ │ │ └── UserMapper.java │ │ │ ├── entity/ # 实体类数据库表映射 │ │ │ │ └── User.java │ │ │ └── config/ # 配置类MyBatis、数据库等 │ │ │ └── MyBatisConfig.java │ │ └── resources/ # 配置文件目录 │ │ ├── application.yml # Spring Boot 核心配置 │ │ ├── mybatis/ # MyBatis 映射文件 │ │ │ └── UserMapper.xml │ │ └── static/ # 静态资源前端页面、JS/CSS │ └── test/ # 测试代码目录Maven 测试专用 │ └── java/ │ └── com/ │ └── example/ │ └── UserServiceTest.java └── target/ # Maven 构建输出目录编译后的class、打包的jar/war核心配置文件pom.xml这是 Maven 项目的 “灵魂”定义了项目依赖、打包方式、JDK 版本等直接复制即可使用?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd !-- 1. 基础配置 -- modelVersion4.0.0/modelVersion !-- 集团ID一般是公司/组织域名反写 -- groupIdcom.example/groupId !-- 项目ID项目名称 -- artifactIdmy-maven-project/artifactId !-- 项目版本 -- version1.0.0/version !-- 打包方式Spring Boot 推荐 jar -- packagingjar/packaging namemy-maven-project/name descriptionMaven 架构示例项目/description !-- 2. 父工程Spring Boot 起步依赖 -- parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.2.3/version relativePath/ !-- 从Maven仓库找不本地找 -- /parent !-- 3. 核心依赖Maven自动下载 -- dependencies !-- Spring Boot Web包含Spring MVC、Tomcat等 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- MyBatis MySQL 驱动持久层 -- dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version3.0.3/version /dependency dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId scoperuntime/scope /dependency !-- 测试依赖仅测试环境生效 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies !-- 4. 构建配置编译、打包 -- build !-- 最终打包的jar名称 -- finalNamemy-maven-app/finalName plugins !-- Spring Boot 打包插件可执行jar -- plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId /plugin !-- JDK 编译版本指定17 -- plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.11.0/version configuration source17/source target17/target encodingUTF-8/encoding /configuration /plugin /plugins /build /project核心代码示例分层实现1. 实体类entity/User.javapackage com.example.entity; // 数据库user表对应的实体类 public class User { private Long id; private String username; private String password; private Integer age; // 省略getter/setter/toString实际开发用Lombok注解简化 public Long getId() { return id; } public void setId(Long id) { this.id id; } public String getUsername() { return username; } public void setUsername(String username) { this.username username; } public String getPassword() { return password; } public void setPassword(String password) { this.password password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age age; } Override public String toString() { return User{ id id , username username \ , age age }; } }2. 持久层mapper/UserMapper.javapackage com.example.mapper; import com.example.entity.User; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; Repository public interface UserMapper { // 根据ID查询用户MyBatis注解方式也可写XML Select(SELECT id, username, password, age FROM user WHERE id #{id}) User selectUserById(Long id); }3. 服务层service/UserService.java impl/UserServiceImpl.java// 接口 package com.example.service; import com.example.entity.User; public interface UserService { User getUserById(Long id); } // 实现类 package com.example.service.impl; import com.example.entity.User; import com.example.mapper.UserMapper; import com.example.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; Service public class UserServiceImpl implements UserService { Autowired private UserMapper userMapper; Override public User getUserById(Long id) { // 业务逻辑调用持久层查询 return userMapper.selectUserById(id); } }4. 控制层controller/UserController.javapackage com.example.controller; import com.example.entity.User; import com.example.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; RestController public class UserController { Autowired private UserService userService; // 接口地址http://localhost:8080/user/1 GetMapping(/user/{id}) public User getUser(PathVariable Long id) { // 接收前端请求调用服务层 return userService.getUserById(id); } }5. 启动类MyMavenApplication.javapackage com.example; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; // 扫描Mapper接口包 MapperScan(com.example.mapper) // Spring Boot 核心注解扫描当前包及子包 SpringBootApplication public class MyMavenApplication { public static void main(String[] args) { // 启动Spring Boot项目 SpringApplication.run(MyMavenApplication.class, args); } }6. 配置文件resources/application.yml# 服务器端口 server: port: 8080 # 数据库配置 spring: datasource: url: jdbc:mysql://localhost:3306/test_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/Shanghai username: root # 你的MySQL用户名 password: 123456 # 你的MySQL密码 driver-class-name: com.mysql.cj.jdbc.Driver # MyBatis配置 mybatis: configuration: map-underscore-to-camel-case: true # 下划线转驼峰如user_name → userName mapper-locations: classpath:mybatis/*.xml # 映射文件路径Maven 核心命令实战常用在项目根目录pom.xml 所在目录执行以下命令# 1. 清理编译产物删除target目录 mvn clean # 2. 编译代码生成target/classes目录 mvn compile # 3. 运行测试用例 mvn test # 4. 打包生成target/my-maven-app.jar mvn package # 5. 打包并跳过测试开发常用 mvn package -DskipTests # 6. 运行打包后的Spring Boot项目 java -jar target/my-maven-app.jar总结Maven 架构核心以pom.xml为配置中心遵循 “src/main/java业务代码 src/main/resources配置 src/test/java测试” 的标准目录结构分层与 Maven 的关系业务分层Controller/Service/Mapper的代码都放在src/main/java下Maven 负责通过pom.xml管理各层依赖如 Spring MVC、MyBatis实战关键通过mvn clean package完成打包java -jar运行项目这是 Maven 管理 Spring Boot 项目的核心流程

相关新闻

【C++笔记】STL知识铺垫

【C++笔记】STL知识铺垫

前言: 在前面的学习中,我们已经掌握了C的基础语法和编程概念,本文将深入探讨C标准库的使用,并详细介绍迭代器、auto关键字以及范围for循环等相关知识。一、STL简介1.1 什么是STLSTL(Standard Template Library&#xf…

2026/7/3 13:40:32 阅读更多 →
无刷驱动foc无刷电机驱动方式学习 可用于驱动无刷电机,永磁同步电机。 智能车平衡单车组无刷动...

无刷驱动foc无刷电机驱动方式学习 可用于驱动无刷电机,永磁同步电机。 智能车平衡单车组无刷动...

无刷驱动foc无刷电机驱动方式学习 可用于驱动无刷电机,永磁同步电机。 智能车平衡单车组无刷动量轮驱动学习。 包含:FOC框架、坐标变换、SVPWM、电流环、 速度环、有感FOC、无感FOC等等。 提供给你: 1.讲解教程 2.代码(不是电机库,自己编写&a…

2026/7/8 8:02:26 阅读更多 →
回料使用工艺规范

回料使用工艺规范

回料是指之前至少加工过一次的材料,包括水口、废料等,并随后磨碎再利用。其实,即使是大多数人认为的“原始”树脂也可能有一个或多个加工历史,因为它是在制造时混合和造粒的。这些加工过程的结果是,聚合物的物理、化学…

2026/7/6 4:03:51 阅读更多 →

最新新闻

如何彻底解决网盘下载限速问题:9大平台直链解析工具完全指南

如何彻底解决网盘下载限速问题:9大平台直链解析工具完全指南

如何彻底解决网盘下载限速问题:9大平台直链解析工具完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 …

2026/7/8 7:59:29 阅读更多 →
9大主流网盘直链解析工具:告别限速困扰的高效下载解决方案

9大主流网盘直链解析工具:告别限速困扰的高效下载解决方案

9大主流网盘直链解析工具:告别限速困扰的高效下载解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …

2026/7/8 7:57:29 阅读更多 →
D3KeyHelper:5分钟打造你的暗黑3专属鼠标宏,彻底告别手酸烦恼

D3KeyHelper:5分钟打造你的暗黑3专属鼠标宏,彻底告别手酸烦恼

D3KeyHelper:5分钟打造你的暗黑3专属鼠标宏,彻底告别手酸烦恼 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破坏…

2026/7/8 7:57:29 阅读更多 →
.NET 项目集成可观测性:从架构思考到落地实践

.NET 项目集成可观测性:从架构思考到落地实践

本文基于一个真实的.NET 9项目集成可观测性栈的经历,分享从"为什么做"到"怎么落地"的完整过程。一、为什么需要集成可观测性? 1.1 触发点:一个"慢"接口 项目中有一个业务接口,涉及多表关联、缓存查…

2026/7/8 7:51:28 阅读更多 →
终极AI换脸指南:如何用roop-unleashed实现电影级面部替换效果

终极AI换脸指南:如何用roop-unleashed实现电影级面部替换效果

终极AI换脸指南:如何用roop-unleashed实现电影级面部替换效果 【免费下载链接】roop-unleashed Evolved Fork of roop with Web Server and lots of additions 项目地址: https://gitcode.com/gh_mirrors/ro/roop-unleashed 在数字创意领域,AI换脸…

2026/7/8 7:49:27 阅读更多 →
腾讯混元Hy3技术拆解:295B MoE架构、定价策略与Benchmark实测对比

腾讯混元Hy3技术拆解:295B MoE架构、定价策略与Benchmark实测对比

核心结论 腾讯于2026年7月6日正式发布混元Hy3,这是一个总参数295B、激活参数21B的MoE架构模型(192专家、每次激活Top-8),支持256K上下文窗口。本文从架构设计、定价策略、Benchmark实测三个维度进行技术拆解,并与GPT-5…

2026/7/8 7:49:27 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻