从零开始构建一个JAVA项目

server/2025/2/4 2:39:12/

本篇文章将从结构框架入手,系统介绍一个完整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.properties 或 application.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.java 和 SensitiveFileRepositoryTest.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.properties 或 application.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 注解来配置测试环境


http://www.ppmy.cn/server/164779.html

相关文章

架构技能(四):需求分析

需求分析&#xff0c;即分析需求&#xff0c;分析软件用户需要解决的问题。 需求分析的下一环节是软件的整体架构设计&#xff0c;需求是输入&#xff0c;架构是输出&#xff0c;需求决定了架构。 决定架构的是软件的所有需求吗&#xff1f;肯定不是&#xff0c;真正决定架构…

刷题记录 贪心算法-4:53. 最大子数组和

题目&#xff1a;53. 最大子数组和 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()&qu…

数据结构---线性表

线性表 顺序表 线性表的顺序存储结构是一种随机存取的存储结构&#xff0c;即通过首地址和元素序号可以在O(1)时间内找到指定的元素。由于线性表的长度可变&#xff0c;且所需最大存储空间随问题的不同而不同&#xff0c;在C/C中常用动态分配的一维数组(vector)表示线性表 代…

【人工智能学习笔记 一】 AI分层架构、基本概念分类与产品技术架构

新的一年2025要对AI以及LLM有个强化的学习&#xff0c;所以第一篇先对整体有个大概的认知&#xff0c;一直分不清LLM和AI的关系&#xff0c;在整个体系里的位置&#xff0c;以及AIGC是什么东西&#xff0c;AI AGENT类似豆包等和大语言模型的具体关系是什么&#xff0c;整个AI的…

实现智能教室能耗监测与管理系统的详细方案

以下是一个完整的实现智能教室能耗监测与管理系统的详细方案,涵盖深度学习模型研发、教室场景适应性分析、系统架构设计、前端展示、后端服务以及测试评估等方面,使用 Python 语言完成。 1. 深度学习模型研发 1.1 数据准备 首先,你需要收集大量的教室照片,并对其中的关键…

JavaScript 基础 - 7

关于JS函数部分的学习和一个案例的练习 1 函数封装 抽取相同部分代码封装 优点 提高代码复用性&#xff1a;封装好的函数可以在多个地方被重复调用&#xff0c;避免了重复编写相同的代码。例如&#xff0c;编写一个计算两个数之和的函数&#xff0c;在多个不同的计算场景中都…

解决MacOS安装软件时提示“打不开xxx软件,因为Apple无法检查其是否包含恶意软件”的问题

macOS 系统中如何开启“任何来源”以解决安装报错问题&#xff1f; 大家好&#xff01;今天我们来聊聊在使用 macOS 系统 时&#xff0c;遇到安装应用软件时出现报错的情况。这种情况常常发生在安装一些来自第三方开发者的应用时&#xff0c;因为 macOS 会默认阻止不明开发者的…

使用飞书群机器人监控服务器GPU使用率

目标&#xff1a;如果服务器GPU空置&#xff0c;可以及时推送消息到飞书群。 其他类似的监控目标也可以修改代码实现。 步骤&#xff1a; (1) 首先在群聊设置加入机器人&#xff0c;复制webhook_url (2) 在服务器后台运行如下代码。注意替换webhook_url """…