Maven講義
Maven概述
Maven是什麼
Maven是一個由Apache基金會維護的項目構建工具。
項目構建是什麼
咱們將項目的代碼從源代碼到具體程序文件的過程稱爲代碼構建。
行爲包括:編譯、測試、運行、打包、部署的過程
Eclipse項目構建
Eclipse構建項目的過程圖示:
構建過程以下:
- 建立一個Web項目
- 在項目中編寫好源代碼和配置文件
- 對源代碼編譯生成class文件
- 經過Junit對代碼單元測試
- 將項目經過Eclipse工具放在Tomcat運行
- 將項目導出war,放在Tomcat運行
Maven構建項目
經過Maven構建工具能夠一條命令完成上面全部的操做:
- *clean,清除命令,做用清除已經編譯的class文件和war文件
- *compile,編譯命令,做用是將java文件編譯成class文件
- *package,打包命令,做用將class文件打成war包
- test,測試命令,做用執行Junit工具(能夠忽略)
- deploy,部署命令,將war包放在指定的tomcat(能夠忽略)
- *運行Tomcat,經過命令tomcat7:run (要加入Maven工具的Tomcat7插件)
- *install,安裝命令,一條命令包括了,clean complile package test
使用Maven的好處
- 使用命令,一鍵快速編譯部署
- 對項目的構建更加精細化,適合大型項目的構建
- Maven支持直接經過配置文件(POM)的配置下載依賴的包
- 各大開源社區強制使用Maven導包,意味着若是不學它,有不少的開源項目很差入門。
Maven的安裝
Maven說明
下載路徑:http://maven.apache.org/download.cgi
目錄說說明:
環境配置
第一步:肯定JAVA_HOME配置
前提:若是要在CMD命令行運行Maven,必需要配置JAVA_HOME環境變量
經過set命令
若是沒有配置JAVA_HOME環境會致使運行得到Java運行環境,異常以下:
第二步:配置MAVEN_HOME環境變量
第三步:指定Maven執行命令到當前目錄
配置執行目錄到PATH環境變量,讓命令能夠在當前目錄能夠執行
--變量Path變量
--成功增長結果變量:%MAVEN_HOME%\bin
第四步:測試配置,在CMD下鍵入mvn -h
若是返回參數提示以下圖,說明配置成功!
第五步:配置Maven國內源
因爲默認Maven使用國外的源,會致使下載jar比較慢。
配置Maven下conf文件夾的settings.xml文件
<mirrors>
<!-- mirror
| Specifies a repository mirror site to use instead of a given repository. The repository that
| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
|
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>
-->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
|
入門配置
需求:經過命令行,使用Maven項目建立一個Java項目,而且打包。
第一步:建立項目
使用mvn archetype:generate命令建立java項目
第二步:設置座標信息
設置座標信息,經過如下三個信息肯定座標。標記全球Maven項目的惟一性。
groupId:組織ID
artifactId:項目名
package:包名
--提示,建立成功
第三步:編譯項目
使用命令 mvn compile
--編譯成功,生成target文件夾
第四步:打包
經過命令mvn package
--打包成功,在target文件夾下會生成jar包
--經過該入門示例,能夠發現,使用Maven建立構建項目,是能夠不依賴任何開發工具的。
經過該入門示例,咱們看到了咱們須要學習的內容包括:Maven的命令、倉庫
問題:默認Maven倉庫在哪裏?
答:C:\Users\YL\.m2 ,在登陸用戶的我的文件夾裏面的.m2文件夾就是倉庫
問題:有什麼辦法瞭解更多的mvn的命令呢?
答:mvn下的命令都是一個插件,Maven工具內置的可使用的插件都在其官方幫助文檔找到說明。
https://maven.apache.org/plugins/index.html
Eclipse使用Maven
配置Maven
第一步:打開Eclipse首選項
第二步:配置外部Maven
配置指定外部的Maven
--選擇使用配置的外部的Maven
第三步:【可選】查看默認本機倉庫
經過Maven建立普通項目
第一步:建立一個Maven項目
第二步:建立一個自定義的Maven項目
第三步:設置項目構建信息
GroupId:組編號
ArtifactId:項目標識符(項目的項目名)
注意:Maven是經過GroupId和ArtifactId來肯定項目的惟一性,咱們稱爲座標。任何項目要發佈到Maven的庫中,必需要有一個全球惟一的座標。
Version:發佈的版本號
Packaging:打包方式。
- jar:以jar包方式打包,普通java項目
- war:以war包方式打包,是web項目
- pom:不打包,表示該項目是一個聚合項目。在多子項目的項目中,用於管理公用Maven構建屬性
Name:【能夠忽略】就是一個項目的一個名稱,實際實戰中,通常跟ArtifactID一致。
Description:【能夠忽略】就是項目的描述
--建立成功
第四步:建立一個簡單的HelloWorld類
package cn.zj;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
|
第五步:構建項目
注意:
- Maven build:用於執行Maven的命令
- Maven Clean:等同執行 mvn clean
- Maven generate-source:等同 mvn build
- Maven Intall:等同 mvn install 。同時執行,清除、編譯、測試、打包、並將包安裝到maven倉庫
--構建成功
經過Maven建立Web項目
第一步:建立一個Maven項目
--建立項目後,報錯信息。提示沒有web.xml
解決方案:
- .經過<failOnMissingWebXml>標籤忽略web.xml
- .建立一個web.xml文件
第二步:建立web.xml
- 建立一個在src/main/webapp下建立WEB-INF文件夾
--經過xsd規則文件建立
--建立成功後,報錯消失。!!!!
選中項目右鍵
第三步:建立一個index.jsp
發現,報錯。緣由是沒有加入JSP依賴的ServletAPI以及JSP的類庫。
第四步:經過POM.xml加入依賴的類庫
--依賴的類庫的jar的座標取哪裏找?
答:能夠在一下的公有倉庫找。
http://mvnrepository.com/
http://search.maven.org/
注意:之後咱們開發出來的功能組件但願讓別人經過Maven使用,也能夠提交到這兩個用於庫
<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>cn.zj</groupId>
<artifactId>maven-demo-02-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 增長web項目依賴的類庫 -->
<dependencies>
<!-- servlet api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<!-- jsp -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
|
注意事項,建立Maven項目是報異常,能夠強制更新項目
--右擊項目-->選擇Maven-->Update Project
--強制更新
第五步:經過Maven運行Tomcat啓動項目
-1.安裝tomcat7的Maven插件
全部的Maven工具內置插件都是有在https://maven.apache.org/plugins/index.html找到。
--安裝2.2 版本
 |
