Java笔记··By/蜜汁炒酸奶

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 ProjectSSM笔记(一)框架整合 若非第一次,请按如下步骤打开新建项目界面 File -> New Project SSM笔记(一)框架整合 以上两种方法均进入如下页面 SSM笔记(一)框架整合 [callout class=“info” title=“”] 1.选择使用maven创建项目。 2.选择项目使用的SDK。 3.选中 Create from archetype(选择Maven原型模板),在下面选择maven-archetype-webapp**。 [/callout] 之后填入**GroupIDArtifactID 。这里请尽量按maven命名规范填写(详情可见之后的附录)。 SSM笔记(一)框架整合 [callout class=“info” title=“”] groupId:所述的项目名称,由于有的项目并不是一个jar包构成的,而是由很多的jar包组成的。因此这个groupId就是整个项目的名称。 artifactId:包的名称。 version:版本号。 [/callout] 之后点击下一步,进入一个基础构建配置界面,此处默认直接下一步的情况下,容易导致创建缓慢或长时间停在Generating project in Batch mode不动的情况,在此处配置archetypeCatalog = internal**即可解决该问题,如图: SSM笔记(一)框架整合 之后点击下一步,填入项目名称,这里建议和之前填写的ArtifactID名称一样即可(最新版的已经会自动填写ArtifactID名称),同时自行选择创建路径,亦可用上面显示的默认路径,如图: SSM笔记(一)框架整合 点击finish,等待maven创建项目,如下图时创建完成: SSM笔记(一)框架整合

Maven文件结构配置与简析

首先如图创建java,以及相关目录,用于之后存储java代码。 SSM笔记(一)框架整合 点击菜单中**File --> Project Structure -->Modules,**如图进行配置: SSM笔记(一)框架整合 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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207

[/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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170

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

基础配置文件

jdbc.properties

数据库配置文件。 [toggle hide=“yes” title=“new–基于druid连接池” color=“#ff0000”] 此处后面一些配置属性为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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

[/toggle] [toggle hide=“yes” title=“old–基于c3p0连接池” color=“#fd874f”] 此处后面一些配置属性为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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

[/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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

[/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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

上面将文件上传部分的配置去掉了,若放开,需在前面的pom.xml引入上传用的jar包,如下:

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.2</version>
</dependency>
1
2
3
4
5

[/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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

Tomcat配置

此处不再说如何安装tomcat,仅以idea中如何配置为主。若仅是在idea中使用,开发环境下可以从官网下载压缩包解压出来就好,不需要做任何环境变量上的配置。 从图中所在位置进入设置页面: SSM笔记(一)框架整合 如图点击1处加号,在列表中找到tomcat,选择本地Local: SSM笔记(一)框架整合 若里面没有tomcat配置,如下进入配置页: SSM笔记(一)框架整合 点击如下图选择tomcat所在文件夹后,自动出现相关配置,之后   SSM笔记(一)框架整合 配置好tomcat本身后,会看到右下角依旧有个**fix的警告,**点击该警告,选择里面带explorer即可,之后就可ok配置完成: SSM笔记(一)框架整合

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

在未配置前HttpServletRequest将被提示未找到。 点击菜单中**File --> Project Structure -->Modules,(亦可用快捷键Ctrl+Alt+Shift+S)**如图点击右侧加号选中library: SSM笔记(一)框架整合 在弹出框中选择tomcat即可,如图: SSM笔记(一)框架整合 最终ok保存即可。

运行tomcat

根据需要点击run菜单中的RunDebug即可运行,或者运行下图中的快捷按键1-run,2-Debug: SSM笔记(一)框架整合

创建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;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

创建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";
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

创建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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

之后再运行,将会出现如图Hello WindCoder的字样,则说明成功了(前提是记得): SSM笔记(一)框架整合

附录

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>
1
2
3
4
5
6
7

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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

预览
Loading comments...
0 条评论

暂无数据

example
预览