一、前言
上次简单记录了一下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,添加国内的淘宝镜像,这样可以更快速构建项目。
| 12
 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
 | 
| 12
 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,只需要找到文件的根节点,然后添加下面代码。
| 12
 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>
 
 | 
节点说明
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | <groupid>(插件级别):插件的唯一标识符。<artifactid>(插件级别):插件的基本名称。
 <version>(插件级别):插件的版本号。
 <executions>:定义插件的执行配置。
 <execution>:定义单个插件执行的详细信息。
 <goals>:定义插件执行的目标列表。
 <goal>:定义单个插件执行的目标。
 <configuration>:定义插件的配置参数。
 <mainclass>:定义项目的主类。
 通过这些标签,您可以详细配置项目的构建过程,包括使用的插件及其行为。
 
 | 
3.编译运行
四、如何修改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配置
| 12
 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>
 
 
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>8.0.26</version>
 </dependency>
 
 
 <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.表格创建
| 12
 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.业务逻辑
| 12
 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项目构建,但是对于真正的项目多数还是会使用市面上成熟的框架,所以下次就是基于框架进行简单实战了,待更新~
