项目管理工具--Maven的配置和使用
Maven介绍
前言
今天是10.24, 也是程序员的节日. 当然要祝各位程序员早日跳槽竞升, 早日找到女盆友, 早日成为技术大牛!(留下没有技术的眼泪)
做开发时,无人可避免导入jar包的繁琐过程。去哪下载jar包呢?jar包是不是最新版呢?如何让项目中添加的jar包不遗漏呢?诸多与jar包有关的问题困扰着有或没有强迫症的java开发同胞们,有没有什么轻松,快捷,高效,便利,让人愉悦的导包工具呢?答案是肯定的,能完成这个功能的就是maven。
1. Maven简述&配置
maven项目对象模型(POM), 通过一小段描述信息来管理项目的构建, 报告和文档的软件项目管理工具. maven通过配置文件pom.xml来获取jar包.
两个网址:
maven官网:http://maven.apache.org/
导jar包用:http://mvnrepository.com/
下载+配置
下载地址:http://maven.apache.org/download.cgi
下载完成后解压文件, 并配置环境变量:
变量值为maven解压的路径;
win7 path中配置:
win10, 添加输入路径即可.
设置本地仓库位置
在D:\apache-maven-3.5.2\conf下有settings.xml的配置文件. 打开配置文件找到注解
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
这段注解就是在提示本地仓库的配置, 只需自定义目录设定就可以指定本地目录的位置:
<localRepository>D:\apache-maven-3.5.2\repository</localRepository>
然后找到元素, 在它之间加入jdk的默认版本信息:
<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基本指令
在控制台窗口中输入
mvn –version : 查看maven版本(表示配置成功).
mvn help:system : 本地仓库初始化指令.
2. eclipse-maven
eclipse如何中添加maven?
新版的eclipse已经支持maven,可打开eclipse中Window –> Preferences进行查看,如果存在maven选项即表示已支持maven,如图所示:
如果没有也无需担心,可通过Help -> Install New Software,点击Add进行添加,如图所示:
Name : m2e
location : http://download.eclipse.org/technology/m2e/releases
点击OK之后,Next下去即可完成安装。
安装完成之后还需要在eclipse中设置,如图所示:
首先, 在Maven的Installations中add本地maven 的位置, 完成后选中新加的maven.
然后, 在设置一下maven的配置文件和本地仓库的位置.
User Settings选择我们之前重新写的setting.xml(maven/config下),点击Apply,Ok即可
如何用eclipse创建maven项目?
首先新建一个maven项目,File -> New -> Other,找到Maven下的Maven Project,Next,Next,选择原型骨架,一般选择quickstart(针对java项目)和webapp(针对web项目),Next,填写项目(Group Id),模块(Artifact Id),版本(Version)以及包(Package, 自动生成),
groupId:一般指某个公司或者某个组织的某个项目 比如 org.springframework
artifactId:一般指某个具体项目的某个具体模块 比如 spring-context
如图所示:
完成之后会自动生成相应目录。目录结构如下:
index.jsp报错问题:
新建maven项目后, 会发现index.jsp报错.这是因为新项目使用 maven-artchetype-webapp, 由于这个catalog版本较旧, 用的servlet是2.3版本的, 因此我们需要稍加修改几个地方.
首先, 打开WEB-INF找到web.xml, 把其中的内容修改为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
</web-app>
然后, 修改项目的运行环境, 设置为本地jre, 默认eclipse自动jre. 如果是web项目在添加(AddLibrary)tomcat的运行环境.
项目右键 -->Properties
选中第三个选项, 使用本机jre.
添加本机配置的tomcat.
最后,在navigator视图修改版本信息:
打开navigator视图
检查core中的jdk版本是否是自己想要的, 如果按照上文配置
settings后, 会指定版本, 否则默认都是1.5
facet.core中修改web版本为3.0;
上边几步做好之后, 刷新错误就没了, 可以开发maven项目.
3. pom.xml详解
pom.xml 中的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/maven-v4_0_0.xsd">
<!-- 基本配置 -->
<modelVersion>4.0.0</modelVersion>
<groupId>com.qb.bigdata</groupId>
<artifactId>MavenDemo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>MavenDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- 依赖配置 -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 构建配置 -->
<build>...</build>
<reporting>...</reporting>
<!-- 项目信息 -->
<name>...</name>
<description>...</description>
<url>...</url>
<inceptionYear>...</inceptionYear>
<licenses>...</licenses>
<organization>...</organization>
<developers>...</developers>
<contributors>...</contributors>
<!-- 环境设置 -->
<issueManagement>...</issueManagement>
<ciManagement>...</ciManagement>
<mailingLists>...</mailingLists>
<scm>...</scm>
<prerequisites>...</prerequisites>
<repositories>...</repositories>
<pluginRepositories>...</pluginRepositories>
<distributionManagement>...</distributionManagement>
<profiles>...</profiles>
</project>
基本配置
- modelVersion : pom模型版本, maven2和3只能为4.0.0
- groupId : 用于maven定位的ID组
- artifactId : 用于定位的组中唯一Id
- version : 项目版本
- packaging : 项目打包方式, 取值有: pom, jar, maven-plugin, ejb, war, ear, rar, par
依赖配置
- parent 用于确定父项目的坐标.
- groupId: 父项目构件标识符
- artifactId: 父项目唯一标识符
- relativePath: maven先在文件系统的relativePath位置找父项目的pom, 然后在本地仓库找, 再在远程(中央)仓库找.
- version: 父项目的版本
<parent>
<groupId>com.learnPro</groupId>
<artifactId>SIP-parent</artifactId>
<relativePath></relativePath>
<version>0.0.1-SNAPSHOT</version>
</parent>
-
modules 用于多模块的maven项目
-
module 指定某个模块. 例如
<module>com-a</module>
-
properties 用于定义pom常量
<properties>
<java.version>1.8</java.version>
</properties>
常量可在pom文件的任意位置通过${java.version}获取
- dependencies 项目相关依赖配置
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
- dependencyManagement 父模块定义后, 子模块不会直接使用对应依赖(不会立刻导入jar包).
父项目:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
子项目:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
优点: 父项目统一版本, 而子项目在需要的时候才引用对应依赖.
依赖怎么写?
其实, 依赖并不需要开发人员手写, 想要添加jar包,去http://mvnrepository.com/搜索,打开之后选择版本,如图所示:
把Maven中的内容复制到pom.xml的标签对中即可,保存之后自动查找本地仓库, 没有包则去中央仓库下载。
4. 如何让新项目利用maven依赖已经完成的项目?
找到已完成项目,右键pom.xml –> Run As - >Maven install,如图所示:
经过这步处理之后,eclipse会自动在target目录下新建一个项目的jar包,我们的新项目就要依赖这个jar包调用相关的内容。
将完成项目的jar包导入新项目中与用maven添加其他jar包一样,依然要在pom.xml中写,其中与完成项目pom.xml中的描述要保持一致。
<dependency>
<groupId>com.qibao.user</groupId>
<artifactId>user-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
5. maven 入门级SSM项目
新建项目, 在project explorer视图下的目录结构
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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qb.bigdata</groupId>
<artifactId>MavenDemo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>MavenDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<srping.version>4.3.7.RELEASE</srping.version>
<mybatis.version>3.2.8</mybatis.version>
<slf4j.version>1.7.12</slf4j.version>
<log4j.version>1.2.17</log4j.version>
<jackson.version>2.8.8</jackson.version>
<freemarker.version>2.3.23</freemarker.version>
<druid.version>1.0.5</druid.version>
</properties>
<!-- 用到的jar包 -->
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<!-- java ee包 -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- spring框架包 start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${srping.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${srping.version}</version>
</dependency>
<!-- spring框架包 end -->
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- mybatis框架包 start -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- mybatis框架包 end -->
<!-- 通用mapper start -->
<dependency>
<groupId>com.github.abel533</groupId>
<artifactId>mapper</artifactId>
<version>2.3.4</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.5</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.0</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- jstl标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log END -->
<!-- Json -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
<!-- 格式化对象,方便输出日志 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.1</version>
</dependency>
<!-- 上传组件包 start -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<!-- 上传组件包 end -->
<!-- View管理 start -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>${freemarker.version}</version>
</dependency>
<!-- View管理 end -->
</dependencies>
<build>
<finalName></finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
资源文件db.properties
jdbc.drivername=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=77123
maxPoolSize=20
minPoolSize=5
initialPoolSize=10
checkoutTimeout=10000
日志文件log4j.properties
# DEBUG,INFO,WARN,ERROR,FATAL
LOG_LEVEL=INFO
log4j.rootLogger=${LOG_LEVEL},CONSOLE,FILE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=utf-8
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
#log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{8}@(%F:%L):%m%n
#log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{1}@(%F:%L):%m%n
log4j.appender.CONSOLE.layout.ConversionPattern=%d: %l [%-p] - %m%n
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.File=${user.home}/logs/24K-admin.log
log4j.appender.FILE.Encoding=utf-8
log4j.appender.FILE.DatePattern='.'yyyy-MM-dd
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
#log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n
spring核心配置文件applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
">
<!-- 1.外部资源 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 2.c3p0数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.drivername}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 3.会话工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="typeAliasesPackage" value="com.qb.bigdata.pojo"></property>
<!-- ***Mapper.xml放置位置 -->
<property name="mapperLocations" value="classpath*:mybatis/*.xml"></property>
<property name="plugins">
<array>
<!-- pagehelper分页配置。 -->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<value>
helperDialect=mysql
offsetAsPageNum=true
<!-- 防止出现小于第一页,大于最后一页的异常情况出现。 -->
reasonable=true
</value>
</property>
</bean>
<!-- 通用mapper的配置 -->
<bean class="com.github.abel533.mapperhelper.MapperInterceptor">
<property name="properties">
<value>
<!-- 主键自增回写方法,默认值MYSQL -->
IDENTITY=MYSQL
mappers=com.github.abel533.mapper.Mapper
</value>
</property>
</bean>
</array>
</property>
</bean>
<!-- 4.批量加载mapper代理bean -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.qb.bigdata.mapper"></property>
</bean>
<!-- 5.注解扫描 -->
<context:component-scan base-package="com.qb.bigdata.service"></context:component-scan>
<!-- 6.事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 7.注解事务管理驱动 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
springmvc配置文件springmvc.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: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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 1.注解驱动 -->
<mvc:annotation-driven />
<!-- 配置静态资源的访问映射 -->
<mvc:default-servlet-handler/>
<context:component-scan base-package="com.qb.bigdata.controller"></context:component-scan>
<!-- JSP视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsps/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 全局配置参数, applicationContext.xml的位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 配置spring监听器, 监听ServletContext的创建 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- springmvc配置文件的位置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath: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>EncodingFilter</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>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
pojo实体类
@Table(name="user")
public class User implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String username;
private String sex;
private Date birthday;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public User() {
super();
}
public User(int id, String username, String sex, Date birthday, String address) {
super();
this.id = id;
this.username = username;
this.sex = sex;
this.birthday = birthday;
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
+ address + "]";
}
}
dao层, 继承通用mapper
public interface UserMapper extends Mapper<User> {
}
service层, 接口
public interface UserService {
/**
* 方法描述 根据id查询
* @param id
*/
public User selectById(int id);
}
service层, 实现类
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User selectById(int id) {
return userMapper.selectByPrimaryKey(id);
}
}
controller层, 执行器
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
//RESTful风格请求路径
@RequestMapping(value="/select/{id}")
public ModelAndView select(@PathVariable("id") int id){
ModelAndView mv = new ModelAndView();
User user = null;
try {
user = userService.selectById(id);
} catch (Exception e) {
e.printStackTrace();
}
mv.addObject("user", user);
mv.setViewName("user");
return mv;
}
@RequestMapping("/findUserById")
public String findUserById(int id, Model model){
User user = userService.selectById(id);
model.addAttribute("user", user);
return "user";
}
}
默认页面index.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>
Welcome.<br>
<a href="${pageContext.request.contextPath}/user/select/1">select</a>
</body>
</html>
前端执行器返回视图 user.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>
<table border="1">
<tr>
<td>id</td>
<td>username</td>
<td>sex</td>
<td>birthday</td>
<td>address</td>
</tr>
<tr>
<td>${user.id }</td>
<td>${user.username }</td>
<td>${user.sex }</td>
<td>${user.birthday }</td>
<td>${user.address}</td>
</tr>
</table>
</body>
</html>
导入tomcat中并执行.