Maven 工程整合 Spring mvc + Mybatis +Velocity

来源:互联网 发布:国产主机 知乎 编辑:程序博客网 时间:2024/06/04 18:38

1. 创建 maven web 工程,添加依赖

<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.test</groupId><artifactId>spring.mybatis</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><!-- 定义常量 --><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 第三方库 --><junit.version>4.11</junit.version><spring.version>4.1.6.RELEASE</spring.version><org.mybatis.version>3.2.7</org.mybatis.version><org.mybatis.spring.version>1.2.0</org.mybatis.spring.version><mysql.connector.java.version>5.1.26</mysql.connector.java.version><druid.version>1.0.7</druid.version><ehcache.version>2.8.3</ehcache.version><org.slf4j.log4j12.version>1.7.5</org.slf4j.log4j12.version><fastjson.version>1.2.5</fastjson.version><jackson.version>2.6.1</jackson.version><jackson-mapper-asl.version>1.9.13</jackson-mapper-asl.version><aspectjweaver.version>1.8.1</aspectjweaver.version><javax.servlet.version>3.0.1</javax.servlet.version><commons-lang3.version>3.1</commons-lang3.version><commons-fileupload.version>1.2.2</commons-fileupload.version><commons-io.version>2.4</commons-io.version><velocity.version>1.7</velocity.version><velocity-tools.version>1.3</velocity-tools.version><cglib-nodep.version>3.1</cglib-nodep.version><commons-digester.version>2.0</commons-digester.version></properties><!-- 配置maven下载jar的中央仓库,默认的是国外的 --><repositories><repository><id>oschinaRepository</id><name>local private nexus</name><url>http://maven.oschina.net/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><dependencyManagement><dependencies><!-- 设置所有传递依赖的spring框架使用定义的版本,Maven 2.0.9+ --><dependency><groupId>org.springframework</groupId><artifactId>spring-framework-bom</artifactId><version>${spring.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- 单元测试框架 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version></dependency><!-- servlet --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${javax.servlet.version}</version><scope>provided</scope></dependency><!-- cglib --><dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>${cglib-nodep.version}</version></dependency><!-- Spring 框架 --><!-- 加入spring mvc依赖包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId></dependency><!-- 加入spring测试依赖包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><scope>test</scope></dependency><!-- velocity --><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity</artifactId><version>${velocity.version}</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-tools</artifactId><version>${velocity-tools.version}</version><!-- 去除 velocity 中不需要的依赖 --><exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId></exclusion><exclusion><groupId>velocity</groupId><artifactId>velocity</artifactId></exclusion><exclusion><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId></exclusion><exclusion><groupId>commons-digester</groupId><artifactId>commons-digester</artifactId></exclusion><exclusion><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId></exclusion><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion><exclusion><groupId>commons-validator</groupId><artifactId>commons-validator</artifactId></exclusion><exclusion><groupId>sslext</groupId><artifactId>sslext</artifactId></exclusion><exclusion><groupId>struts</groupId><artifactId>struts</artifactId></exclusion><exclusion><groupId>oro</groupId><artifactId>oro</artifactId></exclusion></exclusions></dependency><dependency><groupId>commons-digester</groupId><artifactId>commons-digester</artifactId><version>${commons-digester.version}</version></dependency><!-- Mybatis框架 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${org.mybatis.version}</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${org.mybatis.spring.version}</version></dependency><!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.connector.java.version}</version></dependency><!-- 加入druid数据源依赖包 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><!-- ehcache需要的依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency><!-- 加入ehcache --><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>${ehcache.version}</version></dependency><!-- Log 框架 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${org.slf4j.log4j12.version}</version></dependency><!-- 加入fastjson依赖包 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><!--jackson --><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>${jackson-mapper-asl.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><!-- aspectj --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${aspectjweaver.version}</version></dependency><!-- commons --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>${commons-lang3.version}</version></dependency><!-- 文件上传所需要的依赖 --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>${commons-fileupload.version}</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>${commons-io.version}</version></dependency></dependencies><build><finalName>spring.mybatis</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.19</version><configuration><skip>true</skip><testFailureIgnore>true</testFailureIgnore><includes><include>**/*Test.java</include><include>**/*TestCase.java</include><include>**/Test*.java</include></includes><excludes><exclude>**/Abstract*.java</exclude></excludes> </configuration></plugin><plugin><!-- 编译的时候使用JDK8和UTF8编码 --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target> <encoding>UTF-8</encoding></configuration></plugin><!-- war打包插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>2.2</version><configuration><!-- http://maven.apache.org/plugins/maven-war-plugin/ --><packagingExcludes>WEB-INF/web.xml</packagingExcludes></configuration></plugin></plugins></build></project>
2. 将 maven web 工程设置成 servlet 3.0 项目

    详见:http://blog.csdn.net/u011310774/article/details/48338225

