【Java 篇】Maven 的神奇魔法与集合的奇妙世界:在 Java 编程领域中探索代码的奥秘之旅

Java中的Maven与集合

1. Maven是什么?

在Java项目开发中,我们通常会涉及到第三方依赖的使用,例如 JUnit、Log4j、MyBatis 等框架。它们大多数以 .jar 包的形式存在。为了将这些 .jar 包集成到项目中,Maven 提供了非常便利的依赖管理机制。

如果直接将这些 .jar 包手动导入到项目中,会出现以下问题:

  1. 项目体积过大,不利于项目发布。
  2. 不同版本的 .jar 包可能会出现冲突和兼容性问题。

Maven 解决了这些问题。其本质是一个项目管理工具,通过一种称为 POM(Project Object Model) 的机制来管理项目的构建、依赖和生命周期。

1.1 Maven的基本概念

Maven 是用 Java 编写的,它管理的所有内容都以面向对象的形式进行设计。Maven 将一个项目视作一个对象,这个对象就称为 POM (项目对象模型)。pom.xml 文件就是这个对象的配置文件,Maven 通过加载这个文件来了解项目的相关信息。在这里插入图片描述

在这里插入图片描述

1.2 依赖管理

Maven 的第二个核心是 依赖管理 ,即它管理项目所需的所有依赖资源(如 .jar 包)。这些依赖可以存放在以下三种仓库中:

  • 本地仓库 :存储在开发者的本地计算机中。
  • 私服 :公司或组织内部的仓库。
  • 中央仓库 :Maven 官方维护的公共仓库,所有开源的资源都可以在这里找到。

1.3 Maven的作用

Maven 的主要作用可以分为三类:

  1. 项目构建 :提供标准的、跨平台的自动化构建项目方式。
  2. 依赖管理 :便捷地管理项目依赖资源,避免版本冲突等问题。
  3. 统一开发结构 :提供标准的项目开发结构。
    在这里插入图片描述
    各目录存放资源类型说明:
    src/main/java:项目java源码
    src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
    src/main/webapp:web资源(比如html,css,js等)
    src/test/java:测试代码
    src/test/resources:测试相关配置文件
    src/pom.xml:项目pom文件

1.4 Maven环境搭建

Maven 的安装非常简单,它是一个绿色软件,只需解压即可。在解压后,配置环境变量(如 JAVA_HOMEMAVEN_HOME),即可开始使用。
maven的官网
maven是一个绿色软件,解压即安装,非常容易,
我们找到今日课程资料中的安装程序,将里面的apache-maven-3.6.3-bin.zip直接解压到E盘根目录下即可
解压完成后我们可以查看一下maven自己的一个目录结构如下
在这里插入图片描述
各目录结构说明:
bin:可执行程序目录
boot:maven自身的启动加载器
conf:maven配置文件的存放目录
lib:maven运行所需库的存放目录

环境配置
maven的运行需要java的环境,需要我们配置JAVA_HOME环境变量

下面在去配置MAVEN_HOME的环境变量
1:我的电脑-------->属性--------->高级系统设置---------->新建系统变量MAVEN_HOME
在这里插入图片描述

```bash
# 配置MAVEN_HOME环境变量
MAVEN_HOME=D:/apache-maven-3.6.3

```

1.5 Maven仓库和坐标

Maven 仓库中的资源(如 .jar 包)使用 坐标 来定位。坐标包括:

  • groupId :组织名称,通常是域名反写(如:org.mybatis)。
  • artifactId :资源名称,通常是项目名称(如:mybatis)。
  • version :资源的版本号(如:3.5.4)。

如果要查询maven某一个资源的坐标,我们通常可以去maven的仓库进行查询

  • maven坐标的作用:
    使用唯一标识,唯一性定义资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
1.5.1 仓库配置

开发者要在自己电脑上做开发,首先要做的就是配置本地仓库
默认情况下maven本地仓库的位置在哪儿呢?
我们可以选择在全局进行配置,在maven的配置文件conf/settings.xml中可以找到它的说明
因为我们平时开发项目所有的资源会比较多,而且各种资源还有好多的版本,资源与资源之间还有相互依赖的这种情况,因此本地仓库保存的内容会非常的多,它的体积会很大,如果放在C盘下不太合适,因此我们可以自己来指定一个位置作为本地仓库的位置,这个指定同样是需要来修改maven的配置文件conf/settings.xml
在我们前面查看这个文件的时候大家会发现它提供了一个标签/path/to/local/repo
这个标签中配置的值就是我们本地仓库的位置,但是这个标签是在注释中的,也就是说目前不起作用,因此我们要将该标签挪出注释,并修改标签内的值,指定一个新的位置作为本地仓库的位置,例如
E:\maven_repository
另外大家需要注意
:maven默认连接的远程仓库位置是:(即中央仓库)
国外的中央仓库
在这里插入图片描述
Maven 默认连接到中央仓库,但也可以配置镜像站点(如阿里云仓库)来加速资源下载。

```java

alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central



aliyunmaven
*
阿里云公共仓库
https://maven.aliyun.com/repository/public


```

1.6 Maven生命周期与插件

Maven生命周期与插件
maven的构建生命周期描述的是一次构建过程经历了多少个事件
比如我们项目最常用的一套流程如下:
当然maven的生命周期不止这一套,总共分为3套,每套里面包含的事件如下
(1)clean:清理工作
pre-clean:执行一些在clean之前的工作
clean:移除上一次构建产生的所有文件
post-clean:执行一些在clean之后立刻完成的工作
(2)default:核心工作,例如编译,测试,打包,部署等
在这里插入图片描述
对于default生命周期,每个事件在执行之前都会将之前的所有事件依次执行一遍
(3)site:产生报告,发布站点等
pre-site:执行一些在生成站点文档之前的工作
site:生成项目的站点文档
post-site:执行一些在生成站点文档之后完成的工作,为部署做准备
site-deploy:将生成的站点文档部署到特定的服务器上