在pom.xml 配置配置tomcat插件
<!-- 構建項目的相關環境 -->
<build>
<plugins>
<!-- tomcat運行插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
|
使用Tomcat插件運行Maven項目
點擊項目鼠標右鍵
Maven下面Tomcat插件 項目細節配置
Tomvat 默認項目上下文路徑是項目名稱,默認端口是 8080
開發者能夠手動配置插件信息
<build>
<!-- 插件 -->
<plugins>
<!-- tomcat 插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!-- 細節配置 -->
<configuration>
<!-- 上下文路徑 -->
<path>/maven</path>
<!-- 端口配置 -->
<port>80</port>
</configuration>
</plugin>
</plugins>
</build>
|
修改jre 依賴版本
Maven 默認依賴的jar版本是 1.5,開發者能夠配置jre版本,有兩種配置方式
單獨爲某一個項目配置
<build>
<!-- 插件 -->
<plugins>
<!-- tomcat 插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!-- 細節配置 -->
<configuration>
<!-- 上下文路徑 -->
<path>/maven</path>
<!-- 端口配置 -->
<port>80</port>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- 源代碼版本 -->
<target>1.8</target>
<!-- 編譯後版本 -->
<source>1.8</source>
</configuration>
</plugin>
</plugins>
</build>
|
修改setting.xml配置文件
能夠修改 maven根/confg/setting.xml 在 <profiles> 標籤中添加以下代碼,使用此種方式全局生效
之後建立的項目所有都是1.8版本
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
|
經過Maven建立多個工程組成的項目
需求:使用Maven項目建立一個ssm整合的項目。項目的每一層爲一個工程。
第一步:建立Maven項目
注意:
- 表示層是WEB項目,其餘的都是功能組件,因此使用普通的Jar項目
- Parent項目是一個聚合項目,主要用於維護統一的包依賴,統一的插件,統一構建項目(測試、編譯、打包)
建立parent-項目
建立聚合項目的子模塊項目
最終效果
第二步:Eclipse實現項目分組
--分組後結果
第三步:聚合項目後的效果
--聚合全部須要構建的工程,能夠實現統一構建項目。所謂的統一構建項目,就是統一的執行清除、測試、編譯、打包等操做
--在聚合項目ssm-parent經過 <modules>實現聚合全部的須要統一構建的項目
--代碼
<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>cn.zj</groupId>
<artifactId>ssm-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<description>這是一個聚合項目,自己至於維護其它子項目的包關係插件等</description>
<!-- 經過引入模塊的形式,將項目的其餘模塊引入在一塊兒 -->
<modules>
<module>ssm-mapper</module>
<module>ssm-service</module>
<module>ssm-pojo</module>
<module>ssm-web</module>
<module>ssm-util</module>
</modules>
</project>
|
第四步:項目的繼承
注意:所謂的項目繼承,就是一個項目已經在pom.xml聲明的各類元素,繼承的子工程的pom.xml也得到該父工程的pom.xml全部聲明的元素。
前提:之前若是每一個工程須要使用Log4J和Junit,都要在各自的項目的pom.xml加入依賴。這樣作他麻煩了。
需求:在ssm-parent聲明一次依賴Log4J和Junit,其餘全部的子工程均可以使用。
第五步:依賴包的版本統一管理
需求:實現全部項目依賴的類庫的版本統一管理。
答:能夠經過屬性的設置與版本鎖定,使用依賴包的統一管理
<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>cn.zj.parent</groupId>
<artifactId>ssm-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<description>這是一個聚合項目,自己至於維護其它子項目的包關係插件等</description>
<!-- 經過屬性設置類庫版本 -->
<!-- 在properties標籤聲明的屬性,能夠在做用範圍內的pom.xml裏面使用${標籤名}訪問 -->
<properties>
<!-- 注意:pom裏面的屬性值,標籤名是自定義的,隨便寫,只有符合xml標籤規範 -->
<log4j.version>1.2.17</log4j.version>
<junit.version>4.12</junit.version>
<springmvc.version>4.3.16.RELEASE</springmvc.version>
</properties>
<!-- 聲明依賴 -->
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
<!-- 打包的時候須要一塊兒進去 -->
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<!-- Junit打包的時候是不能放在包裏面的 -->
<scope>test</scope>
</dependency>
</dependencies>
<!-- 指定能夠選擇的依賴庫的版本 -->
<!-- 放在dependencyManagement標籤裏面的依賴庫,並無被使用,只是聲明瞭,可選.版本鎖定
這個意味着,若是在做用範圍內(本pom.xml以及子pom.xml)裏面使用到dependencyManagement標籤
指定版本的類庫,必須在在指定版本
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springmvc.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 經過模塊的方式,將全部統一構建的項目聚合起來 -->
<modules>
<module>ssm-web</module>
<module>ssm-service</module>
<module>ssm-mapper</module>
<module>ssm-pojo</module>
<module>ssm-utils</module>
</modules>
</project>
|
<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>cn.zj.controller</groupId>
<artifactId>ssm-web</artifactId>
<packaging>war</packaging>
<!-- 繼承ssm parent項目 -->
<parent>
<groupId>cn.zj.parent</groupId>
<artifactId>ssm-parent</artifactId>
<!-- 注意:若是一個多工程的項目,繼承了統一的父項目,版本號以父項目爲準 -->
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
</dependencies>
</project>
|
依賴<scope>的範圍
Scope 聲明依賴包在哪一個階段有效
Compile(默認) spring,mybatis
編譯(compile)時須要 測試時須要,,運行時須要,打包時須要
Provided jsp-api.jar servlet-api.jar
編譯(compile)時須要,測試(test)時也須要 ,運行時不須要,打包時不須要
Runtime 數據庫驅動包
編譯時不須要,測試時須要,,運行時須要,打包時須要
Test junit.jar
編譯時不須要,測試時須要,運行時不須要,打包也不須要
|
第六步:在ssm-web工程配置SpringMVC框架
導入包依賴
--在ssm-parent對依賴包版本鎖定
<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>cn.zj.parent</groupId>
<artifactId>ssm-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<description>這是一個聚合項目,自己至於維護其它子項目的包關係插件等</description>
<!-- 經過屬性設置類庫版本 -->
<!-- 在properties標籤聲明的屬性,能夠在做用範圍內的pom.xml裏面使用${標籤名}訪問 -->
<properties>
<!-- 注意:pom裏面的屬性值,標籤名是自定義的,隨便寫,只有符合xml標籤規範 -->
<log4j.version>1.2.17</log4j.version>
<junit.version>4.12</junit.version>
<springmvc.version>4.3.16.RELEASE</springmvc.version>
<servlet-api.version>3.0.1</servlet-api.version>
<jsp.version>2.2.1</jsp.version>
</properties>
<!-- 聲明依賴 -->
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
<!-- 打包的時候須要一塊兒進去 -->
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<!-- Junit打包的時候是不能放在包裏面的 -->
<scope>test</scope>
</dependency>
</dependencies>
<!-- 指定能夠選擇的依賴庫的版本 -->
<!-- 放在dependencyManagement標籤裏面的依賴庫,並無被使用,只是聲明瞭,可選.版本鎖定 這個意味着,若是在做用範圍內(本pom.xml以及子pom.xml)裏面使用到dependencyManagement標籤
指定版本的類庫,必須在在指定版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springmvc.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>${jsp.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 設置構建是的jdk的版本 -->
<build>
<!-- 插件就是Maven命令 -->
<plugins>
<!-- 修改編譯插件的JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5</version>
<!-- 配置屬性 -->
<configuration>
<!-- 源代碼使用JDK1.8 -->
<source>1.8</source>
<!-- 生成的目標文件.class文件使用JDK1.8 -->
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<!-- 經過模塊的方式,將全部統一構建的項目聚合起來 -->
<modules>
<module>ssm-web</module>
<module>ssm-service</module>
<module>ssm-mapper</module>
<module>ssm-pojo</module>
<module>ssm-utils</module>
</modules>
</project>
|
--在ssm-web的pom.xml導入依賴包
<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>cn.zj.controller</groupId>
<artifactId>ssm-web</artifactId>
<packaging>war</packaging>
<!-- 繼承ssm parent項目 -->
<parent>
<groupId>cn.zj.parent</groupId>
<artifactId>ssm-parent</artifactId>
<!-- 注意:若是一個多工程的項目,繼承了統一的父項目,版本號以父項目爲準 -->
<version>0.0.1-SNAPSHOT</version>
<!-- 指定父工廠的pom.xml相對本pom.xml的相對路徑 -->
</parent>
<!-- 增長依賴包 -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- servlet api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!-- jsp -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
</dependency>
</dependencies>
<!-- 運行tocmat7插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
</project>
|
建立一個請求頁面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath }/user/add.do">add</a>
</body>
</html>
|
編寫web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<!-- 配置SpringMVC的前端控制器(總控) -->
<servlet>
<servlet-name>MVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 讀取Spring相關配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 由於spring相關配置文件可能有多個,全部使用*號通配符所有掃描 -->
<param-value>classpath:applicationContext*.xml</param-value>
</init-param>
<!-- 初始化容器 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
|
編寫配置文件spring-mvc.xml
<!-- 配置包掃描 -->
<context:component-scan base-package="cn.zj.ssm"/>
<!-- 開啓註解驅動 -->
<mvc:annotation-driven />
<!-- 配置視圖解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置視圖跳轉的前綴 -->
<property name="prefix" value="/WEB-INF/views/" />
<!-- 配置視圖跳轉的後綴 -->
<property name="suffix" value=".jsp" />
</bean>
|
編寫Controller組件類
package cn.zj.controller;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@Scope(value="request")
@RequestMapping(value="/user")
public class StudentController {
@RequestMapping(value="/add")
public void add(){
System.out.println("-增長用戶-");
}
}
|
第七步:在ssm-mapper工程配置Mybatis框架
導入包依賴
--ssm-mapper項目導入依賴
<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>cn.zj.mapper</groupId>
<artifactId>ssm-mapper</artifactId>
<parent>
<groupId>cn.zj.parent</groupId>
<artifactId>ssm-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<!-- jdbc driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<!-- ssm-mapper項目依賴ssm-pojo項目 -->
<dependency>
<groupId>cn.zj.pojo</groupId>
<artifactId>ssm-pojo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- dbcp -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency>
</dependencies>
</project>
|
建立操做映射註解
--建立一個操做接口,編寫一個插入數據的SQL語句
package cn.zj.mapper;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import cn.zj.pojo.User;
public interface StudentMapper {
@Insert(value="INSERT INTO t_user (name, phone, email) VALUES (#{name}, #{phone}, #{email})")
//操做後,實體對象須要ID,使用ID回填
@Options(useGeneratedKeys=true,keyProperty="id",keyColumn="id")
int insert(User user);
}
|
編寫mybatis-config.xml配置文件
在test/resources建立mybatis-config.xml配置文件
--配置文件代碼
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/sms"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<!-- 加載映射接口 -->
<mappers>
<mapper class="cn.zj.mapper.UserMapper"/>
</mappers>
</configuration>
|
測試代碼
package cn.zj.test;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import cn.zj.mapper.UserMapper;
import cn.zj.pojo.User;
public class UserMapperTest {
@Test
public void insert(){
try {
//1.得到配置文件
Reader reader = Resources.getResourceAsReader("mybaits-config.xml");
//2.經過SqlSessionFactoryBuilder得到SqlSessionFactory對象
SqlSessionFactoryBuilder build=new SqlSessionFactoryBuilder();
//得到會話工廠
SqlSessionFactory sessionFactory = build.build(reader);
//得到會話
SqlSession session = sessionFactory.openSession();
//得到操做接口的動態對象
UserMapper mapper = session.getMapper(UserMapper.class);
User user=new User();
user.setName("王五");
int count = mapper.insert(user);
System.out.println(count);
//提交
session.commit();
session.close();
System.out.println(user.getStuId());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
|
第八步:整合SpringMVC與Mybatis
配置支持支持${key}得到Properties文件值
<!-- 讀取db.properties數據庫配置文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置Druid鏈接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<!-- setter方法注入屬性值 -->
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- 最大鏈接數 -->
<property name="maxActive" value="${jdbc.maxActive}" />
</bean>
|
整合Mybatis
<!-- 配置MyBatis的 SqlSessionFactory對象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 1. 注入數據源:鏈接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 2.使用包掃描配置別名 -->
<property name="typeAliasesPackage" value="cn.zj.ssm.pojo"/>
<!-- 3.引入MyBatis配置文件 mybatis-confg.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- 4.配置映射文件 -->
<property name="mapperLocations" value="classpath:cn/zj/ssm/dao/*Mapper.xml"></property>
</bean>
<!-- 使用包掃描配置Mapper接口對應的代理對象
對應包下面的全部的接口所有會被建立代理對象, 默認都是 接口名的首字母小寫 做爲 名稱 UserMapper->userMapper
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 配置SqlSessionfactory的bean對應的名稱(不是對象) -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 配置須要掃描建立代理對象的包 -->
<property name="basePackage" value="cn.zj.ssm.dao"/>
</bean>
|
配置事物管理器
<!-- 配置MyBatis事物管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 1. 注入數據源:鏈接池 -->
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置事務 通知(加強) tx -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<!-- 配置事務方法 -->
<tx:attributes>
<tx:method name="find*" read-only="true"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="query*" read-only="true"/>
<tx:method name="select*" read-only="true"/>
<tx:method name="list*" read-only="true"/>
<!-- 須要事務的方法 -->
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 使用aop切事務 -->
<aop:config>
<!-- 配置切入點 -->
<aop:pointcut expression="execution (* cn.zj.ssm.service..*.*(..))" id="pt"/>
<!-- 配置切面 = 切入點+ 通知 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
<!-- 織入: spring完成 -->
</aop:config>
|
常見問題
問題1:已經下載到本地倉庫的jar。Eclipse如何快速加入到Pom.xml文件裏面
答:進入POM.xml對應的標籤位置,右擊選擇增長依賴或者插件。
--選擇增長的依賴
--選擇須要的依賴
問題2:本地明明已經下載了對應的插件或者jar包。但Eclipse工具搜索不出來.
答:緣由是緩衝問題。能夠清一下倉庫索引,操做步驟
--打開Maven倉庫管理窗口
--刷新索引緩存
問題3:如何設置默認的JDK版本
<!-- 設置構建是的jdk的版本 -->
<build>
<!-- 插件就是Maven命令 -->
<plugins>
<!-- 修改編譯插件的JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5</version>
<!-- 配置屬性 -->
<configuration>
<!-- 源代碼使用JDK1.8 -->
<source>1.8</source>
<!-- 生成的目標文件.class文件使用JDK1.8 -->
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
|
問題4:設置打包安裝跳過Junit的測試
<!-- 跳過測試代碼 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
|
小結
Maven是什麼?
Maven是一個項目構建工具
- 編譯--測試-打包-安裝 徹底使用Maven便可完成
- Maven徹底負責項目依賴包管理
- Maven內置集成Tomcat插件
Maven相對手動構建項目優點
- Maven有依賴倉庫,基本上擁有市面上全部的jar包
- 更加方便jar包版本管理
- 互聯網各大開源的項目基本都是使用Maven項目構建
- 後面會講解SpringBoot(必須使用Maven)
目前項目構建工具除了 Maven,還有一個項目構建工具Gradle