一、Maven私服搭建
1.Maven常用命令:
(1)install:
本地安装, 包含编译,打包,安装到本地仓库 编译 - javac 打包 - jar, 将 java 代码打包为 jar 文件 安装到本地仓库 - 将打包的 jar 文件,保存到本地仓库目录中。
(2)clean:
清除已编译信息。 删除工程中的 target 目录。
(3)compile :
只编译,类似于javac 命令 。
(4)deploy:
部署。 常见于结合私服使用的命令。
相当于是 install+上传 jar 到私服。
包含编译,打包,安装到本地仓库,上传到私服仓库。
2.Maven私服:
- 什么是私服?
私服是一种特殊的远程仓库,它是架设在局域网的仓库服务,私服代理广域网上的远程 仓库,供局域网使用。 在企业开发中,私服的建设是有必要的。
- 私服的好处:
(1)节省资金、外网带宽:
利用私服代理外部仓库之后,对外的重复构件下载便得以简化,降低外网带宽压力。
(2)加速Maven构建:
不停地连接请求外部仓库是相当耗时的,但是 maven 的一些内部机制(如快照更新检 查)要求 Maven 在执行构建的时候不停地检查远程仓库数据。因此,当项目配置了很多外 部远程仓库的时候,构建速度会降低。使用私服解决这问题,因为 Maven 只需要检查局域 网内私服的数据时,构建速度便有明显提高。
(3) 部署第三方构件 :
当某个构件无法从任何一个远程仓库获取怎么办?比如 Oracle 的 JDBC 驱动由于版权 原因不能发布到公共仓库中。建立私服后,便可以将这些构件部署到这个内部仓库中,供内 部 Maven 项目使用。
(4)提高稳定性,增强控制:
对于远程仓库来说,当外网不可用时,Maven 构建有可能因为依赖没有下载而不可行, 搭建并应用私服后,即使没有外网,如果该构件之前被其它人下载过就会存在私服上,此时 再次依赖该构件就可以不用连接外网直接就可以从私服上下载到。同时私服软件(nexus)还 提供了额外的管理功能。
(5) 降低中央仓库的负荷 :
中央仓库是有限的。如果所有的 Maven 工程开发过程中,都通过中央仓库实现构件的 依赖和管理,那么中央仓库的负荷过高,也会严重影响工程构建的效率。如果使用私服,可 以分散中央仓库的负荷,只有在私服中没有需要依赖的构件时才会去连接中央仓库。
3.Maven私服搭建:
- 搭建环境:
环境:CentOS6.5、JDK7、Sonatype Nexus、Maven(Eclipse 或 MyEclipse);
- 搭建步骤:
(1)安装JDK:
JDK下载地址:官方网站;
将jdk解压到指定目录:
tar -zxvf jdk-7u80-linux-x64.tar.gz -C /usr/local ;
配置环境变量(配置完成后重启Linux永久生效):
export JAVA_HOME=/usr/local/java export
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
(2)下载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 私服下载的构件存放工 作目录。
(3)检查私服端口和工作目录:
在 nexus-2.11.2-03 目录中有子目录 conf,其中保存私服应用的配置信息。查看 nexus.properties 文件,确定私服访问端口和工作目录。
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 应用运行目录
(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 用户权限。
(5)修改防火墙,开发Nexus私服端口访问:
关闭防火墙修改防火墙配置文件,开放 Nexus 私服的访问端口 8081。
增加:“-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT ”;
重启防火墙:“service iptables restart ”;
或者直接关闭防火墙:
(6)启动并测试访问:
启动私服启动私服:“/usr/local/nexus/nexus-2.11.2-03/bin/nexus start ”;
检查私服运行状态:"/usr/local/nexus/nexus-2.11.2-03/bin/nexus status ";
也可以使用浏览器访问私服WEB应用,访问地址为:“http://ip:8081/nexus (ip 为 Nexus 所在系统的访问 IP)”
浏览器效果
(7)登录:
登录界面Nexus 默认提供管理用户,用户名为 admin,密码为 admin123。
成功界面
-
仓库管理:
(1)检查仓库:
image.png
(2)仓库的类型:
仓库类型
(3)仓库类型的介绍:
group:仓库组,Nexus 通过仓库组来统一管理多个仓库,这样访问仓库组就相当于访问仓库组 管理的多个仓库。
hosted:宿主仓库,主要用于发布内部项目构件或第三方的项目构件(如购买商业的构件)以及 无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)。
releases:发布内部的 releases 模块的仓库,所有非快照版本工程都发布到此仓库中。
snapshots:发布内部的快照模块的仓库,所有工程版本以 SNAPSHOT 结尾的都发布到此仓库中。
3rd party
第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去。
proxy:代理仓库,代理公共的远程仓库。
virtual:虚拟仓库,用于适配 Maven 1。
(4)代理仓库配置:
更改设置设置 proxy 代理仓库(Apache Snapshots/Central/Codehaus Snapshots)准许远程下载。
- 私服的使用:
(1)配置setting.xml文件(添加下面信息):
<profile>
<id>sxt</id>
<activation>
<activeByDefault>false</activeByDefault>
<jdk>1.8</jdk>
</activation>
<repositories>
<!-- 私有库配置 -->
<repository>
<!-- 私有库 id -->
<id>nexus</id>
<!-- 私有库地址 -->
<url>http://192.168.226.128: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.226.128:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
(2)pom.xml文件配置:
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.226.128:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.226.128: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>
- 发布本地工程到私服:
image.png在 Maven 工程的 maven build 中,输入命令 deploy,即可实现发布工程信息到私服。 如果同版本工程可能多次发布,需要修改 Nexus 配置。
-
发布第三方插件到私服:
image.png
image.png
二、Maven实战:
1.需求分析:
基于 SSM 框架的 CRUD 案例;
- 使用的技术:
启动Tomcat框架:SpringMVC+Spring+Mybatis
数据库:MySQL
项目构建工具:Maven
Maven先打包Parent在打包聚合项目;再启动聚合项目。
2.项目架构设计:
-
传统项目设计方式:
传统方式 -
Maven 项目设计方式:
Maven
3.创建工程:
3.1创建Parent工程:
Parent- 修改POM文件:
<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.zlw</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.version>
<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>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3</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.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.2创建聚合工程Manager:
聚合3.3在聚合工程的基础上创建:
-
创建manager-pojo:
Module
详细信息 -
创建manager-mapper:
mapper - 修改 manager-mapper 的 pom 文件:
<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>
<parent>
<groupId>com.zlw</groupId>
<artifactId>12manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>manager-mapper</artifactId>
<dependencies>
<dependency>
<groupId>com.zlw</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>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
</dependencies>
<!-- 资源拷贝插件 -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
-
创建 manager-service:
service - 修改 manager-service 的 pom 文件:
<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>
<parent>
<groupId>com.zlw</groupId>
<artifactId>12manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>manager-service</artifactId>
<dependencies>
<dependency>
<groupId>com.zlw</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>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
</dependencies>
</project>
-
创建 manager-controller :
war
补全项目 - 修改 manager-controller 的 pom 文件:
<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>
<parent>
<groupId>com.zlw</groupId>
<artifactId>12manager</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>manager-controller</artifactId>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.zlw</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>
<build>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
4.框架整合:
image.png4.1db.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=root
4.2 Mybatis 配置文件:
<?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.3applicationContext-mybatis.xml :
<!-- 配置解析properties文件的工具类 -->
<context:property-placeholder location="classpath:resource/*.properties"/>
<!-- 配置数据源dataSource -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<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</value>
</property>
</bean>
<!-- 扫描mybatis的接口与映射配置文件 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.zlw.mapper"></property>
</bean>
4.4 applicationContext-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-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.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-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 扫描bean对象 -->
<context:component-scan base-package="com.zlw.service"/>
</beans>
4.5 applicationContext-trans.xml :
<!-- 配置事务管理器的切面 -->
<bean id="transactionMananger"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</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.zlw.service.*.*(..))" />
</aop:config>
4.6springmvc.xml :
<!-- 扫描@Controller -->
<context:component-scan base-package="com.zlw.controller"></context:component-scan>
<!-- 注册两个新对象 主要是为了来处理springmvc 中的其他 anntation 如:@requestmapping -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</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.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxInMemorySize" value="1024"></property>
<property name="maxUploadSize" value="1000000"></property>
</bean>
4.7web.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_3_0.xsd"
id="WebApp_ID" version="3.0">
<!-- 上下文参数,告诉spring配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext-*.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</param-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.CharacterEncodingFilter</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>
</web-app>
4.8配置 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.9 启动 tomcat 测试框架整合:
image.png5.添加用户:
5.1Controller:
@Controller
public class PageController {
@RequestMapping("/{page}")
public String showPage(@PathVariable String page) {
return page;
}
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/addUser")
public String addUser(User user) {
userService.addUser(user);
return "redirect:/user/findUser";
}
5.2JSP:
<body>
<p><a href="addUser" >添加用户</a><br></p>
<p><a href="/user/findUser">查询用户</a></p>
</body>
<body>
<form action="/user/addUser" method="post">
用户名:<input type="text" name="username"/><br>
用户年龄:<input type="text" name="userage"/><br>
<input type="submit" value="提交"/>
</form>
</body>
<body>
<h3>添加成功!</h3>
</body>
5.3 Manager-service:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public void addUser(User user) {
userMapper.insertUser(user);
}
}
5.4 Manager-mapper:
public interface UserMapper {
/**
* 添加操作
* @param user
*/
void insertUser(User 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.zlw.mapper.UserMapper">
<insert id="insertUser" parameterType="com.zlw.pojo.User">
insert into users(username,userage) values(#{username},#{userage})
</insert>
</mapper>
5.5 Manager-pojo :
private int userid;
private String username;
private int userage;
6.查询用户:
6.1 Manager-controller :
@RequestMapping("findUser")
public String findUser(Model model) {
List<User> list = userService.findAllUser();
model.addAttribute("list",list);
return "showUser";
}
6.2JSP:
<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="/user/delete?userid=${user.userid }">删除</a>
<a href="/user/findById?userid=${user.userid }">修改</a>
</td>
</tr>
</c:forEach>
</table>
<a href="/index" >返回</a>
</body>
6.3 Manager-service:
@Override
public List<User> findAllUser() {
return userMapper.findAllUser();
}
6.4 Manager-mapper:
/**
* 查询用户
* @return
*/
List<User> findAllUser();
<select id="findAllUser" resultType="com.zlw.pojo.User">
select *from users
</select>
7.修改和删除:
7.1Controller:
@RequestMapping("delete")
public String deleteUser(int userid) {
userService.deleteUser(userid);
return "redirect:/user/findUser";
}
@RequestMapping("/update")
public String updateUser(User user) {
userService.updateUser(user);
return"redirect:/user/findUser";
}
@RequestMapping("findById")
public String findById(int userid,HttpServletRequest request) {
User user = userService.findById(userid);
request.setAttribute("user", user);
return "update";
- JSP:
<body>
<form action="/user/update" method="post">
ID:<input type="text" name="userid" disabled="disabled" value="${user.userid }"/><br>
用户名:<input type="text" value="${user.username }" name="username"/><br>
用户年龄:<input type="text" value="${user.userage }" name="userage"/><br>
<input type="submit" value="修改"/>
</form>
</body>
7.2Service:
@Override
public void updateUser(User user) {
userMapper.updateUser(user);
}
@Override
public void deleteUser(int userid) {
userMapper.deleteUser(userid);
}
@Override
public User findById(int userid) {
return userMapper.findById(userid);
}
7.3mapper:
/**
* 删除用户
* @param userid
*/
void deleteUser(int userid);
/**
* 修改用户
* @param user
*/
void updateUser(User user);
User findById(int userid);
<delete id="deleteUser" >
delete from users where userid=#{0}
</delete>
<update id="updateUser" parameterType="com.zlw.pojo.User">
update users set username=#{username},userage=#{userage} where userid=#{userid}
</update>
<select id="findById" resultType="com.zlw.pojo.User">
select *from users where userid=#{0}
</select>
-
实现效果:
index
添加
网友评论