从零开始构建一个JAVA项目

本篇文章将从结构框架入手,系统介绍一个完整Java程序的结构步骤,不涉及JAVA基础代码学习。

在本文章中先简单介绍Maven、Spring、MyBatis三种Java类型。


一、分类介绍

首先我们先来了解Java程序的类型,不同类型结构略有区别。Java程序的类型可以根据多个分类方式进行划分,以下是一些常见的分类和简要解释:

  1. 构建工具类型

    • Maven:用于管理项目的构建、报告和文档的生成。它提供了一种标准化的方法来构建Java项目,包括依赖管理和插件系统。
    • Gradle:也是一个构建工具,相比Maven更灵活和可定制化。它使用Groovy或Kotlin作为DSL(领域特定语言),支持增量构建和多项目构建。
  2. Web框架类型

    • Spring:一个广泛使用的Java企业级应用开发框架,提供了全面的编程和配置模型。Spring主要关注于依赖注入、AOP(面向切面编程)和模块化开发。
    • Struts:一个基于MVC(模型-视图-控制器)模式的Web应用程序框架,帮助开发者创建维护性强的Web应用。
    • Play Framework:一个使用Scala和Java编写的Web框架,特点是开发速度快、支持异步编程和实时编译。
  3. 数据访问类型

    • Hibernate:一个ORM(对象关系映射)框架,帮助开发者将Java对象映射到关系型数据库中,简化了数据库操作。
    • MyBatis:另一个流行的持久层框架,提供了SQL映射和POJO(Plain Old Java Object)映射两种方式来访问数据库。
  4. 测试框架类型

    • JUnit:一个用于编写和运行单元测试的框架,它提供了断言、测试套件和测试运行器等功能。
    • TestNG:一个灵活的测试框架,支持多种类型的测试(如单元测试、集成测试、端到端测试等),并提供了强大的报告功能。

++下面我将更详细地解释每种类型,并说明它们之间的联系和通常如何结合使用:++

Maven:

Maven是一个基于项目对象模型(POM)的构建工具。简化了项目的构建、测试和部署过程,并提供了依赖管理、插件系统和生命周期管理等功能。Maven的主要特点是他的约定优于配置的理念。这意味着他会根据定义的规则来处理大部分情况,减少了配置文件的复杂性;
Gradle:

Gradle提供了更高的灵活性和定制性。与Maven不同,Gradle使用Groovy或Kotlin作为DSL(领域特定语言),使得构建脚本更加易读和可维护。Gradle支持增量构建和多项目构建,能够更好的处理大型项目;
Spring:

Spring是一个全面的Java企业级应用开发框架。最初是作为一个替代EJB(Enterprise JavaBeans)的轻量级解决方案而诞生的。Spring的核心特性包括依赖注入、AOP(面向切面编程)、模块化开发等。Spring的生态系统非常庞大,包含了许多子项目和模块,例如Spring Boot、Spring Data、Spring Security等;
Struts:

Struts是一个基于MVC(模型-视图-控制器)模式的Web应用程序框架。它主要用于构建Web应用的前端部分,提供了一个清晰的分层结构来处理请求和响应。Struts框架的特点是易于学习和使用,适合中小型项目;
Play Framework:

Play Framework是一个使用Scala和Java编写的Web框架,旨在提供更快的开发速度和更好的开发体验。支持异步编程、实时编译和热重载等功能,适合需要快速迭代和实施反馈的项目;
Hibernate:

Hibernate是一个ORM(对象关系映射)框架,他将Java对象与关系型数据库表之间建立映射关系。这样,开发者可以使用面向对象的方式来操作数据库,无需直接编写SQL语句。

Hibernate提供了大量的高级特性,如缓存、延迟加载和二级缓存等;
MyBatis:

MyBatis是一个持久层框架,它提供了SQL映射和POJO(Plain Old Java Object)映射两种方式来访问数据库。相比Hibernate,MyBatis更灵活,因为它允许开发者手动编写SQL语句,并且支持存储过程和动态SQL
JUnit:

JUnit是一个流行的单元测试框架,用于编写和运行单元测试。它提供了断言、测试套件和测试运行器等功能,帮助开发者验证代码的正确性。JUnit是Java生态系统中最早的测试框架之一,仍然广泛使用
TestNG:

TestNG是一个更灵活的测试框架,支持多种类型的测试(如单元测试、集成测试、端到端测试等)。它提供了强大的报告功能和参数化测试能力。TestNG也支持并行测试和分布式测试。

二、结构框架梳理

2.1 Maven
2.1.1 Maven型Java项目结构梳理

Maven型Java项目的经典框架结构通常如下:

1.项目根目录:

  • pom.xml:这是Maven的核心配置文件,定义了项目的基本信息、依赖关系、构建过程等
  • src/:源代码根目录,包含所有的Java、资源文件和测试文件
  • target/:编译后的输出目录,包含编译生成的类文件、JAR文件等

