一、前言
上次简单记录了一下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.编译运行
四、如何修改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>
<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.表格创建
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项目构建,但是对于真正的项目多数还是会使用市面上成熟的框架,所以下次就是基于框架进行简单实战了,待更新~
