SSM笔记(一)框架整合

前言

用了好久了,但都是当初大神配置完后直接粘贴复制过来的,一直没仔细看过相关配置,趁此机会对自己也算是一个复习与深入,也希望对初学者有所帮助。本系列均是基于IDEA的教程。在学校时用的Eclipse,刚出校门接触的MyEclipse,一年后接触到IDEA就从此彻底倒戈。

对于IDEA,有条件的推荐购买,没条件的嘛。。。。你懂得,这里暂且免费送个激活传送门:

IntelliJ IDEA 2016.1激活历程

最初使用的基于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

以上两种方法均进入如下页面

1.选择使用maven创建项目。

2.选择项目使用的SDK。

3.选中 Create from archetype(选择Maven原型模板),在下面选择maven-archetype-webapp

之后填入GroupIDArtifactID 。这里请尽量按maven命名规范填写(详情可见之后的附录)。

groupId:所述的项目名称,由于有的项目并不是一个jar包构成的,而是由很多的jar包组成的。因此这个groupId就是整个项目的名称。

artifactId:包的名称。

version:版本号。

之后点击下一步,进入一个基础构建配置界面,此处默认直接下一步的情况下,容易导致创建缓慢或长时间停在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

new--基于druid连接池

<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>

old--基于c3p0连接池

<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>

maven的东西暂时不再详细展开,以后有兴致再单开一篇。

基础配置文件

jdbc.properties

数据库配置文件。

new--基于druid连接池

此处后面一些配置属性为druid,不一定适用所有连接池,对于使用其他连接池的请酌情使用。

#mysql
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmdemo?useUnicode\=true&characterEncoding\=utf8&zeroDateTimeBehavior\=convertToNull&transformedBitIsBoolean\=true
userName=root
password=

#定义初始连接数
initialSize=5  
#连接池中保留的最小连接数,默认为:3
minIdle=5 
#连接池中保留的最大连接数,默认为:3
maxActive=30
#是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。
poolPreparedStatements=true
#要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
maxOpenPreparedStatements=30

old--基于c3p0连接池

此处后面一些配置属性为c3p0,不一定适用所有连接池,对于使用其他连接池的请酌情使用。

#mysql
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmdemo?useUnicode\=true&characterEncoding\=utf8&zeroDateTimeBehavior\=convertToNull&transformedBitIsBoolean\=true
userName=root
password=

#以下为c3p0专属属性
#定义初始连接数
initialPoolSize=5  
#连接池中保留的最小连接数,默认为:3
minPoolSize=5 
#连接池中保留的最小连接数,默认为:3
maxPoolSize=30
#连接耗尽时一次获取的连接数
acquireIncrement=10  
#最大空闲时间
maxIdleTime=30
#连接池为数据源缓存的PreparedStatement的总数
maxStatements=30

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的文件。以下两者根据之前的配置选其一即可。

new--基于druid连接池

<?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>

old--基于c3p0连接池

<?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>

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:

若里面没有tomcat配置,如下进入配置页:

点击如下图选择tomcat所在文件夹后,自动出现相关配置,之后

配置好tomcat本身后,会看到右下角依旧有个fix的警告,点击该警告,选择里面带explorer即可,之后就可ok配置完成:

使用tomcat的library中的HttpServletxdg相关jar包

在未配置前HttpServletRequest将被提示未找到。

点击菜单中File --> Project Structure -->Modules,(亦可用快捷键Ctrl+Alt+Shift+S)如图点击右侧加号选中library:

在弹出框中选择tomcat即可,如图:

最终ok保存即可。

运行tomcat

根据需要点击run菜单中的RunDebug即可运行,或者运行下图中的快捷按键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.0

com.company.bank:consumer-banking: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.ConsoleAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.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.RollingFileAppender
log4j.appender.fileout.File=c:/logs/ssmdemo.log
log4j.appender.fileout.MaxFileSize=5000KB
log4j.appender.fileout.MaxBackupIndex=10
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.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

相关下载

点击下载

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构师历程

ssh工作原理

1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件

1363
来自专栏杨建荣的学习笔记

Linux中的configure,make,make install到底在做些什么

在Linux下经常要安装部署一些软件包或者工具,拿到安装包之后一看,简单,configure,make, make install即可搞定。 有时...

3543
来自专栏JetpropelledSnake

RESTful源码学习笔记之RPC和Restful深入理解

RPC 即远程过程调用(Remote Procedure Call Protocol,简称RPC),像调用本地服务(方法)一样调用服务器的服务(方法)。通常的实...

963
来自专栏cloudskyme

Apache nutch1.5 & Apache solr3.6

第1章引言 1.1nutch和solr Nutch 是一个开源的、Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。 Solr 拥有像 w...

3684
来自专栏小怪聊职场

Java|Spring+SpringMVC+MyBatis框架科普

2685
来自专栏吕亚辉的专栏

【腾讯云的1001种玩法】CRUD生成器DBuilder介绍与腾讯云部署

Dbuilder是基于laravel4开发的一套快速实现数据库表CRUD(增删改查)操作的工具,核心思想是做到针对数据库表的每个字段做到精确配置,通过生成字段配...

3730
来自专栏杨建荣的学习笔记

MySQL源码安装总结(r12笔记第12天)

作为一个DBA, MySQL源码安装还是要做做的,虽然不是推荐线上批量安装部署,但是自己作为了解MySQL的一个学习过程,还是值得的。 相比商业...

3147
来自专栏黑泽君的专栏

day66_Solr学习笔记

目录结构详解如下:   bin:solr的运行脚本。   contrib:solr的一些扩展jar包,用于增强solr的功能。   dist:该目录包含bui...

1264
来自专栏IT笔记

JavaWeb项目架构之Kafka分布式日志队列

架构、分布式、日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Kafka做消息队列罢了。

77910
来自专栏散尽浮华

[原创]CI持续集成系统环境---部署gerrit环境完整记录

开发同事提议在线上部署一套gerrit代码审核环境,废话不多说,部署gerrit的操作记录如下: 提前安装好java环境,mysql环境,nginx环境 测试系...

3369

扫码关注云+社区

领取腾讯云代金券