一、创建maven项目
- File -> New Module,进入创建项目窗口
- 点击Next,填写GroupId、ArtifactId和Version
- 接着下一步,这里需要注在Properties中添加一个参数 archetypeCatalog=internal,不加这个参数,在maven生成骨架的时候将会非常慢,有时候直接卡住。来自网上的解释:
archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remote,local,即中央仓库archetype元数据,由于中央
仓库的archetype太多了所以导致很慢,指定internal来表示仅使用内部元数据。
《摘自:http://blog.csdn.net/gallenzhang/article/details/51932152》
- NEXT,填写项目名称
- FINISH,完整结构图如下
注意事项:
- 刚才创建的MAVEN项目,web.xml默认是servlet2.3版本,版本较低,需要手动改为servlet3.0以上版本,如图:
修改为下面代码即可
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1"
- metadata-complete="true">
- </web-app>
首先打开Project Structure - Modules,修改如下:
二、配置文件
- 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.alex.app</groupId>
- <artifactId>ssh-demo</artifactId>
- <packaging>war</packaging>
- <version>1.0</version>
- <properties>
- <!-- base setting -->
- <java.version>1.8</java.version>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <!--lib setting-->
- <spring.version>4.3.3.RELEASE</spring.version>
- <jackson.version>2.6.3</jackson.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.11</version>
- <scope>test</scope>
- </dependency>
- <!-- slf4j,logback组合 -->
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.7.22</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.7.21</version>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.17</version>
- </dependency>
- <!-- mysql connector-->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.39</version>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>c3p0</groupId>
- <artifactId>c3p0</artifactId>
- <version>0.9.1.1</version>
- </dependency>
- <!-- DAO框架:mybatis-->
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>3.4.1</version>
- </dependency>
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis-spring</artifactId>
- <version>1.3.0</version>
- </dependency>
- <!-- servlet 相关依赖-->
- <dependency>
- <groupId>taglibs</groupId>
- <artifactId>standard</artifactId>
- <version>1.1.2</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jstl</artifactId>
- <version>1.2</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.6.7</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- </dependency>
- <!--spring依赖-->
- <!--1)核心依赖-->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</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-context</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <!--2)spring DAO-->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-tx</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <!--3)spring web-->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <!--4)spring test-->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <version>${spring.version}</version>
- </dependency>
- <!-- aspectjweaver -->
- <dependency>
- <groupId>org.aspectj</groupId>
- <artifactId>aspectjweaver</artifactId>
- <version>1.8.7</version>
- </dependency>
- <dependency>
- <groupId>org.aspectj</groupId>
- <artifactId>aspectjrt</artifactId>
- <version>1.8.7</version>
- </dependency>
- <!-- 常用工具-->
- <!-- 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>
- <!-- apache common-->
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- <version>3.4</version>
- </dependency>
- </dependencies>
- <build>
- <finalName>ssh-demo</finalName>
- <plugins>
- <!-- 指定编译JDK版本 -->
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.1</version>
- <executions>
- <execution>
- <id>default-compile</id>
- <phase>compile</phase>
- <goals>
- <goal>compile</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <source>${java.version}</source>
- <target>${java.version}</target>
- <encoding>${project.build.sourceEncoding}</encoding>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.mybatis.generator</groupId>
- <artifactId>mybatis-generator-maven-plugin</artifactId>
- <version>1.3.2</version>
- <configuration>
- <verbose>true</verbose>
- <overwrite>true</overwrite>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </project>
- generator.properties
- jdbc.driverLocation=C:\\Users\\ALEX\\.m2\repository\\mysql\\mysql-connector-java\\5.1.30\\mysql-connector-java-5.1.30.jar
- jdbc.driverClass=com.mysql.jdbc.Driver
- jdbc.connectionURL=jdbc:mysql://127.0.0.1:3306/sshdemo
- jdbc.userId=root
- jdbc.password=sp6161266
- generatorConfig.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE generatorConfiguration
- PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
- "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
- <generatorConfiguration>
- <!--导入属性配置 -->
- <properties resource="generator.properties"></properties>
- <classPathEntry location="C:\Users\ALEX\.m2\repository\mysql\mysql-connector-java\5.1.30\mysql-connector-java-5.1.30.jar"/>
- <context id="DB2Tables" targetRuntime="MyBatis3">
- <commentGenerator>
- <property name="suppressDate" value="true"/>
- <property name="suppressAllComments" value="true"/>
- </commentGenerator>
- <jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.connectionURL}" userId="${jdbc.userId}" password="${jdbc.password}">
- </jdbcConnection>
- <javaModelGenerator targetPackage="com.sshdemo.app.demo.model" targetProject="src\main\java">
- <property name="enableSubPackages" value="true"/>
- <property name="trimStrings" value="true"/>
- </javaModelGenerator>
- <sqlMapGenerator targetPackage="com.sshdemo.app.demo.dao.mapper" targetProject="src\main\java">
- <property name="enableSubPackages" value="true"/>
- </sqlMapGenerator>
- <javaClientGenerator type="XMLMAPPER" targetPackage="com.sshdemo.app.demo.dao" targetProject="src\main\java">
- <property name="enableSubPackages" value="true"/>
- </javaClientGenerator>
- <table tableName="demo" domainObjectName="DemoEntity" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
- </context>
- </generatorConfiguration>
- jdbc.properties
- driver=com.mysql.jdbc.Driver
- url=jdbc:mysql://127.0.0.1:3306/sshdemo?useUnicode=true&characterEncoding=utf-8
- username=root
- password=sp6161266
- idleConnectionTestPeriod=60
- maxIdleTime=240
- acquireIncrement=5
- initialPoolSize=10
- maxPoolSize=30
- minPoolSize=10
- autoCommitOnClose=false
- checkoutTimeout=1000
- acquireRetryAttempts=2
- log4j.properties
- log4j.rootLogger=INFO,Console,File
- #控制台日志
- log4j.appender.Console=org.apache.log4j.ConsoleAppender
- log4j.appender.Console.Target=System.out
- log4j.appender.Console.layout=org.apache.log4j.PatternLayout
- log4j.appender.Console.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
- #普通文件日志
- log4j.appender.File=org.apache.log4j.RollingFileAppender
- log4j.appender.File.File=logs/ssm.log
- log4j.appender.File.MaxFileSize=10MB
- #输出日志,如果换成DEBUG表示输出DEBUG以上级别日志
- log4j.appender.File.Threshold=ALL
- log4j.appender.File.layout=org.apache.log4j.PatternLayout
- log4j.appender.File.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
- 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:mvc="http://www.springframework.org/schema/mvc"
- xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
- 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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
- <!-- 扫描controller(controller层注入) -->
- <context:component-scan base-package="com.sshdemo.app.*.controller" />
- <mvc:annotation-driven>
- <!-- 支持返回json(避免IE在ajax请求时,返回json出现下载 ) -->
- <mvc:message-converters>
- <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
- <property name="supportedMediaTypes">
- <list>
- <value>application/json;charset=UTF-8</value>
- </list>
- </property>
- <property name="objectMapper">
- <bean class="com.fasterxml.jackson.databind.ObjectMapper">
- <!-- 配置默认的json输出日期格式 -->
- <property name="dateFormat">
- <bean class="java.text.SimpleDateFormat">
- <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
- </bean>
- </property>
- </bean>
- </property>
- </bean>
- </mvc:message-converters>
- </mvc:annotation-driven>
- <!-- 对静态资源文件的访问 -->
- <mvc:resources mapping="/*" location="/resources/" cache-period="31556926" />
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
- p:prefix="/WEB-INF/views/"
- p:suffix=".jsp"/>
- </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:p="http://www.springframework.org/schema/p"
- xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
- <!-- 自动扫描包 ,将带有注解的类 纳入spring容器管理 -->
- <context:component-scan base-package="com.sshdemo.app"></context:component-scan>
- <!-- 引入配置文件 -->
- <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <list>
- <value>classpath*:jdbc.properties</value>
- </list>
- </property>
- </bean>
- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"
- p:driverClass="${driver}"
- p:jdbcUrl="${url}"
- p:user="${username}"
- p:password="${password}"
- p:idleConnectionTestPeriod="${idleConnectionTestPeriod}"
- p:maxIdleTime="${maxIdleTime}"
- p:acquireIncrement="${acquireIncrement}"
- p:initialPoolSize="${initialPoolSize}"
- p:maxPoolSize="${maxPoolSize}"
- p:minPoolSize="${minPoolSize}"
- p:autoCommitOnClose="${autoCommitOnClose}"
- p:checkoutTimeout="${checkoutTimeout}"
- p:acquireRetryAttempts="${acquireRetryAttempts}"
- p:preferredTestQuery="SELECT 1"
- p:maxConnectionAge="3000" />
- <!-- mybatis文件配置,扫描所有mapper文件 -->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <property name="mapperLocations">
- <list>
- <value>classpath*:com/sshdemo/app/**/dao/mapper/*Mapper.xml</value>
- </list>
- </property>
- </bean>
- <!-- spring与mybatis整合配置,扫描所有dao -->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
- p:basePackage="com.sshdemo.app..*.dao"
- p:sqlSessionFactoryBeanName="sqlSessionFactory"/>
- <!-- 对dataSource 数据源进行事务管理 -->
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
- p:dataSource-ref="dataSource"/>
- <!-- 事务管理 通知 -->
- <tx:advice id="txAdvice" transaction-manager="transactionManager">
- <tx:attributes>
- <!-- 对insert,update,delete 开头的方法进行事务管理,只要有异常就回滚 -->
- <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
- <tx:method name="insert*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
- <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
- <tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
- <tx:method name="edit*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
- <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
- <!-- select,count开头的方法,开启只读,提高数据库访问性能 -->
- <tx:method name="select*" read-only="true"/>
- <tx:method name="count*" read-only="true"/>
- <!-- 对其他方法 使用默认的事务管理 -->
- <tx:method name="*"/>
- </tx:attributes>
- </tx:advice>
- <!-- 事务 aop 配置 -->
- <aop:config>
- <aop:pointcut id="serviceMethods" expression="execution (* com.sshdemo.app.*.service.*.*(..))"/>
- <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods"/>
- </aop:config>
- <!-- 启用对事务注解的支持 -->
- <tx:annotation-driven transaction-manager="transactionManager"/>
- </beans>
- web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
- http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1"
- metadata-complete="true">
- <!-- 配置Spring配置文件路径 -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath*:spring-mybatis.xml</param-value>
- </context-param>
- <context-param>
- <param-name>log4jConfigLocation</param-name>
- <param-value>classpath:log4j.properties</param-value>
- </context-param>
- <!-- 配置Spring上下文监听器 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <!-- 防止spring内存溢出监听器,比如quartz -->
- <listener>
- <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
- </listener>
- <!-- 配置Spring字符编码过滤器 -->
- <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>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <!-- Spring MVC 核心控制器 DispatcherServlet 配置 -->
- <servlet>
- <servlet-name>dispatcher</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>
- </servlet>
- <servlet-mapping>
- <servlet-name>dispatcher</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- <!-- 首页 -->
- <welcome-file-list>
- <welcome-file>/index.jsp</welcome-file>
- </welcome-file-list>
- <!-- 错误页 -->
- <error-page>
- <error-code>404</error-code>
- <location>/resources/views/404.jsp</location>
- </error-page>
- <error-page>
- <error-code>500</error-code>
- <location>/resources/views/500.jsp</location>
- </error-page>
- <!-- session配置 -->
- <session-config>
- <session-timeout>30</session-timeout>
- </session-config>
- </web-app>
三、运行
- 创建generator
Project Structure - +号 - maven,设置如下:
- 创建tomcat容器
Project Structure - tomcat - local,设置如下:
运行结果:
最终项目结构截图: