前言
SpringBoot是整合Spring技术栈的一站式框架,是简化Spring技术栈的快速开发脚手架,是一个能够快速构建生产级别的Spring应用的工具。SpringBoot是目前流行的微服务框架,倡导“约定优于配置”,简化Spring项目搭建及开发过程。springboot提供了很多核心的功能,比如自动化配置、starter简化maven配置、内嵌servlet容器、应用监控等功能。本文就来讲解SpringBoot项目的目录结构。
先看第一层目录
/.mvn (这是 Maven Wrapper 的存放位置。Maven Wrapper 是一个包装器工具,用于在没有预先安装 Maven 的系统上运行 Maven 项目。它包含一个用于下载和安装特定 Maven 版本的脚本。如果删除这个文件夹会导致无法使用 Maven Wrapper 来自动下载和管理特定版本的 Maven。开发人员必须手动安装并配置全局的 Maven,或者使用其他构建工具来代替 Maven。)
/src (项目的源码层,日常开发都在此目录下的进行)
/target (放置编译后的.class文件、配置文件等、 target文件夹是用来存放项目构建后的文件和目录、jar包、war包、编译的class文件,都是maven构建时生成的。)
/.gitignore ( Git 是一个版本控制系统,用于跟踪项目中的代码更改。.gitignore 文件用于指定应该被 Git 忽略的文件和目录,以防止它们被添加到版本控制中。这个文件通常包含一些自动生成的文件、编译输出、临时文件等。删除 .gitignore 文件可能会导致一些不应被版本控制的文件和目录被纳入版本控制中,例如编译输出、临时文件等。这会增加代码库的体积,使版本控制变得混乱。)
/HELP.md (一个Markdown格式的文件,通常包含项目的帮助信息、说明和指南。这是一个包含项目帮助信息的 Markdown 文件。通常,这个文件会提供项目的概述、配置说明、运行指南等信息,方便其他开发人员了解和使用项目。删除 HELP.md 文件会使其他开发人员难以获取项目的相关信息,降低项目的可维护性和可理解性。项目的说明、配置指南等重要信息将不再可用。)
/mvnw ( mvnw 是 Maven Wrapper 的可执行脚本文件。它是 Spring Boot 项目中常见的一个文件,用于简化构建和管理项目依赖的过程。Maven 是一个用于构建和管理 Java 项目的强大工具,它使用项目配置文件(pom.xml)来定义项目的结构、依赖和构建过程。然而,使用传统的 Maven 构建项目需要在本地环境中安装和配置 Maven 工具。
为了简化项目的构建和管理过程,并确保项目在不同环境中的一致性,Spring Boot 引入了 Maven Wrapper。Maven Wrapper 是一个用于包装 Maven 的脚本和库文件的工具,可以将 Maven 包装在项目内部,不依赖于本地环境中是否已安装 Maven。
在 Spring Boot 项目中,mvnw 文件是 Maven Wrapper 的可执行脚本文件,它会根据项目中的配置自动下载和使用特定版本的 Maven。当你在项目目录下执行 mvnw 命令时,它会检查项目中是否已经存在所需的 Maven 版本,如果不存在,会自动下载并使用指定的 Maven 版本进行构建。
使用 Maven Wrapper 可以确保项目的构建过程独立于本地环境,并提供了更好的可移植性和项目的一致性。你只需要使用项目中提供的 mvnw 文件,无需手动安装和配置 Maven,就可以在任何环境中构建和管理项目。
这是 Maven Wrapper 的可执行脚本(Unix/Linux 系统)。它允许在没有全局 Maven 安装的情况下运行 Maven 项目。运行 mvnw 脚本会自动下载并使用指定版本的 Maven 来执行项目构建、测试等操作。
/mvnw.cmd (这是 Maven Wrapper 的可执行脚本(Windows 系统)。与上面的 mvnw 脚本类似,它也允许在没有全局 Maven 安装的情况下运行 Maven 项目,但是用于 Windows 系统的命令行环境。删除这两个文件会导致无法使用 Maven Wrapper 运行 Maven 命令。开发人员将无法使用提供的脚本快速执行构建、测试和其他 Maven 相关操作。)
/pom.xml (pom.xml是Maven项目的核心配置文件,用于管理项目的依赖、插件、构建配置等。在Spring Boot项目中,pom.xml文件也扮演着重要的角色。在pom.xml文件中,可以配置项目的资源文件。 在Spring Boot的pom.xml文件中,通常会有一个<resources>标签文件,用于指定资源文件的路径和名称 。)
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.17-SNAPSHOT</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter-test</artifactId> <version>2.3.1</version> <scope>test</scope> </dependency> <!-- Swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <!-- Swagger-UI --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </pluginRepository> </pluginRepositories> </project>
重点是src目录
|---/src/main
|---|---/src/main/java:目录下放置所有的java文件(源代码)
|---|---|---/src/main/java/com/example/demo :核心源码存放文件
|---|---|---/src/main/java/com/example/demo/controller :控制层
|---|---|---/src/main/java/com/example/demo/service:业务代码层
|---|---|---/src/main/java/com/example/demo/mapper:持久层
|---|---|---/src/main/java/com/example/demo/vo :通常用于与前端交互,封装前端调用某个接口之后所需的所有数据。在前后端分离的时代,VO主要应用于表示视图层的类。
|---|---|---/src/main/java/com/example/demo/dto :则主要应用于数据传输层,特别是在Controller层和Service层。在Controller层,DTO用于接收参数,无论是单个参数还是多个参数,都可以通过创建一个DTO对象来进行接收。使用DTO传参相比使用注解(@RequestParam等)具有更高的可读性和维护性。在Service层,处理复杂的逻辑后,将处理好的DTO进行copyBean即可无伤转换为持久化对象(Bo)。总的来说,VO和DTO都是为了实现程序中的数据传输和交互,但它们的使用场景不同。前端与后端交互时,使用VO;而在服务层之间传输数据时,使用DTO。
|---|---|---/src/main/java/com/example/demo/entity:存放实体类,与数据库表名和字段名对应
|---|---|---/src/main/java/com/example/demo/config:一些配置类,例如redis、swagger等配置信息
|---|---|---/src/main/java/com/example/demo/utils:一些工具类,例如时间格式化工具、加密工具、返回结果封装工具、文件上传工具等
|---|---/src/main/resource: 存放资源文件、如静态资源文件、配置文件、页面文件等
|---|---|---/src/main/resource/mapper:存放MyBatis操作数据库的xml文件
|---|---|---/src/main/resource/static:存放静态资源例如css样式、图片等
|---|---|---/src/main/resources/templates:存放模板文件如thymeleaf模板文件
|---|---|---/src/mian/resource/application.properties:: SpringBoot项目的配置文件,SpringBoot支持.properties和.yml文件
application.properties文件内容
#端口号配置 server.port=9099 #数据源相关配置 spring.datasource.url=jdbc:mysql://localhost:3306/finshing?serverTimezone=UTC&&characterEncoding=UTF-8&allowMultiQueries=true spring.datasource.password=123456 spring.datasource.username=root #mybatis映射对应的实体类位置 mybatis.type-aliases-package=com.example.demo.entity #mybatis的映射xml文件路径位置 mybatis.mapper-locations=classpath:/mapper/*Mapper.xml #开启数据库下划线映射Java驼峰 mybatis.configuration.map-underscore-to-camel-case: true spring.mvc.view.prefix=/pages/ spring.mvc.view.suffix=.html spring.mvc.pathmatch.matching-strategy = ant_path_matcher # 配置上传文件大小限制 # 单个文件大小配置 spring.servlet.multipart.maxFileSize=30MB # 请求总大小配置 spring.http.multipart.maxRequestSize = 30MB
|---/src/test 单元测试类java文件