2.src目录结构:

  • main/:存放项目的主要源代码和资源文件
  • java/:Java源代码的根目录
  • resources/:非Java文件的资源,例如配置文件、图像等
  • test/:存放项目的测试源代码和资源文件

3.pom.xml文件结构:

  • <project>:定义了整个项目的基本信息
  • <groupId>:项目的组标识
  • <artifactId>:项目的构件标识
  • <version>:项目的版本
  • <packaging>:项目的打包类型,如JAR、WAR等
  • <dependncies>:定义了项目依赖的其他项目或库
  • <build>:定义了项目的构建过程,包括编译、测试、打包等步骤
  • <piugins>:配置了Maven使用的插件,例如编译插件、测试插件等

4.依赖管理:

Maven通过pom.xml文件中的<dependencies>元素来管理项目的依赖关系。每个依赖项都需要指定以下信息:

  • <groupId>:依赖想所属的组标识
  • <artifactId>:依赖项的构件标识
  • <version>:依赖项的版本

Maven会自动下载这些依赖项,确保项目的构件和运行环境一致

5.构件生命周期:

Maven定义了一系列构件阶段,称为生命周期。每个生命周期包含多个阶段,例如:

  • validate:验证项目是否正确配置
  • compile:编译项目的源代码
  • test:运行项目的单元测试
  • package:打包项目的成果物
  • install:将项目的成果物安装到本地仓库
  • deploy:将项目的成果物部署到远程仓库
2.1.2 Maven型Java结构树

以"检测文件敏感程度"这一场景举例,解释下述结构树

sensitive-file-detector/
├── pom.xml
└── src/
    ├── main/
    │   ├── java/
    │   │   └── com/
    │   │       └── example/
    │   │           ├── SensitiveFileDetector.java
    │   │           ├── FileAnalyzer.java
    │   │           └── SensitiveContentChecker.java
    │   └── resources/
    │       └── sensitive_keywords.txt
    └── test/
        ├── java/
        │   └── com/
        │       └── example/
        │           ├── SensitiveFileDetectorTest.java
        │           ├── FileAnalyzerTest.java
        │           └── SensitiveContentCheckerTest.java
        └── resources/
            └── test_sensitive_keywords.txt
  • sensitive-file-detector/:工程名作为根目录
  • src/:源码目录
  • main/:主程序目录
  • java/:主程序的Java源文件目录,例如本例中包含三个Java程序
  • resources/:主程序的资源源文件目录,例如本例中存放要进行分析的文件
  • test/:测试程序目录,基本结构同上
2.2 Spring
2.2.1 Spring型Java项目结构梳理

以下是 Spring 型 Java 项目的典型框架结构:

1.项目根目录:

  • pom.xml:这是Maven项目的核心配置,定义了项目的基本信息、依赖关系、构建过程等
  • src/:源代码的根目录,包含所有的Java、资源文件和测试文件
  • target/:编译后的输出目录,包含了编译生成的类文件、JAR文件等

2.src目录结构:

  • main/:存放项目的主要源代码和资源文件
  • java/:Java源代码的根目录
  • resources/:非Java文件的资源,例如配置文件、图像等
  • application.properties:Spring Boot应用程序的默认配置文件
  • application.yml:另一种格式的Spring Boot应用程序配置文件
  • static/:静态资源文件夹,用于存放Web应用程序的静态资源
  • templates/:模版文件夹,用于存放Thymeleaf获其他模版引擎的模版文件
  • test/:存放项目的测试源代码和资源文件

3.pom.xml文件结构:

pom.xml文件的基本结构同上,可参考maven的基本结构

4.Spring Boot应用程序结构:

  • @SpringBootApplication:标注在主类上,表示这是一个 Spring Boot 应用程序
  • Controller@RestController@Service@Repository 等注解:用于定义控制器、服务和数据访问层的组件
  • application.propertiesapplication.yml:Spring Boot 应用程序的配置文件,用于配置数据库连接、服务器端口号等信息
  • index.html 或其他静态资源文件:存放在 src/main/resources/static 目录下,用于提供 Web 应用程序的静态内容
  • templates 目录下的模板文件:用于渲染动态 Web 页面

5.依赖管理

Spring 项目通常依赖于多个 Spring 框架的组件,例如 Spring Core、Spring Web、Spring Data JPA 等。这些依赖关系可以在 pom.xml 文件中通过 <dependencies> 元素进行管理

6.测试

Spring 项目的测试通常使用 JUnit 和 Spring TestContext Framework。测试类需要使用 @RunWith(SpringRunner.class)@ContextConfiguration 注解来配置测试环境