3. 添加 spring 配置文件

--> spring.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 引入项目配置文件 --><!-- <context:property-placeholder location="classpath:config.properties" /> --><beanclass="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><list><value>classpath:config.properties</value></list></property></bean><!-- 自动扫描dao和service包(自动注入) --><context:component-scanbase-package="com.danguiedu.wantuo.dao,com.danguiedu.wantuo.service" /><!-- 默认的注解映射的支持 --><context:annotation-config /><!-- 导入其它 spring 配置文件 --><import resource="spring-mybatis.xml" /><import resource="spring-ehcache.xml" /></beans>
--> spring-mybatis.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:aop="http://www.springframework.org/schema/aop"xmlns:c="http://www.springframework.org/schema/c" xmlns:cache="http://www.springframework.org/schema/cache"xmlns:context="http://www.springframework.org/schema/context"xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"xmlns:lang="http://www.springframework.org/schema/lang" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsdhttp://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"><!-- JNDI方式配置数据源 --><!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="${jndiName}"></property></bean> --><!-- 配置druid数据源 --><bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"init-method="init" destroy-method="close"><!-- 数据库连接基础信息 --><property name="url" value="${jdbc_url}" /><property name="username" value="${jdbc_username}" /><property name="password" value="${jdbc_password}" /><!-- 初始化连接大小 --><property name="initialSize" value="0" /><!-- 连接池最大使用连接数量 --><property name="maxActive" value="1500" /><!-- 连接池最小空闲 --><property name="minIdle" value="0" /><!-- 获取连接最大等待时间 --><property name="maxWait" value="60000" /><!-- 是否缓存preparedStatement,也就是PSCache。并且指定每个连接上PSCache的大小。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。默认false --> <!-- property name="poolPreparedStatements" value="true" /><property name="maxPoolPreparedStatementPerConnectionSize" value="33" />--><!-- 验证数据库连接有效性,要求是一个查询语句 --><property name="validationQuery" value="${validationQuery}" /><!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 --><property name="testWhileIdle" value="true" /><!-- 申请连接时执行validationQuery检测连接是否有效,配置为true会降低性能 --><property name="testOnBorrow" value="false" /><!-- 归还连接时执行validationQuery检测连接是否有效,配置为true会降低性能 --><property name="testOnReturn" value="false" /><!-- 有两个含义:1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明 --><property name="timeBetweenEvictionRunsMillis" value="60000" /><!-- 配置一个连接在池中最小生存的时间(连接保持空闲而不被驱逐的最长时间),单位是毫秒 --><property name="minEvictableIdleTimeMillis" value="25200000" /><!-- 对于长时间不使用的连接强制关闭 --><property name="removeAbandoned" value="true" /><!-- 超过30分钟开始关闭空闲连接,1800秒,也就是30分钟 --><property name="removeAbandonedTimeout" value="1800" /><!-- 关闭abanded连接时输出错误日志 --><property name="logAbandoned" value="true" /><!-- 监控数据库 --><!-- <property name="filters" value="mergeStat" /> --><property name="filters" value="stat" /></bean><!-- mybatis 的 SqlSession 的工厂: SqlSessionFactoryBean --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- <property name="typeAliasesPackage" value="com.domain" /> --><property name="mapperLocations"value="classpath:com/danguiedu/wantuo/mapper/*/*Mapper.xml" /></bean><!-- 配置扫描器 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 扫描dao这个包以及它的子包下的所有映射接口类 --><property name="basePackage" value="com.danguiedu.wantuo.dao" /><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /></bean><!-- 配置事务管理器 DataSourceTransactionManager --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 注解方式配置事物 --><!-- <tx:annotation-driven transaction-manager="transactionManager" /> --><!-- 拦截器方式配置事物 --><tx:advice id="transactionAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="add*" propagation="REQUIRED" /><tx:method name="append*" propagation="REQUIRED" /><tx:method name="save*" propagation="REQUIRED" /><tx:method name="do*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="modify*" propagation="REQUIRED" /><tx:method name="edit*" propagation="REQUIRED" /><tx:method name="delete*" propagation="REQUIRED" /><tx:method name="remove*" propagation="REQUIRED" /><tx:method name="init" propagation="REQUIRED" /><tx:method name="delAndInit" propagation="REQUIRED" /><tx:method name="get*" propagation="REQUIRED" read-only="true" /><tx:method name="find*" propagation="REQUIRED" read-only="true" /><tx:method name="load*" propagation="REQUIRED" read-only="true" /><tx:method name="search*" propagation="REQUIRED" read-only="true" /><tx:method name="datagrid*" propagation="REQUIRED"read-only="true" /><tx:method name="*" propagation="REQUIRED" /></tx:attributes></tx:advice><aop:config><aop:pointcut id="transactionPointcut"expression="execution(* com.danguiedu.wantuo.service..*Impl.*(..))" /><aop:advisor pointcut-ref="transactionPointcut"advice-ref="transactionAdvice" /></aop:config><import resource="spring-druid.xml" /></beans>
--> spring-druid.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:aop="http://www.springframework.org/schema/aop" xmlns:c="http://www.springframework.org/schema/c" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsdhttp://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"><!-- 配置druid监控spring jdbc --><bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor" /><bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype"><property name="patterns"><list><value>com.danguiedu.wantuo.service.*</value></list></property></bean><aop:config><aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" /></aop:config></beans>
--> spring-ehcache.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:aop="http://www.springframework.org/schema/aop"xmlns:c="http://www.springframework.org/schema/c" xmlns:cache="http://www.springframework.org/schema/cache"xmlns:context="http://www.springframework.org/schema/context"xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"xmlns:lang="http://www.springframework.org/schema/lang" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsdhttp://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"><!-- 开启spring缓存 --><cache:annotation-driven cache-manager="cacheManager" /><bean id="cacheManagerFactory"class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"p:configLocation="classpath:ehcache.xml" p:shared="false" /><bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"p:cacheManager-ref="cacheManagerFactory" /></beans>
4. 添加 spring-mvc.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:aop="http://www.springframework.org/schema/aop"xmlns:c="http://www.springframework.org/schema/c" xmlns:cache="http://www.springframework.org/schema/cache"xmlns:context="http://www.springframework.org/schema/context"xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"xmlns:lang="http://www.springframework.org/schema/lang" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsdhttp://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"><!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 --><context:component-scan base-package="com.danguiedu.wantuo.controller" /><!--避免IE出现下载JSON文件的情况 --><mvc:annotation-driven><mvc:message-converters register-defaults="true"><beanclass="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="supportedMediaTypes" value="text/plain;charset=UTF-8" /></bean></mvc:message-converters></mvc:annotation-driven><!-- velocity 模板信息设置 --><bean id="velocityConfigurer"class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"><!-- 设置模板文件位置 --><property name="resourceLoaderPath" value="WEB-INF/views/" /><property name="velocityProperties"><props><prop key="directive.foreach.counter.name">loopCounter</prop><prop key="directive.foreach.counter.initial.value">0</prop><prop key="input.encoding">UTF-8</prop><!-- 指定模板引擎进行模板处理的编码 --><prop key="output.encoding">UTF-8</prop><!-- 指定输出流的编码 --></props></property></bean><!-- 设置视图解析工具 --><bean id="viewResolver"class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"><!-- 设置视图文件后缀名 --><property name="suffix" value=".html" /><!-- velocity toolbox 设置 --><property name="toolboxConfigLocation" value="/WEB-INF/classes/vm-toolbox.xml" /><!-- 避免乱码 --><property name="contentType" value="text/html;charset=UTF-8" /><property name="dateToolAttribute" value="dateTool" /><property name="numberToolAttribute" value="numberTool" /><property name="exposeRequestAttributes" value="true" /><property name="exposeSessionAttributes" value="true" /></bean><!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 指定所上传文件的总大小不能超过5MB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 --><!-- <property name="maxUploadSize" value="5000000"/> --></bean><!-- 处理静态资源请求 --><!-- <mvc:resources mapping="/assets/**" location="/assets/*" /> --></beans>
5. 配置 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"><display-name>spring.mybaitis</display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!-- 加载配置文件 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring.xml</param-value></context-param><!-- spring --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><listener><listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class></listener><!-- spring mvc --><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-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup><async-supported>true</async-supported></servlet><servlet-mapping><servlet-name>springMvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- druid 监控 --><filter><filter-name>druidWebStatFilter</filter-name><filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class><init-param><param-name>exclusions</param-name><param-value>/themes/*,*.css,*.js,*.gif,*.jpg,*.png,*.ico,*.eot,*.svg,*.ttf,*.woff,*.jsp,*.tpl,/druid/*</param-value></init-param></filter><filter-mapping><filter-name>druidWebStatFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>druidStatView</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class></servlet><servlet-mapping><servlet-name>druidStatView</servlet-name><url-pattern>/druid/*</url-pattern></servlet-mapping><!-- log4j --><context-param><param-name>log4jConfigLocation</param-name><param-value>classpath:log4j.properties</param-value></context-param><context-param><param-name>webAppRootKey</param-name><param-value>spring-mybatis.root </param-value></context-param><listener><listener-class>org.springframework.web.util.Log4jConfigListener</listener-class></listener><!-- 设置请求编码格式 --><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><!-- 静态资源 --><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.css</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.js</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.json</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.gif</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.tpl</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.png</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.jpg</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.ico</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.doc</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.xls</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.docx</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.xlsx</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.txt</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.swf</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.eot</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.svg</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.ttf</url-pattern></servlet-mapping><servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.woff</url-pattern></servlet-mapping><!-- <servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.html</url-pattern></servlet-mapping> --></web-app>
6. 其它相关配置文件
-->config.properties
jdbc_url=jdbc:mysql://127.0.0.1:3306/dgedu?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNulljdbc_username=rootjdbc_password=123driver_name=com.mysql.jdbc.DrivervalidationQuery=SELECT 1
-->ehcache.xml
<?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect" dynamicConfig="true"><diskStore path="java.io.tmpdir" /><!-- <diskStore path="D:/cache" />   --><!-- 默认配置 --><!-- <defaultCache overflowToDisk="true" eternal="false"/>  --> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" maxElementsOnDisk="10000000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /><!--      name:Cache的唯一标识    maxElementsInMemory:内存中最大缓存对象数    maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大    eternal:Element是否永久有效,一但设置了,timeout将不起作用    overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中     timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大     timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大      diskPersistent:是否缓存虚拟机重启期数据      diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒     diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区     memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)      --><!-- 用户注册个数缓存 --><cache name="registerCountCache" maxElementsInMemory="10000" maxElementsOnDisk="1000" eternal="false" overflowToDisk="true" diskSpoolBufferSizeMB="20" timeToIdleSeconds="600" timeToLiveSeconds="1200" memoryStoreEvictionPolicy="LFU" /><!-- 微信公众账号token有效期2小时 --><cache name="weixinTokenCache" maxElementsInMemory="10000" maxElementsOnDisk="1000" eternal="false" overflowToDisk="true" diskSpoolBufferSizeMB="20" timeToIdleSeconds="7000" timeToLiveSeconds="7000" memoryStoreEvictionPolicy="LFU" /></ehcache>
-->log4j.properties
 ### 设置###log4j.rootLogger = debug,stdout,D,E### 输出信息到控制抬 ###log4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n### 输出DEBUG 级别以上的日志到=E://logs/error.log ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = E://logs/log.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n### 输出ERROR 级别以上的日志到=E://logs/error.log ###log4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File =E://logs/error.log log4j.appender.E.Append = truelog4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n 
