一 、什么是 maven 子父級工程?
建立一個maven項目,然后在該項目 下創建一個module,子級的maven,他繼承於父級項目。
1.新建立 maven項目,file ------new----project----maven,不使用它的模板。直接選擇 ----next
完成,將父級工程的src 干掉?
父級工程的xml配置信息。
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.aaa</groupId> <artifactId>DemoSpringBoot</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <!--modules 模塊標簽 1. 所有的父級工程 作用是管理jar包 不參與任何邏輯算法。所以可以干掉 SRC 2. 列舉了父工程中的所有子模塊,子工程可以自動繼承父級工程中的jar包 3. 每一個子模塊都代表了不同的包(package) --> <modules> <module>mapper</module> <module>model</module> <module>service</module> <module>web</module> </modules> <dependencies> <!-- 在父級工程中,添加一些jar 包。 mysql的驅動包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>1.9.21</version> </dependency> <!-- spring --> <!-- mybatis --> <!-- shiro --> </dependencies> </project>
2.在父級工程下,右鍵點節,建立子級module 。
根據需求,建立一些其他的子級工程。
二、<dependencyManagement>標簽。
思考?子級工程自動繼承父級工程的jar包,可是,根據需要,有些子級工程不需要繼承父級的jar包,但是依舊繼承了,怎么處理?
2.1解決方案。父級xml 文件配置。
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.aaa</groupId> <artifactId>DemoSpringBoot</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>mapper</module> <module>model</module> <module>service</module> <module>web</module> </modules> <!-- 思考問題? model項目中用不到shiro,但是父子工程的規則也需要把shiro的jar加載進來,影響項目的進度和運行速度,如何解決? <denpencyManagement>標簽作用 1. 被<denpencyManagement>所控制的jar包,不會被子工程所繼承,如果子工程有需要,可以重寫父工程中的jar包,並且不需要攜帶版本號 2. 如果不省略版本號,則jar包會從maven中進行下載,並不再是從父工程中重寫的jar包 優點? 1.方便jar包管理,父子工程。 2.解決jar包冗余問題。層級依賴。 --> <dependencyManagement> <dependencies> <!-- mysql的驅動包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>1.9.21</version> </dependency> </dependencies> </dependencyManagement> </project>
2.2 子級想要繼承。以mapper為列。
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <parent> <artifactId>DemoSpringBoot</artifactId> <groupId>com.aaa</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>mapper</artifactId> <!-- 1. 子工程如果需要,重寫父級工程的jar包即可,但是不能 攜帶版本號 2.將父級工程中的jar包 直接復制過來,但是不可攜帶版本號。 --> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> </project>
三、實體類的定義規則
package com.aaa.entity; import java.io.Serializable; /* * * 從今天開始,所有的實體類必須按照以下標准 * 1.需要實現序列化接口 * 2.需要重寫hashCode和equalse * 3.需要重寫toString() * 4.必須有getter和setter方法 * 5.要求所有的類型全部為包裝類型,不能使用基本類型 * * * 注意: 2.需要重寫hashCode和equalse * * */ public class User implements Serializable { private Long id; private String username; private String password; private Integer age; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public boolean equals(Object object) { if (this == object) return true; if (object == null || getClass() != object.getClass()) return false; User user = (User) object; if (id != null ? !id.equals(user.id) : user.id != null) return false; if (username != null ? !username.equals(user.username) : user.username != null) return false; if (password != null ? !password.equals(user.password) : user.password != null) return false; return age != null ? age.equals(user.age) : user.age == null; } @Override public int hashCode() { int result = id != null ? id.hashCode() : 0; result = 31 * result + (username != null ? username.hashCode() : 0); result = 31 * result + (password != null ? password.hashCode() : 0); result = 31 * result + (age != null ? age.hashCode() : 0); return result; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", age=" + age + '}'; } }
注意: 2.需要重寫hashCode和equalse 確定的類型