2.2.2 Spring型Java结构树
sensitive-file-detector/
├── pom.xml
└── src/
    ├── main/
    │   ├── java/
    │   │   └── com/
    │   │       └── example/
    │   │           ├── SensitiveFileDetectorApplication.java
    │   │           ├── service/
    │   │           │   └── SensitiveFileService.java
    │   │           ├── repository/
    │   │           │   └── SensitiveFileRepository.java
    │   │           └── util/
    │   │               └── FileUtil.java
    │   └── resources/
    │       ├── application.properties
    │       └── sensitive_keywords.txt
    └── test/
        ├── java/
        │   └── com/
        │       └── example/
        │           ├── SensitiveFileDetectorApplicationTests.java
        │           ├── SensitiveFileServiceTest.java
        │           └── SensitiveFileRepositoryTest.java
        └── resources/
            └── test_sensitive_keywords.txt
  • SensitiveFileService.java: 这是一个服务类,负责调用其他组件来实现业务逻辑。例如,它可能调用 SensitiveFileRepository 来读取敏感词汇列表,并调用 FileUtil 来读取文件内容
  • SensitiveFileRepository.java: 这是一个数据访问层的接口,定义了读取敏感词汇列表的方法。它可能使用 Spring Data JPA 或其他技术来实现数据存储和检索
  • FileUtil.java: 这是一个实用工具类,提供了读取文件内容的方法。它可以帮助服务层或控制器层读取文件
  • application.properties: 这是一个 Spring Boot 应用程序的配置文件,用于配置数据库连接、服务器端口号等信息
  • sensitive_keywords.txt: 这是一个文本文件,包含了敏感词汇列表
  • SensitiveFileDetectorApplicationTests.java: 这是一个集成测试类,用于测试整个应用程序的功能
  • SensitiveFileServiceTest.javaSensitiveFileRepositoryTest.java: 这些是单元测试类,分别用于测试服务层和数据访问层的组件
  • test_sensitive_keywords.txt: 这是一个用于测试的敏感词汇列表文件
2.3 MyBatis
2.3.1 MyBatis型Java项目结构梳理

MyBatis是一个流行的持久化框架,提供了对数据库的抽象和操作。以下是MyBatis型Java项目的典型框架结构:

1.项目根目录:

  • pom.xml:Maven的核心配置文件,与上面相同,这里不多赘述
  • src/:源代码根目录,包含所有的Java、资源文件和测试文件
  • target/:这是编译后的输出目录,包含了编译生成的类文件、JAR文件等

2.src目录结构:

  • main/:存放项目的主要源代码和资源文件
  • java/:Java源代码的根目录
  • resources/:测试用的非Java文件资源
  • mybatis-config.xml:MyBatis 的全局配置文件
  • application.propertiesapplication.yml:Spring Boot 应用程序的配置文件,用于配置数据库连接等信息
  • mapper/:存放 MyBatis 的映射文件(*.xml)目录
  • test/:存放项目的测试源代码和资源文件

3.pom.xml

pom.xml结构同上

4.MyBatis配置文件结构

  • <configuration>:配置文件的根元素。
  • <settings>:全局设置,例如日志级别、缓存等。
  • <typeAliases>:类型别名,用于简化 Java 类型和数据库表的映射。
  • <typeHandlers>:类型处理器,用于处理特定类型的数据。
  • <objectFactory>:对象工厂,用于创建结果对象。
  • <plugins>:插件配置,例如分页插件等

5.MyBatis映射文件结构

  • <mapper>:映射文件的根元素。
  • <select><insert><update><delete>:定义了对数据库的操作,例如查询、插入、更新和删除。
  • <resultMap>:结果映射,用于将查询结果映射到 Java 对象。
  • <parameterMap>:参数映射,用于将方法参数映射到 SQL 语句中的参数

6.依赖管理

MyBatis 项目通常依赖于多个组件,例如 MyBatis 本身、数据库驱动程序等。这些依赖关系可以在 pom.xml 文件中通过 <dependencies> 元素进行管理

7.测试

MyBatis 项目的测试通常使用 JUnit 和 Spring TestContext Framework。测试类需要使用 @RunWith(SpringRunner.class)@ContextConfiguration 注解来配置测试环境

相关推荐
gentle_ice21 分钟前
leetcode——矩阵置零(java)
java·算法·leetcode·矩阵
stevewongbuaa1 小时前
一些烦人的go设置 goland
开发语言·后端·golang
撸码到无法自拔1 小时前
MATLAB中处理大数据的技巧与方法
大数据·开发语言·matlab
whisperrr.1 小时前
【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南
java·架构·tomcat
island13141 小时前
【QT】 控件 -- 显示类
开发语言·数据库·qt
sysu632 小时前
95.不同的二叉搜索树Ⅱ python
开发语言·数据结构·python·算法·leetcode·面试·深度优先
hust_joker2 小时前
go单元测试和基准测试
开发语言·golang·单元测试
火烧屁屁啦2 小时前
【JavaEE进阶】应用分层
java·前端·java-ee
m0_748257462 小时前
鸿蒙NEXT(五):鸿蒙版React Native架构浅析
java
我没想到原来他们都是一堆坏人3 小时前
2023年版本IDEA复制项目并修改端口号和运行内存
java·ide·intellij-idea