JDBC驱动与url

5.x的驱动和url

```java
url = jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf8
driver = com.mysql.jdbc.Driver

```

8.x的驱动和url

```java
url = jdbc:mysql://localhost:3306/ssq?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
driver = com.mysql.cj.jdbc.Driver

```

1.7 Maven依赖范围

依赖的jar默认情况可以在任何地方可用,可以通过scope标签设定其作用范围
这里的范围主要是指以下三种范围
(1)主程序范围有效(src/main目录范围内)
(2)测试程序范围内有效(src/test目录范围内)
(3)是否参与打包(package指令范围内)
此外:scope标签的取值有四种:compile,test,provided,runtime
在这里插入图片描述

在idea中集成Maven
在这里插入图片描述

在这里插入图片描述
  • 注:这行代码真挺有用的 我每次忘了都会看这里重新写上来
    -DarchetypeCatalog=internal

2. 集合

2.1 数组的缺点

Java 中的数组有以下缺点:

  1. 长度固定 :数组的大小在定义时必须确定,无法动态扩展。
  2. 不适合增删操作 :插入、删除元素需要频繁移动元素,效率较低。

2.2 集合的优势

Java 中引入了集合(Collection)来解决数组的这些缺点。集合是一个存储对象数据的容器,其大小可动态变化,且能更方便地进行元素增删操作。

集合有以下特点:

  1. 大小可变 :集合的大小是动态变化的。
  2. 存储引用类型 :集合中只能存储引用类型的数据。

2.3 数组与集合的比较

特性 数组 集合
长度 固定 动态变化
存储类型 可以存储基本类型和引用类型 只能存储引用类型
使用场景 数据个数和类型确定的场景 数据个数不确定且需要增删元素的场景

2.4 集合体系

Java 的集合体系主要分为两类:

  • Collection :单列集合,每个元素只包含一个值。
  • Map :双列集合,每个元素包含两个值(键值对)。

  • 注:这个图也很重要
    在这里插入图片描述

3. 小案例:京东商城

3.1 项目框架

我们将实现一个简单的京东商城应用,功能包括用户登录、注册、查询商品和添加商品等。

```java
package com.shool.test2;
import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("欢迎使用京东商城");
            System.out.println("1. 登录");
            System.out.println("2. 注册");
            System.out.println("3. 查询所有商品");
            System.out.println("4. 添加商品");
            System.out.println("5. 退出");

            System.out.println("请选择:");
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    System.out.println("登录操作");
                    break;
                case 2:
                    System.out.println("注册操作");
                    break;
                case 3:
                    System.out.println("查询所有商品");
                    break;
                case 4:
                    System.out.println("添加商品");
                    break;
                case 5:
                    System.out.println("退出");
                    System.exit(0);
                    break;
            }
        }
    }
}

```

3.2 用户实体类 Users

```java
package com.shool.test2;
import java.util.Scanner;
/**
●
@version 1.0
●
@Author yishu
●
@Date 2024-12-24 10:48
●
@注释
 */
public class Test2 {
 public static void main(String[] args) {
 Scanner sc = new Scanner(System.in);
 while (true){
     System.out.println("欢迎使用京东商城");
     System.out.println("1.登录");
     System.out.println("2.注册");
     System.out.println("3.查询所有商品");
     System.out.println("4.添加商品");
     System.out.println("5.退出");

     System.out.println("请选择:");
     int chioce = sc.nextInt();
     switch (chioce){
         case 1:
             System.out.println("登录操作");
             break;
         case 2:
             System.out.println("注册操作");
             break;
         case 3:
             System.out.println("查询所有商品");
             break;
         case 4:
             System.out.println("添加商品");
             break;
         case 5:
             System.out.println("退出");
             System.exit(0);
             break;
     }
 }
 }
}

```
在这里插入图片描述

3.3 完成登录操作 首先要新建一个实体类

Users

```java
package com.shool.entity;
import java.util.Objects;
/**
●
@version 1.0
●
@Author yishu
●
@Date 2024-12-24 11:08
●
@注释
 */
public class Users {
private String uname;
private String upwd;


public String getUname() {
    return uname;
}

public void setUname(String uname) {
    this.uname = uname;
}

public String getUpwd() {
    return upwd;
}

public void setUpwd(String upwd) {
    this.upwd = upwd;
}

public Users() {
}



public Users(String uname, String upwd) {
    this.uname = uname;
    this.upwd = upwd;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Users users = (Users) o;
    return Objects.equals(uname, users.uname) && Objects.equals(upwd, users.upwd);
}

@Override
public int hashCode() {
    return Objects.hash(uname, upwd);
}

@Override
public String toString() {
    return "Users{" +
            ", uname='" + uname + '\'' +
            ", upwd='" + upwd + '\'' +
            '}';
}
}

```

3.4 完成登录操作

在这里插入图片描述

新建一个UsersDao 新建一个ArrayList集合 用来存储 users
在这里插入图片描述

总结

通过本教程,您了解了 Maven 的基本概念、功能以及如何在 Java 项目中使用它来进行依赖管理、构建和生命周期管理。同时,学习了 Java 集合 的优势以及在实际项目中如何使用集合来进行数据存储和操作。

相关文章

暂无评论

暂无评论...