前言
用了好久了,但都是当初大神配置完后直接粘贴复制过来的,一直没仔细看过相关配置,趁此机会对自己也算是一个复习与深入,也希望对初学者有所帮助。本系列均是基于IDEA的教程。在学校时用的Eclipse,刚出校门接触的MyEclipse,一年后接触到IDEA就从此彻底倒戈。 对于IDEA,有条件的推荐购买,没条件的嘛。。。。你懂得,这里暂且免费送个激活传送门:
最初使用的基于c3p0连接池做的该教程,之后由于发现在后期涉及到emoji表情存储时出现了些问题,改成druid连接池及相关配置后达到了期望值。故:本教程中给出了分别基于c3p0和druid的相关配置,带new的为druid相关,带old的为c3p0相关,请自行酌情选取其中之一使用。另,对于两者都不带的则为通用配置。
实验环境
java1.8 Spring 4.3.7.RELEASE Spring MVC 4.3.7.RELEASE MyBatis 3.4.2
使用Maven构建新项目
创建过程
若初次使用IDEA,会进入欢迎页面(这里由于已经非初次,所以从网上找了个图用来演示),在欢迎界面点击**Create New Project。
若非第一次,请按如下步骤打开新建项目界面 File -> New Project
以上两种方法均进入如下页面
[callout class=“info” title=""] 1.选择使用maven创建项目。 2.选择项目使用的SDK。 3.选中 Create from archetype(选择Maven原型模板),在下面选择maven-archetype-webapp**。 [/callout] 之后填入**GroupID和ArtifactID 。这里请尽量按maven命名规范填写(详情可见之后的附录)。
[callout class=“info” title=""] groupId:所述的项目名称,由于有的项目并不是一个jar包构成的,而是由很多的jar包组成的。因此这个groupId就是整个项目的名称。 artifactId:包的名称。 version:版本号。 [/callout] 之后点击下一步,进入一个基础构建配置界面,此处默认直接下一步的情况下,容易导致创建缓慢或长时间停在Generating project in Batch mode不动的情况,在此处配置archetypeCatalog = internal**即可解决该问题,如图:
之后点击下一步,填入项目名称,这里建议和之前填写的ArtifactID名称一样即可(最新版的已经会自动填写ArtifactID名称),同时自行选择创建路径,亦可用上面显示的默认路径,如图:
点击finish,等待maven创建项目,如下图时创建完成: 
Maven文件结构配置与简析
首先如图创建java,以及相关目录,用于之后存储java代码。
点击菜单中**File —> Project Structure —>Modules,**如图进行配置:
java设置为Sources,用于存放java代码 resources设置为Resources,用于存放xml等项目的相关配置文件。
修改pom.xml
以下为项目的用到的pom.xml。 [toggle hide=“yes” title=“new—基于druid连接池” color=“#ff0000”]
<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.windCoder</groupId> <artifactId>SSMDemo</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>SSMDemo Maven Webapp</name> <url>http://maven.apache.org</url>
<properties> <java.version>1.8</java.version> <!-- spring版本号 --> <spring.version>4.3.7.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.4.2</mybatis.version> <!-- log4j日志文件管理包版本 --> <slf4j.version>1.7.25</slf4j.version> <log4j.version>2.8.2</log4j.version> <!-- 导入MySQL数据库链接jar包 --> <mysqlJava.version>5.1.41</mysqlJava.version> <!-- mybatis/spring包 --> <mybatisSpring.version>1.3.1</mybatisSpring.version> <!-- druid包 --> <druid.version>1.1.2</druid.version> <!-- JSTL标签类 --> <jstl.version>1.2</jstl.version> <json.version>20170516</json.version> </properties>
<dependencies> <!-- 1. junit 依赖 begin junit3.0使用编程方式运行,junit4.0使用注解方式运行 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- junit 依赖 end -->
<!-- 2. spring依赖 begin--> <!-- spring核心依赖:这个jar 文件包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- spring aop依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <!--Spring context的扩展支持,用于MVC方面。--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency>
<!-- Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency>
<!--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>
<!-- 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>
<!-- spring test相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- spring依赖 end-->
<!-- 3. mybatis依赖 begin--> <!-- mybatis核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- mybatis/spring包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatisSpring.version}</version> </dependency> <!-- mybatis依赖 end-->
<!--4. 数据库相关依赖 begin--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysqlJava.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- 数据库相关依赖 end-->
<!--5. log日志依赖 begin--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <!--log日志依赖 end-->
<!--6. Servlet web相关依赖 begin--> <!-- JSTL标签类 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <!-- Servlet web相关依赖 end--> <!-- 7. 其他依赖 begin --> <!-- Json依赖 --> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>${json.version}</version> </dependency> <!-- 文件上传依赖 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency> <!-- 其他依赖 end --> </dependencies>
<build> <finalName>SSMDemo</finalName> <defaultGoal>compile</defaultGoal>
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> <!--过滤相关配置文件,全部打包到classpath下--> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build></project>[/toggle] [toggle hide=“yes” title=“old—基于c3p0连接池” color=“#fd874f”]
<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.windCoder</groupId> <artifactId>SSMDemo</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>SSMDemo Maven Webapp</name> <url>http://maven.apache.org</url>
<properties> <java.version>1.8</java.version> <!-- spring版本号 --> <spring.version>4.3.7.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.4.2</mybatis.version> <!-- log4j日志文件管理包版本 --> <slf4j.version>1.7.25</slf4j.version> <log4j.version>2.8.2</log4j.version> <!-- 导入MySQL数据库链接jar包 --> <mysqlJava.version>5.1.41</mysqlJava.version> <!-- mybatis/spring包 --> <mybatisSpring.version>1.3.1</mybatisSpring.version> <!-- c3p0包 --> <c3p0.version>0.9.1.2</c3p0.version> <!-- JSTL标签类 --> <jstl.version>1.2</jstl.version> </properties>
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency>
<!-- spring核心包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</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-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- 使用SpringMVC需配置 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- spring核心包 end-->
<!-- mybatis核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency>
<!-- mybatis/spring包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatisSpring.version}</version> </dependency>
<!-- 导入MySQL数据库链接jar包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysqlJava.version}</version> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>${c3p0.version}</version> </dependency> <!-- mybatis核心包 end--> <!-- JSTL标签类 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency>
<!-- log start --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> </dependencies>
<build> <finalName>SSMDemo</finalName> <defaultGoal>compile</defaultGoal>
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> <!--过滤相关配置文件,全部打包到classpath下--> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build></project>[/toggle] maven的东西暂时不再详细展开,以后有兴致再单开一篇。
基础配置文件
jdbc.properties
数据库配置文件。 [toggle hide=“yes” title=“new—基于druid连接池” color=“#ff0000”] 此处后面一些配置属性为druid,不一定适用所有连接池,对于使用其他连接池的请酌情使用。
#mysqldriverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/ssmdemo?useUnicode\=true&characterEncoding\=utf8&zeroDateTimeBehavior\=convertToNull&transformedBitIsBoolean\=trueuserName=rootpassword=
#定义初始连接数initialSize=5#连接池中保留的最小连接数,默认为:3minIdle=5#连接池中保留的最大连接数,默认为:3maxActive=30#是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。poolPreparedStatements=true#要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100maxOpenPreparedStatements=30[/toggle] [toggle hide=“yes” title=“old—基于c3p0连接池” color=“#fd874f”] 此处后面一些配置属性为c3p0,不一定适用所有连接池,对于使用其他连接池的请酌情使用。
#mysqldriverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/ssmdemo?useUnicode\=true&characterEncoding\=utf8&zeroDateTimeBehavior\=convertToNull&transformedBitIsBoolean\=trueuserName=rootpassword=
#以下为c3p0专属属性#定义初始连接数initialPoolSize=5#连接池中保留的最小连接数,默认为:3minPoolSize=5#连接池中保留的最小连接数,默认为:3maxPoolSize=30#连接耗尽时一次获取的连接数acquireIncrement=10#最大空闲时间maxIdleTime=30#连接池为数据源缓存的PreparedStatement的总数maxStatements=30[/toggle]
log4j.xml
本文用的是log4j2,之前的log4j 1的配置请转至附录。
<?xml version="1.0" encoding="UTF-8"?><Configuration status="warn" name="MyApp" packages=""> <Appenders> <!-- 输出到控制台 --> <Console name="Console" target="SYSTEM_OUT"> <!-- 需要记录的级别 --> <!-- <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" /> --> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" /> </Console>
<!-- 输出到文件,按天或者超过80MB分割 --> <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="c:/logs/ssmdemo_news.log"> <!--<BurstFilter level="INFO" rate="16" maxBurst="100"/>--> <PatternLayout> <pattern>%d{MM-dd HH/:mm/:ss.SSS} %-5p [%F/:%L]%x %m%n %X{ip}</pattern> </PatternLayout> <Policies> <OnStartupTriggeringPolicy /> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="80 MB" /> </Policies> </RollingFile> </Appenders> <Loggers> <!-- 全局配置 --> <Root level="info"> <AppenderRef ref="Console" /> <AppenderRef ref="RollingFile"/> </Root> </Loggers></Configuration>spring.xml
用于配置spring以及mybatis的文件。以下两者根据之前的配置选其一即可。 [toggle hide=“yes” title=“new—基于druid连接池” color=“#ff0000”]
<?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:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 设置需要进行Spring注解扫描的类包 --> <context:component-scan base-package="com.windCoder.SSMDemo.*"/>
<!-- JDBC配置文件 --> <context:property-placeholder location="classpath:conf/jdbc.properties"/>
<!-- 数据库连接池配置 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="driverClassName" value="${driverClassName}"/> <property name="url" value="${url}" /> <property name="username" value="${userName}" /> <property name="password" value="${password}" /> <property name="initialSize" value="${initialSize}" /> <property name="minIdle" value="${minIdle}" /> <property name="maxActive" value="${maxActive}" /> <property name="poolPreparedStatements" value="${poolPreparedStatements}" /> <property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" /> <property name="connectionInitSqls" value="set names utf8mb4;"/> </bean>
<!-- MyBatis 配置--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 显式指定Mapper文件位置 --> <property name="mapperLocations" value="classpath:com/windCoder/SSMDemo/entity/**/*Mapper.xml" />
<!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 --> <property name="typeAliasesPackage" value="com/windCoder/SSMDemo/entity" /> </bean>
<!-- 事件管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 开启注解方式声明事务 --> <tx:annotation-driven transaction-manager="transactionManager" /> <!-- 配置类似于jdbcTemplate的SqlSessionFactory模版 --> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" > <constructor-arg index="0" ref="sqlSessionFactory" /> </bean>
<!-- 文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="utf-8" p:maxUploadSize="52428880" p:uploadTempDir="assets/uploadTmpDir"> </bean>
</beans>[/toggle] [toggle hide=“yes” title=“old—基于c3p0连接池” color=“#fd874f”]
<?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:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 设置需要进行Spring注解扫描的类包 --> <context:component-scan base-package="com.windCoder.SSMDemo.*"/>
<!-- JDBC配置文件 --> <context:property-placeholder location="classpath:conf/jdbc.properties"/>
<!-- c3p0连接池配置 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${driverClassName}"/> <property name="jdbcUrl" value="${url}" /> <property name="user" value="${userName}" /> <property name="password" value="${password}" /> <property name="initialPoolSize" value="${initialPoolSize}" /> <property name="minPoolSize" value="${minPoolSize}" /> <property name="maxPoolSize" value="${maxPoolSize}" /> <property name="acquireIncrement" value="${acquireIncrement}" /> <property name="maxIdleTime" value="${maxIdleTime}" /> <property name="maxStatements" value="${maxStatements}" /> </bean>
<!-- MyBatis 配置--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 显式指定Mapper文件位置 --> <!--<property name="configLocation" value="classpath:conf/SqlMapConfig.xml"/>--> <!--<property name="mapperLocations" value="classpath:cn/zhonya/authPlat/entity/*Mapper.xml" />--> <property name="mapperLocations" value="classpath:com/windCoder/SSMDemo/entity/**/*Mapper.xml" />
<!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 --> <property name="typeAliasesPackage" value="cn/zhonya/SSMDemo/entity" /> </bean>
<!-- 事件管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 开启注解方式声明事务 --> <tx:annotation-driven transaction-manager="transactionManager" /> <!-- 配置类似于jdbcTemplate的SqlSessionFactory模版 --> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" > <constructor-arg index="0" ref="sqlSessionFactory" /> </bean>
<!-- 文件上传 --> <!--<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"--> <!--p:defaultEncoding="utf-8"--> <!--p:maxUploadSize="52428880"--> <!--p:uploadTempDir="uploadTmpDir">--> <!--</bean>-->
</beans>上面将文件上传部分的配置去掉了,若放开,需在前面的pom.xml引入上传用的jar包,如下:
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version></dependency>[/toggle]
spring-mvc.xml
这个配置文件是springMVC的配置文件:
<?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/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">
<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="com.windCoder.SSMDemo.controller"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
<!-- 定义跳转的文件的前后缀 ,视图模式配置--> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个可用的url地址--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
<!-- springmvc传json值时的乱码解决 --> <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" /> </bean> </mvc:message-converters> </mvc:annotation-driven>
<!-- 控制器异常处理 --> <bean id="exceptionHandlerExceptionResolver" class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver"> </bean>
</beans>web.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"> <display-name>Archetype Created Web Application</display-name>
<!-- 读取spring配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:conf/spring.xml</param-value> </context-param>
<!-- 设计路径变量值 --> <context-param> <param-name>webAppRootKey</param-name> <param-value>SSMDemo.root</param-value> </context-param> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:conf/log4j.xml</param-value> </context-param>
<!-- Spring字符集过滤器 --> <filter> <filter-name>SpringEncodingFilter</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>SpringEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
<!-- springMVC核心配置 --> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:conf/spring-mvc.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>home.do</welcome-file> </welcome-file-list></web-app>Tomcat配置
此处不再说如何安装tomcat,仅以idea中如何配置为主。若仅是在idea中使用,开发环境下可以从官网下载压缩包解压出来就好,不需要做任何环境变量上的配置。 从图中所在位置进入设置页面:
如图点击1处加号,在列表中找到tomcat,选择本地Local:[
][SSM 10] 若里面没有tomcat配置,如下进入配置页:
点击如下图选择tomcat所在文件夹后,自动出现相关配置,之后
配置好tomcat本身后,会看到右下角依旧有个**fix的警告,**点击该警告,选择里面带explorer即可,之后就可ok配置完成: 
使用tomcat的library中的HttpServletxdg相关jar包
在未配置前HttpServletRequest将被提示未找到。 点击菜单中**File —> Project Structure —>Modules,(亦可用快捷键Ctrl+Alt+Shift+S)**如图点击右侧加号选中library:
在弹出框中选择tomcat即可,如图:
最终ok保存即可。
运行tomcat
根据需要点击run菜单中的Run和Debug即可运行,或者运行下图中的快捷按键1-run,2-Debug: 
创建entity以及对于mapper.xml文件
此时若直接启动由于没有mapper.xml文件导致spring.xml中的 MyBatis 配置部分找不到*Mapper.xml文件,从而报错。此处临时建一个user类以及对应的mapper.xml用于测试。
User.java
创建一个user类。
** * Description: * User: windCoder * Date: 2017-08-01 * Time: 18:13 下午 */public class User { private Integer id; private String uname; private String createtime;
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getUname() { return uname; }
public void setUname(String uname) { this.uname = uname; }
public String getCreatetime() { return createtime; }
public void setCreatetime(String createtime) { this.createtime = createtime; }}UserMapper.xml
User类对应的Mapper.xml,里面包含一个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="User">
<!-- 用户模型 --> <resultMap type="com.windCoder.SSMDemo.entity.User" id="user"> <id column="id" property="id"/> <result column="uname" property="uname"/> <result column="createtime" property="createtime"/> </resultMap>
<insert id="addUser"> INSERT INTO `user`(uname,createtime) SELECT #{uname},#{createtime} FROM dual WHERE NOT EXISTS( SELECT id FROM `user` WHERE uname = #{uname} AND createtime = #{createtime} ); </insert>
<select id="findAllUser" resultMap="user"> SELECT id,uname,createtime FROM `user`; </select>
</mapper>创建HomeController.java
这个是用来测试的类
/** * Description: * User: windCoder * Date: 2017-08-11 * Time: 16:53 下午 */@Controller@RequestMapping("/*")public class HomeController {
@RequestMapping("home.do") public String home(HttpServletRequest request) { return "home"; }
}创建home.jsp
这是将要跳转的到的一个简单home.jsp前端文件。
<%-- Created by IntelliJ IDEA. User: WindCoder Date: 2017/8/11 Time: 17:12 下午 To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body><h1>Hello WindCoder</h1></body></html>之后再运行,将会出现如图Hello WindCoder的字样,则说明成功了(前提是记得): 
附录
Maven中的GroupID和ArtifactID及Version
groupId:这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。又如: 本站的可以命名为com.windcoder。 artifactId:这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。 version:这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如: com.company.bank:consumer-banking<1>1>.0 com.company.bank:consumer-banking<1>1>.1.
log4j 1的配置
web.xml
此处仅是log4j 相关配置,其他配置相同。
<context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:conf/log4j.properties</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>log4j.properties
log4j.rootCategory=info,stdout,fileout,error
log4j.appender.debug=org.apache.log4j.ConsoleAppenderlog4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH/:mm/:ss.SSS} %-5p [%F/:%L]%x %m%n %X{ip}
log4j.appender.fileout=org.apache.log4j.RollingFileAppenderlog4j.appender.fileout.File=c:/logs/ssmdemo.loglog4j.appender.fileout.MaxFileSize=5000KBlog4j.appender.fileout.MaxBackupIndex=10log4j.appender.fileout.layout=org.apache.log4j.PatternLayoutlog4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n %X{ip}
####显示SQL语句部分#log4j.logger.com.ibatis=debug#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug#log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug#log4j.logger.java.sql.Connection=debug#log4j.logger.java.sql.Statement=debug#log4j.logger.java.sql.PreparedStatement=debug
评论