一、前言

上次简单记录了一下Java的单个文件的练习例子,从Hello World的打印到变量声明、数据类型、流程控制等简单的示例。

但是项目往往都是由多个文件组合强关联的,所以基于构建器来创建项目就很有必要了,下面我还是新手视角,用Maven创建Java项目做一个详细的入门总结。

二、Maven安装

1.下载

https://maven.apache.org/download.cgi

2.maven版本指南

因为Java版本和maven版本有关系,比如maven4.x以上的版本必须java 17及以上的,所以我罗列一下这些常用的版本对应关系。

maven版本 Java版本
Maven 3.8.6 Java 8以上
Maven 3.5.4 Java 7以上
Maven 3.0.5 Java 1.6或以上
Maven 4.x Java 17或以上

3.安装

解压到电脑下的指定位置,然后找到Maven根目录下的conf文件夹下settings.xml,打开编辑,找到mirrors,添加国内的淘宝镜像,这样可以更快速构建项目。

1
2
3
4
5
6
7
8
<mirrors>
<mirror>
<id>aliyun</id>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>

4.添加环境变量

还是在Maven根目录找到bin,然后复制那个文件夹的绝对路径,在电脑的环境变量中的path添加maven的bin路径,比如我的 “D:\1setsoft\1dev\apache-maven-3.8.9\bin”。

5.验证

cmd输入mvn -v查看版本号,表示成功。

三、项目创建

1.maven构建项目

1
mvn archetype:generate -DgroupId=com.example -DartifactId=02_mysql_example -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mvn archetype:generate: 这是Maven的命令,用于生成新的项目。

archetype:generate是Maven的原型插件的一个目标,表示要生成一个项目。

-DgroupId=com.example: 这是指定项目的groupId。

groupId通常是项目的组织或团队名称,使用反向域名的格式。在这个例子中,com.example是项目的groupId。

-DartifactId=02_mysql_example: 这是指定项目的artifactId。

artifactId是项目的唯一标识符,通常是项目的名称。在这个例子中,02_mysql_example是项目的artifactId。

-DarchetypeArtifactId=maven-archetype-quickstart: 这是指定要使用的原型的artifactId。

Maven原型是一个模板项目,用于快速生成符合Maven规范的项目结构。在这个例子中,maven-archetype-quickstart是一个基本的Java项目原型。

-DinteractiveMode=false: 这个参数用于指定Maven在生成项目时是否采用交互模式。false表示非交互模式,即Maven会直接使用命令行中提供的参数来生成项目,而不会提示用户输入。

如果设置为true,Maven会提示用户输入所需的参数。在这个例子中,Maven将不会进行交互式提示,而是直接使用已经提供的参数来生成项目。

2.项目配置

在项目编译前,对模板项目的pom.xml进行修改,指定项目运行的主类。打开项目的pom.xml,只需要找到文件的根节点,然后添加下面代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.6.2</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.example.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>

节点说明

1
2
3
4
5
6
7
8
9
10
<groupid>(插件级别):插件的唯一标识符。
<artifactid>(插件级别):插件的基本名称。
<version>(插件级别):插件的版本号。
<executions>:定义插件的执行配置。
<execution>:定义单个插件执行的详细信息。
<goals>:定义插件执行的目标列表。
<goal>:定义单个插件执行的目标。
<configuration>:定义插件的配置参数。
<mainclass>:定义项目的主类。
通过这些标签,您可以详细配置项目的构建过程,包括使用的插件及其行为。

3.编译运行

1
mvn compile
1
mvn exec:java

四、如何修改Maven本地仓库位置

默认情况下,maven会自动将项目的依赖下载到系统盘的.m2下,如果C盘空间告急的情况,可以通过对maven的配置将本地仓库位置放到指定位置。

找到maven下conf的settins.xml,在settings标签下添加:

1
<localRepository>D:\1setsoft\1dev\apache-maven-3.8.9\Repository</localRepository>

其实在那个文件里有被注释掉的关于本地仓库的配置和说明,然后再次mvn compile编译时就会把依赖下载到新的位置了。

五、MySQL增删改查案例

1.pom配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>02_mysql_example</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>02_mysql_example</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>

<!-- MySQL Connector/J -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!-- JUnit for testing -->

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

</dependencies>

<build>
<plugins>

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.6.2</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.example.App</mainClass>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>

</plugins>
</build>
</project>

2.表格创建

1
2
3
4
5
6
7
8
9
CREATE DATABASE testdb;

USE testdb;

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL
);

3.业务逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package com.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
* 数据库连接
*
*/
public class App
{
// 数据库连接信息
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/game";
private static final String JDBC_USER = "root";
private static final String JDBC_PASSWORD = "root";
public static void main( String[] args )
{
// 连接数据库
try (Connection connection = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD)) {
// 插入数据
insertUser(connection, "Alice", "alice@example.com");
insertUser(connection, "Bob", "bob@example.com");

// 查询数据
List<User> users = selectUsers(connection);
System.out.println("查询到的用户:");
for (User user : users) {
System.out.println(user);
}

// 更新数据
updateUser(connection, 1, "Alice Smith", "alice.smith@example.com");

// 查询数据(更新后)
users = selectUsers(connection);
System.out.println("更新后的用户:");
for (User user : users) {
System.out.println(user);
}

// 删除数据
deleteUser(connection, 2);

// 查询数据(删除后)
users = selectUsers(connection);
System.out.println("删除后的用户:");
for (User user : users) {
System.out.println(user);
}

} catch (SQLException e) {
e.printStackTrace();
}
}

// 插入用户
public static void insertUser(Connection connection, String name, String email) throws SQLException {
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
pstmt.setString(1, name);
pstmt.setString(2, email);
pstmt.executeUpdate();
}
}

// 查询用户
public static List<User> selectUsers(Connection connection) throws SQLException {
List<User> users = new ArrayList<>();
String sql = "SELECT id, name, email FROM users";
try (PreparedStatement pstmt = connection.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
users.add(new User(id, name, email));
}
}
return users;
}

// 更新用户
public static void updateUser(Connection connection, int id, String name, String email) throws SQLException {
String sql = "UPDATE users SET name = ?, email = ? WHERE id = ?";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
pstmt.setString(1, name);
pstmt.setString(2, email);
pstmt.setInt(3, id);
pstmt.executeUpdate();
}
}

// 删除用户
public static void deleteUser(Connection connection, int id) throws SQLException {
String sql = "DELETE FROM users WHERE id = ?";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
pstmt.setInt(1, id);
pstmt.executeUpdate();
}
}

}

class User {
private int id;
private String name;
private String email;

public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}

@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}

六、写在后面

以上就完成了一个简答的Java项目构建,但是对于真正的项目多数还是会使用市面上成熟的框架,所以下次就是基于框架进行简单实战了,待更新~

image-20250408192801332