-->vm-toolbox.xml
<?xml version="1.0" encoding="UTF-8" ?><toolbox>    <xhtml>true</xhtml>    <tool>        <key>stringUtils</key>        <scope>application</scope>        <class>org.apache.commons.lang.StringUtils</class>    </tool></toolbox>

7. 创建表

CREATE TABLE `wt_banner` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `banner_name` varchar(20) DEFAULT '' COMMENT '导航栏名称',  `create_date` int(11) unsigned DEFAULT '0' COMMENT '年月日',  `create_time` int(11) unsigned DEFAULT '0' COMMENT '时分秒',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

8. 使用 mybatis-generator 工具生成实体类和映射文件,再将文件拷贝到对应目录下
    详见:http://blog.csdn.net/u011310774/article/details/48269031

9. 使用 Junit 进行单元测试

package com.danguiedu.wantuo;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.danguiedu.wantuo.dao.website.BannerMapper;import com.danguiedu.wantuo.model.website.Banner;@RunWith(SpringJUnit4ClassRunner.class) //使用 Spring test 框架@ContextConfiguration(locations = { "classpath:spring.xml" }) //加载配置public class SpringJunitBaseTest {@Autowiredprivate BannerMapper bannerMapper;@Testpublic void test() {Banner banner = new Banner("首页",20150910,171230);bannerMapper.insert(banner);}}

10. 创建 service 实现类

package com.danguiedu.wantuo.service.website;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.danguiedu.wantuo.dao.website.BannerMapper;import com.danguiedu.wantuo.model.website.Banner;@Servicepublic class BannerServiceImpl implements IBannerService {@Autowiredprivate BannerMapper bannerMapper;public Banner getBannerById(int id){Banner banner = bannerMapper.selectByPrimaryKey(id);return banner;}}

11. 创建 controller

package com.danguiedu.wantuo.controller;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import com.danguiedu.wantuo.model.website.Banner;import com.danguiedu.wantuo.service.website.IBannerService;@Controllerpublic class TestController {@Autowiredprivate IBannerService bannerServiceImpl;@RequestMapping("/nihao")public String m(HttpServletRequest request) {Banner banner = bannerServiceImpl.getBannerById(1);request.setAttribute("velocity", banner);return "index";}}

12. 右键工程 -> Run As -> Maven Install 编译打包

13. tomcat 下运行访问

附件:源码  http://download.csdn.net/download/u011310774/9210613
注:源码 web.xml 文件忘了配置 druid 的监控,可以从以上的 web.xml 配置中找到

1 0