maven
一、 Maven 概念
1 什么是 Maven
mvnrepository.com
Maven 使用项目对象模型(POM)的概念,可以通过一小段描述信息来管理项目的构建,
报告和文档的软件项目管理工具。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的
缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项
目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发布时使用 Maven,而且
公司项目采用 Maven 的比例在持续增长。
2 Maven 和 ANT 的区别
Ant 是软件构建工具,Maven 的定位是软件项目管理和理解工具。Maven 除了具备 Ant
的功能外,还增加了以下主要的功能:
1)使用 Project Object Model 来对软件项目管理;
2)内置了更多的隐式规则,使得构建文件更加简单;
3)内置依赖管理和 Repository 来实现依赖的管理和统一存储;
4)内置了软件构建的生命周期;
目前,绝大多数开发人员都把 Ant 当作 Java 编程项目的标准构建工具。遗憾的是,
Ant 的项目管理工具(作为 make 的替代工具)不能满足绝大多数开发人员的需要。通过检
查 Ant 构建文件,很难发现项目的相关性信息和其它信息(如开发人员/拥有者、版本或站
点主页)。
二、 Maven 的下载与 IDE 的整合
1 下载地址
http://maven.apache.org/
2 Maven 的目录结构
3 Eclipse 整合 Maven
3.1整合步骤
3.2指定 maven 的配置文件
4 Maven 仓库与配置
4.1Maven 仓库是什么
4.1.1Maven 仓库
Maven 仓库是基于简单文件系统存储的,集中化管理 Java API 资源(构件)的一个服
务。仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存
储路径。得益于 Maven 的坐标机制,任何 Maven 项目使用任何一个构件的方式都是完全
相同的,Maven 可以在某个位置统一存储所有的 Maven 项目共享的构件,这个统一的位
置就是仓库,项目构建完毕后生成的构件也可以安装或者部署到仓库中,供其它项目使用。
对于 Maven 来说,仓库分为两类:本地仓库和远程仓库。
4.1.2远程仓库
远程仓库指通过各种协议如 file://和 http://访问的其它类型的仓库。这些仓库可能是第
三方搭建的真实的远程仓库,用来提供他们的构件下载(例如 repo.maven.apache.org 和
uk.maven.org 是 Maven 的中央仓库)。其它“远程”仓库可能是你的公司拥有的建立在文件
或 HTTP 服务器上的内部仓库,用来在开发团队间共享私有构件和管理发布的。
4.1.3本地仓库
本地仓库指本机的一份拷贝,用来缓存远程下载,包含你尚未发布的临时构件。
5 仓库配置
5.1在 settings.xml 文件中配置本地仓库
本地仓库是开发者本地电脑中的一个目录,用于缓存从远程仓库下载的构件。默认的本
地仓库是${user.home}/.m2/repository。用户可使用 settings.xml 文件修改本地仓库。具体内容
如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!-- 本地仓库配置 -->
<localRepository>/put/your/local/repository/here</localRepository>
<!-- 省略,具体信息参考后续内容。 -->
</settings>
5.2在 settings.xml 文件中配置镜像仓库
如果仓库 A 可以提供仓库 B 存储的所有内容,那么就可以认为 A 是 B 的一个镜像。例
如:在国内直接连接中央仓库下载依赖,由于一些特殊原因下载速度非常慢。这时,我们可
以使用阿里云提供的镜像 http://maven.aliyun.com/nexus/content/groups/public/来替换中央仓
库 http://repol.maven.org/maven2/。修改 maven 的 setting.xml 文件,具体内容如下:
<mirror>
<!-- 指定镜像 ID -->
<id>nexus-aliyun</id>
<!-- 匹配中央仓库。-->
<mirrorOf>central</mirrorOf>
<!-- 指定镜像名称 -->
<name>Nexus aliyun</name>
<!-- 指定镜像路径 -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
6 仓库优先级问题
本地仓库,镜像仓库,中央仓库。
镜像仓库=中央仓库。 镜像仓库是用于替代中央仓库的。
仓库访问优先级:
6.1本地仓库
第一访问本地仓库。
6.2指定仓库
如果本地仓库不存在对应信息,访问配置文件中指定的远程仓库。
这个远程仓库是第二优先级。
6.3远程仓库
6.3.1镜像仓库
镜像仓库是 Maven 开发过程中的首选远程仓库,在本地仓库和指定仓库无法获取资源
的时候,直接访问镜像仓库。
6.3.2中央仓库
如果镜像仓库不是中央仓库,则会在访问镜像仓库无法获取资源后,访问中央仓库。
三、 Maven 工程
1 Maven 的工程类型
1.1POM 工程
POM 工程是逻辑工程。用在父级工程或聚合工程中。用来做 jar 包的版本控制。
1.2JAR 工程
将会打包成 jar 用作 jar 包使用。即常见的本地工程 - Java Project。
1.3WAR 工程
将会打包成 war,发布在服务器上的工程。如网站或服务。即常见的网络工程 - Dynamic
Web Project。war 工程默认没有 WEB-INF 目录及 web.xml 配置文件,IDE 通常会显示工程
错误,提供完整工程结构可以解决。
2 创建 Maven 项目
2.1创建步骤
2.1.1New--> other -->Maven Project
2.1.2勾选,创建纯净项目,不应用任何模版
2.2填写项目信息
2.2.1 Group Id 公司域名倒写
2.2.2 Artifact Id 项目名
2.2.3 Version 版本名
2.2.4 Packaging 项目类型
2.2.4.1 Jar java 项目
2.2.4.2 War : web 项目
2.2.4.3 POM: 父项目.如果项目有子项目,项目必须是 pom
2.2.5 Name : 自定义名称,内容任意
2.2.6 Description: 描述.详细描述.
2.2.7 Parent Project: 如果当前项目有父项目时填写
2.3Maven 项目结构
src/main/java 这个目录下储存 java 源代码
src/main/resources 储存主要的资源文件。比如spring的xml配置文件和log4j的properties文件。
src/test/java 储存测试用的类,比如 JUNIT 的测试一般就放在这个目录下面
src/test/resources 储存测试用的资源文件
src 包含了项目所有的源代码和资源文件,以及其他项目相关的文件。
target 编译后内容放置的文件夹
pom.xml 是 Maven 的基础配置文件。配置项目和项目之间关系,包括配置依赖关系等等
3 工程关系
3.1依赖
即 A 工程开发或运行过程中需要 B 工程提供支持,则代表 A 工程依赖 B 工程。在这种
情况下,需要在 pom.xml 文件中增加下属配置定义依赖关系。
<dependencies> <!-- 定义一个具体的依赖 --> <dependency> <!-- 依赖的工程所在组名 --> <groupId>groupName</groupId> <!-- 依赖的工程名 --> <artifactId>artifactName</artifactId> <!-- 依赖的工程版本 --> <version>versionNo</version> <scope>system</scope> </dependency> </dependencies>
3.2继承
如果 A 工程继承 B 工程,则代表 A 工程默认依赖 B 工程依赖的所有资源,且可以应用
B 工程中定义的所有资源信息。被继承的工程(B 工程)只能是 POM 工程。
3.2.1父工程配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan ce" 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.bjsxt</groupId> <artifactId>03parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <properties> <junit-version>4.1</junit-version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit-version}</version> </dependency> </dependencies> </dependencyManagement> </project>
3.2.2子工程配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan ce" 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> <parent> <groupId>com.bjsxt</groupId> <artifactId>03parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.bjsxt</groupId> <artifactId>04son</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> </project>
3.3聚合
当我们开发的工程拥有 2 个以上模块的时候,每个模块都是一个独立的功能集合。比如
某大学系统中拥有搜索平台,学习平台,考试平台等。开发的时候每个平台都可以独立编译,
测试,运行。这个时候我们就需要一个聚合工程。
在创建聚合工程的过程中,总的工程必须是一个 POM 工程(Maven Project),各子模
块可以是任意类型模块(Maven Module)。所有聚合工程和聚合模块必须处于同一个组
(groupId)中,且聚合工程可以嵌套。
3.3.1创建聚合项目
3.3.2创建模块
3.3.3聚合项目的 POM 文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan ce" 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.bjsxt</groupId> <artifactId>05maven-manager</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>05maven-sub1</module> <module>06maven-sub2</module> </modules> </project>
<dependencyManagement></dependencyManagement>
dependencyManagement
的作用:依赖版本管理器
- 本身并不下载任何依赖,只是管理依赖的版本。依赖的下载依然需要单独的
<dependencies>
(不加dependencyManagement
,额外写一个)去做 - 如果
<dependencies>
中的<dependency>
没有声明版本号(version
),maven会去寻找有无对应的dependencyManagement
,当前工程没有就会向上找父工程。如果找到就以dependencyManagement
中对应依赖声明的version
为准,否则报错version is missing。
4 创建 war 类型项目
四、 Maven 中的常见插件
1 编译器插件
1.1pom.xml 配置片段
<build> <plugins> <!-- java 编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
1.2settings.xml 文件中配置全局编译器插件
<profile> <!-- 定义的编译器插件 ID,全局唯一 --> <id>jdk-1.7</id> <!-- 插件标记,activeByDefault 默认编译器,jdk 提供编译器版本 --> <activation> <activeByDefault>true</activeByDefault> <jdk>1.7</jdk> </activation> <!-- 配置信息 source-源信息,target-字节码信息,compilerVersion-编译过程版 本 --> <properties> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion> </properties> </profile>
2 Tomcat 管理插件
2.1本地应用
使用 Tomcat 插件发布部署并执行 war 工程的时候,使用 maven build 功能实现。应用启
动命令为: tomcat7:run。命令中的 tomcat7 是插件命名,由插件提供商决定。run 为插件中
的具体功能。具体 pom.xml 文件的配置如下
<build> <plugins> <!-- 配置 Tomcat 插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> </plugins> </build>
2.2远程热部署
远程热部署是指,在 Tomcat 容器运行过程中,动态实现 war 工程的部署,重新部署功
能。使用 maven build 功能实现,具体命令为:tomcat7:deploy 或 tomcat7:redeploy。其中 deploy
代表第一次部署 war 工程;redeploy 代表 Tomcat 容器中已有同名应用,本次操作为重新部
署同名 war 工程。
实现热部署需要远程访问 Tomcat 容器,所以 Tomcat 容器需要提供合适的访问方式和验
证方式。
实现热部署,需要访问 Tomcat 容器提供的原始应用 manager,并提供有效有权限的访
问用户,所以在 Tomcat 中也需提供部分配置。具体配置内容如下:
2.2.1Tomcat 中的 conf/tomcat-users.xml 文件的配置
<role rolename="manager-gui"/> <role rolename="manager-script"/> <user username="tomcatUsername" password="tomcatPassword" roles="manager-gui,manager-script"/>
2.2.2pom.xml 文件中的配置
<build> <plugins> <!-- 配置 Tomcat 插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!-- path: 上传的 war 包解压后的路径命名 --> <path>/ROOT</path> <!-- url : 上传 war 包到什么位置,除 IP 和端口可以修改外其他不变 --> <url>http://ip:port/manager/text</url> <!-- 为 tomcat 配置的管理用户名和密码. --> <username>tomcatUsername</username> <password>tomcatPassword</password> </configuration> </plugin> </plugins> </build>
<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</groupId> <artifactId>09maven-tomcatplugin</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build> <plugins> <!-- 配置 Tomcat 插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!-- path: 上传的 war 包解压后的路径命名 --> <path>/</path> <!-- url : 上传 war 包到什么位置,除 IP 和端口可以修改外其他不变 --> <url>http://192.168.43.62:8080/manager/text</url> <!-- 为 tomcat 配置的管理用0户名和密码. --> <username>root</username> <password>root</password> </configuration> </plugin> </plugins> </build> </project>
3 资源拷贝插件
Maven 在打包时默认只将 src/main/resources 里的配置文件拷贝到项目中并做打包处理,
而非 resource 目录下的配置文件在打包时不会添加到项目中。
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include><include>**/*.properties</include> </includes> </resource> </resources> </build>
两个插件实现了部署Jar项目只需要执行Jar就好了,而且这种方式不像SpringBoot把所有依赖全部放入Jar包中生成的Jar较大,代码修改上传耗时。如果程序需不需要修改依赖Jar,我们只需要上传我们自己写的Jar就好了就几M。
五、 Maven 常用命令
1 install
本地安装, 包含编译,打包,安装到本地仓库
编译 - javac
打包 - jar, 将 java 代码打包为 jar 文件
安装到本地仓库 - 将打包的 jar 文件,保存到本地仓库目录中。
2 clean
清除已编译信息。
删除工程中的 target 目录。
3 compile
只编译。 javac 命令
4 deploy
部署。 常见于结合私服使用的命令。
相当于是 install+上传 jar 到私服。
包含编译,打包,安装到本地仓库,上传到私服仓库。
5 package
打包。 包含编译,打包两个功能。
六、 私服
1 什么是私服
私服是一种特殊的远程仓库,它是架设在局域网的仓库服务,私服代理广域网上的远程
仓库,供局域网使用。
在企业开发中,私服的建设是有必要的,其好处如下:
1.1节省资金、外网带宽
利用私服代理外部仓库之后,对外的重复构件下载便得以简化,降低外网带宽压力。
1.2加速 Maven 构建
不停地连接请求外部仓库是相当耗时的,但是 maven 的一些内部机制(如快照更新检
查)要求 Maven 在执行构建的时候不停地检查远程仓库数据。因此,当项目配置了很多外
部远程仓库的时候,构建速度会降低。使用私服解决这问题,因为 Maven 只需要检查局域
网内私服的数据时,构建速度便有明显提高。
1.3部署第三方构件
当某个构件无法从任何一个远程仓库获取怎么办?比如 Oracle 的 JDBC 驱动由于版权
原因不能发布到公共仓库中。建立私服后,便可以将这些构件部署到这个内部仓库中,供内
部 Maven 项目使用。
1.4提高稳定性,增强控制
对于远程仓库来说,当外网不可用时,Maven 构建有可能因为依赖没有下载而不可行,
搭建并应用私服后,即使没有外网,如果该构件之前被其它人下载过就会存在私服上,此时
再次依赖该构件就可以不用连接外网直接就可以从私服上下载到。同时私服软件(nexus)还
提供了额外的管理功能。
1.5降低中央仓库的负荷
中央仓库是有限的。如果所有的 Maven 工程开发过程中,都通过中央仓库实现构件的
依赖和管理,那么中央仓库的负荷过高,也会严重影响工程构建的效率。如果使用私服,可
以分散中央仓库的负荷,只有在私服中没有需要依赖的构件时才会去连接中央仓库。
2 nexus 私服搭建
2.1搭建环境
环境:CentOS6.5、JDK7、Sonatype Nexus、Maven(Eclipse 或 MyEclipse)
2.2搭建步骤
2.2.1安装 JDK
2.2.1.1 JDK 资源包下载
JDK 官方下载地址为:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
本课程使用版本为 JDK1.7。(jdk-7u80-linux-x64.tar.gz)
2.2.1.2 JDK 资源包解压
在 Linux 中安装应用的常用目录为:/opt 或/usr/local 目录。本课件将 JDK 安装到
/usr/local/java 目录中。
解压 JDK 到指定目录:
tar -zxvf jdk-7u80-linux-x64.tar.gz -C /usr/local
重命名 JDK 目录:
mv /usr/local/jdk1.7.0_80 /usr/local/java
2.2.1.3 环境变量配置
修改/etc/profile 配置文件,增加环境变量配置
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
环境变量修改后,可以重启 Linux 实现永久生效;或执行 source /etc/profile 命令,让新
修改的环境变量在当前终端中生效。
2.2.2安装私服 Nexus
2.2.2.1 Nexus 资源包下载
Nexus 官方下载地址为:
https://www.sonatype.com/nexus-repository-oss
本课件应用版本为:nexus-2.11.2-03
2.2.2.2 Nexus 资源包解压
在/usr/local 目录中创建子目录 nexus:
mkdir /usr/local/nexus
解压 Nexus 到指定目录:
tar -zxvf nexus-2.11.2-03-bundle.tar.gz -C /usr/local/nexus
Nexus 压缩包中包含两个子目录: nexus-2.11.2-03 和 sonatype-work
nexus-2.11.2-03 是具体的私服应用内容,sonatype-work 是 Nexus 私服下载的构件存放工
作目录。
2.2.2.3 检查私服端口和工作目录
在 nexus-2.11.2-03 目录中有子目录 conf,其中保存私服应用的配置信息。查看
nexus.properties 文件,确定私服访问端口和工作目录。此操作可不做任何内容修改。配置文
件内容如下:
# Jetty section,Nexus 私服应用是使用 Jetty 提供 web 服务的,下述内容为 Jetty 配置。 application-port=8081 # 私服访问端口 application-host=0.0.0.0 nexus-webapp=${bundleBasedir}/nexus # Nexus 私服 WEB 应用所在位置 nexus-webapp-context-path=/nexus # Nexus 私服 WEB 应用 contextPath
# Nexus section Nexus 私服配置信息
nexus-work=${bundleBasedir}/../sonatype-work/nexus # 私服工作目录,即构件保存目
录
runtime=${bundleBasedir}/nexus/WEB-INF # 私服 WEB 应用运行目录
2.2.2.4 修改 Nexus 运行用户
Nexus 私服在启动后,私服应用需要访问 Linux 的文件系统,所以需要有足够的权限。
Nexus 的启动脚本文件中,可以指定私服应用的访问用户,此信息在 nexus-2.11.2-03/bin/nexus
脚本文件中定义。需要修改的信息如下:
# NOTE - This will set the user which is used to run the Wrapper as well as # the JVM and is not useful in situations where a privileged resource or # port needs to be allocated prior to the user being changed. #RUN_AS_USER= #原内容 RUN_AS_USER=root #修改后的内容,代表 Nexus 私服使用 root 用户权限。
2.2.2.5 修改防火墙,开放 Nexus 私服端口访问
修改防火墙配置文件,开放 Nexus 私服的访问端口 8081(2.2.2.3 章节内容)。
vi /etc/sysconfig/iptables
增加下述内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT
重新启动防火墙:
service iptables restart
2.2.2.6 启动并测试访问
启动 Nexus 私服:
/usr/local/nexus/nexus-2.11.2-03/bin/nexus start
成功启动后,控制台输出内容如下:
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Starting Nexus OSS...
Started Nexus OSS.
可通过命令检查私服运行状态:
/usr/local/nexus/nexus-2.11.2-03/bin/nexus status
内容如下为私服运行中:
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Nexus OSS is running (3883).
内容如下为私服未运行:
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Nexus OSS is not running.
也可使用浏览器访问 Nexus 私服 WEB 应用, 访问地址为:
http://ip:8081/nexus (ip 为 Nexus 所在系统的访问 IP),访问效果如下:
3 私服配置
3.1登录
Nexus 默认提供管理用户,用户名为 admin,密码为 admin123。
3.2仓库管理
3.2.1检查仓库
3.2.2仓库类型简述
常用仓库类型为:hosted 和 proxy。
3.2.2.1 group
仓库组:Nexus 通过仓库组来统一管理多个仓库,这样访问仓库组就相当于访问仓库组
管理的多个仓库。
3.2.2.2 hosted
宿主仓库:主要用于发布内部项目构件或第三方的项目构件(如购买商业的构件)以及
无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)。
3.2.2.2.1releases
发布内部的 releases 模块的仓库,所有非快照版本工程都发布到此仓库中。
3.2.2.2.2snapshots
发布内部的快照模块的仓库,所有工程版本以 SNAPSHOT 结尾的都发布到此仓库中。
3.2.2.2.33rd party
第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去
3.2.2.3 proxy
代理仓库:代理公共的远程仓库。
3.2.2.4 virtual
虚拟仓库:用于适配 Maven 1。
3.2.3代理仓库配置
设置 proxy 代理仓库(Apache Snapshots/Central/Codehaus Snapshots)准许远程下载。
4 私服应用
要在 Maven 工程中使用私服,需要提供私服配置信息。
4.1settings.xml 文件
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <localRepository>D:/repositories</localRepository> <!--Maven 是否需要和用户交互以获得输入。如果 Maven 需要和用户交互以获得输入,则设置成 true, 反之则应为 false。默认为 true。--> <interactiveMode>true</interactiveMode> <!--表示 Maven 是否需要在离线模式下运行。如果构建系统需要在离线模式下运行,则为 true,默认 为 false。 --> <offline>false</offline> <!--当插件的组织 Id(groupId)没有显式提供时,供搜寻插件组织 Id(groupId)的列表。该元素 包含一个 pluginGroup 元素列表,每个子元素包含了一个组织 Id(groupId)。当我们使用某个插件, 并且没有在命令行为其提供组织 Id(groupId)的时候,Maven 就会使用该列表。 <pluginGroups> <pluginGroup>org.mortbay.jetty</pluginGroup> <pluginGroup>org.jenkins-ci.tools</pluginGroup> </pluginGroups> <proxies> </proxies> <!--配置服务端的一些设置。一些设置如安全证书不应该和 pom.xml 一起分发。这种类型的信息应该存 在于构建服务器上的 settings.xml 文件中。--> <servers> <server> <!-- server 的 id 必须和 pom.xml 文件中的仓库 id 一致 --> <!--这是 server 的 id(注意不是用户登陆的 id),该 id 与 distributionManagement 中 repository 元素的 id 相匹配。--> <id>nexus-releases</id> <username>deployment</username> <password>deployment123</password> </server> <server> <id>nexus-snapshots</id> <username>deployment</username> <password>deployment123</password> </server> </servers> <!--根据环境参数来调整构建配置的列表。--> <profiles> <profile> <id>jdk-1.7</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.7</jdk> </activation> <properties> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion> </properties> </profile> <profile> <id>sxt</id> <activation> <activeByDefault>false</activeByDefault> <jdk>1.7</jdk> </activation> <repositories> <!-- 私有库配置 --> <repository> <!-- 私有库 id --> <id>nexus</id> <!-- 私有库地址 --> <url>http://192.168.120.158:8081/nexus/content/groups/public/</url> <!-- 私有库是否支持 releases 版本 --> <releases> <enabled>true</enabled> </releases> <!-- 私有库是否支持 snapshots 版本 --> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <!-- 插件库配置,具体含义私有库配置 --> <pluginRepository> <id>nexus</id> <url>http://192.168.120.158:8081/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> </profile> </profiles> <!-- 激活 profile --> <activeProfiles> <!-- 根据 profile 的 id 标签值激活指定的内容 --> <activeProfile>sxt</activeProfile> </activeProfiles> </settings>
4.2pom.xml 文件
在顶级的 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>group</groupId> <artifactId>project</artifactId> <version>1.0</version> <distributionManagement> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://192.168.120.158:8081/nexus/content/repositories/releases/</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshot Repository</name> <url>http://192.168.120.158:8081/nexus/content/repositories/snapshots/</url> </snapshotRepository> </distributionManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.2</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
4.3发布本地工程到私服
在 Maven 工程的 maven build 中,输入命令 deploy,即可实现发布工程信息到私服。
如果同版本工程可能多次发布,需要修改 Nexus 配置。
4.4发布三方插件到私服
七、 Maven 实战
1 需求分析
基于 SSM 框架的 CRUD 案例
2 技术选型
框架:SpringMVC+Spring+Mybatis
数据库:MySQL
项目构建工具:Maven
3 项目架构设计
3.1传统项目设计方式
3.2Maven 项目设计方式
4 创建工程
4.1创建 Parent 工程
4.2修改 POM 文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan ce" 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.bjsxt</groupId> <artifactId>11parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <properties> <junit.version>4.12</junit.version> <spring.version>4.1.3.RELEASE</spring.version> <mybatis.version>3.2.8</mybatis.version> <mybatis.spring.version>1.2.2</mybatis.spring.v ersion> <mysql.version>5.1.32</mysql.version> <slf4j.version>1.6.4</slf4j.version> <druid.version>1.0.9</druid.version> <jstl.version>1.2</jstl.version> <servlet-api.version>2.5</servlet-api.version> <jsp-api.version>2.0</jsp-api.version> <tomcat.version>2.2</tomcat.version> </properties> <!-- jar 包的依赖注入 ,由于该工程是一个父工程, 所以 jar 包在该 pom 文件中只是声明--> <dependencyManagement> <dependencies> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <!-- 日志处理 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis.spring.version}</version> </dependency> <!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- 连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <!-- JSP 相关 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servlet-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <version>${jsp-api.version}</version> <scope>provided</scope> </dependency> </dependencies> </dependencyManagement> <!-- 插件的开启 --> <build> <!-- tomcat 插件,由于子项目不一定每个都是 web 项目,所以该插件只是声明,并未开启 --> <pluginManagement> <plugins> <!-- 配置 Tomcat 插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>${tomcat.version}</version> </plugin> </plugins> </pluginManagement> <!-- maven 的编译器插件,该插件主要是决定了当前 项目所使用 jre 版本 。由于无论是 jar,还是 war 项目都需要 制定 jar 的版本,所以该插件不需要生命,应当是开启的。--> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> </project>
4.3创建聚合工程 Manager
4.3.1创建 manager-pojo
4.3.2创建 manager-mapper
4.3.3修改 manager-mapper 的 pom 文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan ce" xsi:schemaLocation="http://maven.apache.org/P OM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.bjsxt</groupId> <artifactId>12manager</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>manager-mapper</artifactId> <dependencies> <dependency> <groupId>com.bjsxt</groupId> <artifactId>manager-pojo</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> </dependency> <!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- 连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> </dependencies> </project>
4.3.4创建 manager-service
4.3.5修改 manager-service 的 pom 文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan ce" 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> <parent> <groupId>com.bjsxt</groupId> <artifactId>12manager</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>manager-service</artifactId> <dependencies> <dependency> <groupId>com.bjsxt</groupId> <artifactId>manager-mapper</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> </dependencies> </project>
4.3.6创建 manager-controller
4.3.7修改 manager-controller 的 pom 文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan ce" 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> <parent> <groupId>com.bjsxt</groupId> <artifactId>12manager</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>manager-controller</artifactId> <packaging>war</packaging> <dependencies> <dependency> <groupId>com.bjsxt</groupId> <artifactId>manager-service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- JSP 相关 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifactId> <scope>provided</scope> </dependency> </dependencies> </project>
4.4在数据库中创建 users 表
CREATE TABLE `users` ( `userid` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(30) DEFAULT NULL, `userage` int(11) DEFAULT NULL, PRIMARY KEY (`userid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.5框架整合
4.5.1数据库配置文件
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm?ch aracterEncoding=utf-8 jdbc.username=root jdbc.password=root
4.5.2Mybatis 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置分页插件 -->
</configuration>
4.5.3applicationContext-dao.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans " xmlns:xsi="http://www.w3.org/2001/XMLSchema-i nstance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org /schema/context" xmlns:mvc="http://www.springframework.org/sch ema/mvc" xsi:schemaLocation="http://www.springframewor k.org/schema/beans http://www.springframework.org/schema/beans/spring -beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-m vc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spri ng-context.xsd"> <!-- 配置解析 properties 文件的工具类 --> <context:property-placeholder location="classpath:resource/*.properties"/> <!-- 配置数据源 dataSource --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="driverClassName" value="${jdbc.driver}" /> <property name="maxActive" value="10" /> <property name="minIdle" value="5" /> </bean> <!-- 创建 mybatis 的上下文对象 --> <bean class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="configLocation"> <value>classpath:mybatis/SqlMapperClient.xml</v alue> </property> </bean> <!-- 扫描 mybatis 的接口与映射配置文件 --> <bean class="org.mybatis.spring.mapper.MapperScannerConf igurer"> <property name="basePackage" value="com.bjsxt.mapper"/> </bean> </beans>
4.5.4applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans " xmlns:xsi="http://www.w3.org/2001/XMLSchema-i nstance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org /schema/context" xmlns:mvc="http://www.springframework.org/sch ema/mvc" xsi:schemaLocation="http://www.springframewor k.org/schema/beans http://www.springframework.org/schema/beans/spring -beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-m vc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spri ng-context.xsd"> <!-- 扫描 bean 对象 --> <context:component-scan base-package="com.bjsxt.service"/> </beans>
4.5.5applicationContext-trans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans " xmlns:context="http://www.springframework.org /schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/sch ema/aop" xmlns:tx="http://www.springframework.org/schema/tx " xmlns:xsi="http://www.w3.org/2001/XMLSchema-i nstance" xsi:schemaLocation="http://www.springframewor k.org/schema/beans http://www.springframework.org/schema/beans/spring -beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spri ng-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-a op-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx -4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/springutil-4.0.xsd"> <!-- 配置事物管理器的切面 --> <bean id="transactionMananger" class="org.springframework.jdbc.datasource.DataSou rceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 配置事物传播行为 :其实就是那些方法应该受什 么样的事物控制--> <tx:advice id="advice" transaction-manager="transactionMananger"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="modify*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="dorp*" propagation="REQUIRED"/> <tx:method name="del*" propagation="REQUIRED"/> <tx:method name="find*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 那些类下的方法需要参与到当前的事物管理中 。 配置切点 --> <aop:config> <aop:advisor advice-ref="advice" pointcut="execution(* com.bjsxt.service.*.*(..))"/> </aop:config> </beans>
4.5.6springmvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans " xmlns:xsi="http://www.w3.org/2001/XMLSchema-i nstance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org /schema/context" xmlns:mvc="http://www.springframework.org/sch ema/mvc" xsi:schemaLocation="http://www.springframewor k.org/schema/beans http://www.springframework.org/schema/beans/spring -beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-m vc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spri ng-context.xsd"> <!-- 包的扫描器主要是扫描@controller --> <context:component-scan base-package="com.bjsxt.web.controller"/> <!-- 注册两个新对象 主要是为了来处理 springmvc 中的其他 anntation 如:@requestmapping --> <mvc:annotation-driven/> <!-- 视图解析器 --> <bean class="org.springframework.web.servlet.view.Intern alResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /><!-- jsp 所在的前缀 --> <property name="suffix" value=".jsp" /> </bean> <!-- 配置静态资源映射 --> <mvc:resources location="/WEB-INF/css/" mapping="/css/**"/> <mvc:resources location="/WEB-INF/js/" mapping="/js/**"/> <!-- 文件上传处理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.C ommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"></property> <property name="maxInMemorySize" value="1024"></property> <!-- 单位字节 --> <!-- org.springframework.web.multipart.MaxUploadSizeExc eededException --> <property name="maxUploadSize" value="1000000"></property> </bean> </beans>
4.5.7web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan ce" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/n s/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 上下文参数,告诉 Spring 配置文件路径 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContex t-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context .ContextLoaderListener</listener-class> </listener> <!-- 配置 springmvc --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet. DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</pa ram-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.Ch aracterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
4.5.8配置 tomcat 与资源拷贝插件
4.5.8.1 配置 tomcat 插件
<plugins> <!-- 配置 Tomcat 插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port>8080</port> <path>/</path> </configuration> </plugin> </plugins>
4.5.8.2 资源拷贝插件
4.5.8.2.1在 manager-mapper 项目中添加资源拷贝插件
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>
4.5.9启动 tomcat 测试框架整合
5 添加业务逻辑
5.1添加用户
5.1.1Manager-controller
5.1.1.1 Controller
/** * 页面跳转 Controller * @author Administrator * */ @Controller public class PageController { @RequestMapping("/{page}") public String showPage(@PathVariable String page){ return page; } } /** * 操作 UserController * @author Administrator * */ @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; /* * 添加用户 */ @RequestMapping("/addUser") public String addUser(Users user){ this.userService.addUser(user); return "ok"; } }
5.1.1.2 Jsp
<%@ 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="addUser">添加用户</a> <a href="">查询用户</a> </body> </html> <%@ 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>AddUser</title> </head> <body> <form action="/user/addUser" method="post"> 用户姓名:<input type="text" name="username"/><br/> 用户年龄:<input type="text" name="userage"/><br/> <input type="submit" value="OKOK"/> </form> </body> </html> <%@ 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> 操作成功。。。。。 </body> </html>
5.1.2Manager-service
public interface UserService { public void addUser(Users user); } @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public void addUser(Users user) { this.userMapper.insertUser(user); } }
5.1.3Manager-mapper
public interface UserMapper { public void insertUser(Users user); } <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.bjsxt.mapper.UserMapper" > <insert id="insertUser" parameterType="com.bjsxt.pojo.Users"> insert into users(username,userage) values(#{username},#{userage}) </insert> </mapper>
5.1.4Manager-pojo
public class Users { private int userid; private String username; private int userage; public int getUserid() { return userid; } public void setUserid(int userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getUserage() { return userage; } public void setUserage(int userage) { this.userage = userage; } }
5.2查询用户
5.2.1Manager-controller
5.2.1.1 Controller
/* * 查询所有用户 */ @RequestMapping("/findUser") public String findUser(Model model){ List<Users> list = this.userService.findUser(); model.addAttribute("list", list); return "showUser"; }
5.2.1.2 Jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!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>showUser</title> </head> <body> <table border="1" align="center"> <tr> <th>用户 ID</th> <th>用户姓名</th> <th>用户年龄</th> <th>操作</th> </tr> <c:forEach items="${list }" var="user"> <tr> <td>${user.userid }</td> <td>${user.username }</td> <td>${user.userage }</td> <td> <a href="">修改</a> <a href="">删除</a> </td> </tr> </c:forEach> </table> </body> </html>
5.2.2Manager-service
public interface UserService { public void addUser(Users user); public List<Users> findUser(); } @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public void addUser(Users user) { this.userMapper.insertUser(user); } @Override public List<Users> findUser() { return this.userMapper.selectUserAll(); } }
5.2.3Manager-mapper
public interface UserMapper { public void insertUser(Users user); public List<Users> selectUserAll(); }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.bjsxt.mapper.UserMapper" > <insert id="insertUser" parameterType="com.bjsxt.pojo.Users"> insert into users(username,userage) values(#{username},#{userage}) </insert> <select id="selectUserAll" resultType="com.bjsxt.pojo.Users"> select * from users </select> </mapper>