springmvc与springboot没多大区别,springboot一个jar包配置几乎包含了所有springmvc,也不需要繁琐的xml配置,springmvc需要配置多种jar包,需要繁琐的xml配置,当然springmvc也可以使用java类来配置,但这种感觉没有xml配置来的直观。
下面是springmvc+mybatis动态多数据源完整代码:
数据源配置db.properties
1
2 #datasource.driver=com.mysql.jdbc.Driver
3
4 #datasource.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
5
6 #datasource.url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=db1
7
8 #数据源1
9
10 datasource1.driver=com.mysql.jdbc.Driver
11
12 datasource1.url=jdbc:mysql://127.0.0.1:3306/db1?useUnicode=true&characterEncoding=utf-8&useSSL=false
13
14 datasource1.username=root
15
16 datasource1.password=root
17
18 #数据源2
19
20 datasource2.driver=com.mysql.jdbc.Driver
21
22 datasource2.url=jdbc:mysql://127.0.0.1:3306/db2?useUnicode=true&characterEncoding=utf-8&useSSL=false
23
24 datasource2.username=root
25
26 datasource2.password=root
27
28 #通用配置
29
30 jdbc.initialSize=5
31
32 jdbc.minIdle=5
33
34 jdbc.maxIdle=20
35
36 jdbc.maxActive=100
37
38 jdbc.maxWait=100000
39
40 jdbc.defaultAutoCommit=false
41
42 jdbc.removeAbandoned=true
43
44 jdbc.removeAbandonedTimeout=600
45
46 jdbc.testWhileIdle=true
47
48 jdbc.timeBetweenEvictionRunsMillis=60000
49
50 jdbc.numTestsPerEvictionRun=20
springmvc配置
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <beans xmlns="http://www.springframework.org/schema/beans"
4
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6
7 xmlns:tx="http://www.springframework.org/schema/tx"
8
9 xmlns:aop="http://www.springframework.org/schema/aop"
10
11 xmlns:context="http://www.springframework.org/schema/context"
12
13 xmlns:mvc="http://www.springframework.org/schema/mvc"
14
15 xsi:schemaLocation="
16
17 http://www.springframework.org/schema/beans
18
19 http://www.springframework.org/schema/beans/spring-beans.xsd
20
21 http://www.springframework.org/schema/tx
22
23 http://www.springframework.org/schema/tx/spring-tx.xsd
24
25 http://www.springframework.org/schema/context
26
27 http://www.springframework.org/schema/context/spring-context.xsd
28
29 http://www.springframework.org/schema/mvc
30
31 http://www.springframework.org/schema/mvc/spring-mvc.xsd
32
33 http://www.springframework.org/schema/aop
34
35 http://www.springframework.org/schema/aop/spring-aop.xsd ">
36
37
38
39 <!--使用spring注解支持@RequestMapping, @Controller-->
40
41 <mvc:annotation-driven />
42
43 <!-- 扫描包下面spring注解,多个包以逗号分隔 -->
44
45 <context:component-scan base-package="com.ss"/>
46
47 <!-- 使用annotation自动注册bean,并保证@Required,@Autowired的属性被注入 -->
48
49 <context:component-scan base-package="com.ss.controller">
50
51 <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
52
53 </context:component-scan>
54
55
56
57 <!-- 将无法mapping到Controller的path交给default servlet handler处理 -->
58
59 <mvc:default-servlet-handler />
60
61
62
63 <!-- 定义页面文件的位置 -->
64
65 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
66
67 <property name="prefix" value="/WEB-INF/views/" />
68
69 <property name="suffix" value=".html" />
70
71 </bean>
72
73
74
75 <!-- 限制文件上传大小
76
77 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
78
79 <property name="defaultEncoding" value="UTF-8" />
80
81 <property name="maxUploadSize" value="5242880" />
82
83 </bean>
84
85 -->
86
87
88
89 <!-- 让spring 去读取指定路径下的资源文件 注:maven下的pom.xml已经加载了资源文件了 -->
90
91 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
92
93 <property name="locations" value="classpath:db.properties"/>
94
95 </bean>
96
97
98
99 <!-- 数据源1-->
100
101 <bean id="datasource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
102
103 <property name="driverClassName" value="${datasource1.driver}"/>
104
105 <property name="url" value="${datasource1.url}"/>
106
107 <property name="username" value="${datasource1.username}"/>
108
109 <property name="password" value="${datasource1.password}"/>
110
111 <property name="initialSize" value="${jdbc.initialSize}"/>
112
113 <property name="minIdle" value="${jdbc.minIdle}"/>
114
115 <property name="maxIdle" value="${jdbc.maxIdle}"/>
116
117 <property name="maxActive" value="${jdbc.maxActive}"/>
118
119 <property name="maxWait" value="${jdbc.maxWait}"/>
120
121 <property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}"/>
122
123 <property name="removeAbandoned" value="${jdbc.removeAbandoned}"/>
124
125 <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}"/>
126
127 <property name="testWhileIdle" value="${jdbc.testWhileIdle}"/>
128
129 <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>
130
131 <property name="numTestsPerEvictionRun" value="${jdbc.numTestsPerEvictionRun}"/>
132
133 <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>
134
135 </bean>
136
137 <!-- 数据源2-->
138
139 <bean id="datasource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
140
141 <property name="driverClassName" value="${datasource2.driver}"/>
142
143 <property name="url" value="${datasource2.url}"/>
144
145 <property name="username" value="${datasource2.username}"/>
146
147 <property name="password" value="${datasource2.password}"/>
148
149 <property name="initialSize" value="${jdbc.initialSize}"/>
150
151 <property name="minIdle" value="${jdbc.minIdle}"/>
152
153 <property name="maxIdle" value="${jdbc.maxIdle}"/>
154
155 <property name="maxActive" value="${jdbc.maxActive}"/>
156
157 <property name="maxWait" value="${jdbc.maxWait}"/>
158
159 <property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}"/>
160
161 <property name="removeAbandoned" value="${jdbc.removeAbandoned}"/>
162
163 <property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}"/>
164
165 <property name="testWhileIdle" value="${jdbc.testWhileIdle}"/>
166
167 <property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>
168
169 <property name="numTestsPerEvictionRun" value="${jdbc.numTestsPerEvictionRun}"/>
170
171 <property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>
172
173 </bean>
174
175
176
177 <!-- 配置动态配置数据源 -->
178
179 <bean id ="dynamicDataSource" class= "com.ss.config.DynamicDataSource">
180
181 <!-- 默认使用dataSource1的数据源 -->
182
183 <property name ="defaultTargetDataSource" ref="datasource1"></property>
184
185 <property name ="targetDataSources">
187 <map key-type ="java.lang.String">
189 <entry key= "datasource1" value-ref="datasource1"></entry>
191 <entry key= "datasource2" value-ref="datasource2"></entry>
193 </map>
195 </property>
199 </bean>
203 <!-- mybatis事物相关配置 -->
204
205 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
206
207 <!-- 指定数据源——这里为动态多数据源 -->
208
209 <property name="dataSource" ref="dynamicDataSource" />
210
211 <!-- 指定mybatis-config.xml -->
212
213 <property name="configLocation" value="classpath:mybatis-config.xml"></property>
214
215 <!-- 指定实体类包 -->
216
217 <property name="typeAliasesPackage" value="com.ss.model"/>
218
219 <!-- 指定dao层对应的sql配置 -->
220
221 <property name="mapperLocations" value="classpath:mapper/*.xml" />
222
223 </bean>
224
225 <!-- 扫描包下所有以@Mapper标识的接口-->
226
227 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
228
229 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
230
231 <property name="basePackage" value="com.ss.dao" />
232
233 </bean>
239 <!-- 事务管理 -->
240
241 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
242
243 <property name="dataSource" ref="dynamicDataSource"></property>
244
245 </bean>
246
247 <!-- 使用声明式事务 -->
248
249 <tx:annotation-driven transaction-manager="txManager" />
253 <!-- 指定什么方法开始事务 attributes下面指定什么样的方法注入事务 -->
254
255 <tx:advice id="txAdvice" transaction-manager="txManager">
256
257 <tx:attributes>
258
259 <tx:method name="add*" propagation="REQUIRED"/>
260
261 <tx:method name="save*" propagation="REQUIRED"/>
262
263 <tx:method name="del*" propagation="REQUIRED"/>
264
265 <tx:method name="insert*" propagation="REQUIRED"/>
266
267 <tx:method name="update*" propagation="REQUIRED"/>
268
269 <tx:method name="modify*" propagation="REQUIRED"/>
270
271 <tx:method name="*" read-only="true"/>
272
273 </tx:attributes>
274
275 </tx:advice>
276
277
278
279 <!-- 开启注解配置 -->
280
281 <context:annotation-config />
285 <!-- 开启注解Aop -->
286
287 <aop:aspectj-autoproxy proxy-target-class="true"/>
291 <!-- 配置数据库注解aop -->
292
293 <bean id="dataSourceAspect" class="com.ss.config.DynamicDataSourceAspect" />
298
299 <aop:config>
300
301 <!--
302
303 切割点:pointcut
304
305 第一个*:任意返回值
306
307 第二个*:类名(任意类)
308
309 第三个*:方法名(任意方法)
310
311 (..):0-n参数,类型任意
312
313 -->
314
315 <aop:pointcut id="pointCut" expression="execution(* com.ss.service.*.*(..))" />
316
317 <!--切割注入事物 ,植入事务:advisor-->
318
319 <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
320
321 <!-- 动态数据源切割
322
323 <aop:aspect id="dynamicAspect" ref="dataSourceAspect">
324
325 <aop:after pointcut-ref="pointCut" method="afterSwitchDS"/>
326
327 <aop:before pointcut-ref="pointCut" method="beforeSwitchDS"/>
328
329 </aop:aspect>
330
331 -->
332
333 </aop:config>
337 </beans>
mybatis配置
1
2 <?xml version="1.0" encoding="UTF-8" ?>
3
4 <!DOCTYPE configuration
5
6 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
7
8 "http://mybatis.org/dtd/mybatis-3-config.dtd">
9
10 <configuration>
11
12 <properties>
13
14 <property name="dialectClass" value="com.eliteams.quick4j.core.feature.orm.dialect.MySql5Dialect"/>
15
16 </properties>
17
18
19
20 <!-- 配置mybatis的缓存,延迟加载等等一系列属性 -->
21
22 <settings>
23
24 <!-- 全局映射器启用缓存 -->
25
26 <setting name="cacheEnabled" value="true"/>
27
28 <!-- 查询时,关闭关联对象即时加载以提高性能 -->
29
30 <setting name="lazyLoadingEnabled" value="true"/>
31
32 <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
33
34 <setting name="multipleResultSetsEnabled" value="true"/>
35
36 <!-- 允许使用列标签代替列名 -->
37
38 <setting name="useColumnLabel" value="true"/>
39
40 <!-- 不允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
41
42 <setting name="useGeneratedKeys" value="false"/>
43
44 <!-- 给予被嵌套的resultMap以字段-属性的映射支持 FULL,PARTIAL -->
45
46 <setting name="autoMappingBehavior" value="PARTIAL"/>
47
48 <!-- 对于批量更新操作缓存SQL以提高性能 BATCH,SIMPLE -->
49
50 <!-- <setting name="defaultExecutorType" value="BATCH" /> -->
51
52 <!-- 数据库超过25000秒仍未响应则超时 -->
53
54 <!-- <setting name="defaultStatementTimeout" value="25000" /> -->
55
56 <!-- Allows using RowBounds on nested statements -->
57
58 <setting name="safeRowBoundsEnabled" value="false"/>
59
60 <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn. -->
61
62 <setting name="mapUnderscoreToCamelCase" value="true"/>
63
64 <!-- MyBatis uses local cache to prevent circular references and speed up repeated nested queries. By default (SESSION) all queries executed during a session are cached. If localCacheScope=STATEMENT
65
66 local session will be used just for statement execution, no data will be shared between two different calls to the same SqlSession. -->
67
68 <setting name="localCacheScope" value="SESSION"/>
69
70 <!-- Specifies the JDBC type for null values when no specific JDBC type was provided for the parameter. Some drivers require specifying the column JDBC type but others work with generic values
71
72 like NULL, VARCHAR or OTHER. -->
73
74 <setting name="jdbcTypeForNull" value="OTHER"/>
75
76 <!-- Specifies which Object's methods trigger a lazy load -->
77
78 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
79
80 <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
81
82 <setting name="aggressiveLazyLoading" value="false"/>
83
84
85
86 </settings>
87
88 <!--
89
90 <typeAliases>
91
92 <package name="com.ss.dao"/>
93
94 </typeAliases>
95
96 -->
97
98 <!--<plugins>-->
99
100 <!--<plugin interceptor="com.eliteams.quick4j.core.feature.orm.mybatis.PaginationResultSetHandlerInterceptor"/>-->
101
102 <!--<plugin interceptor="com.eliteams.quick4j.core.feature.orm.mybatis.PaginationStatementHandlerInterceptor"/>-->
103
104 <!--</plugins>-->
105
106 </configuration>
数据源切换保存类
1 package com.ss.config;
2
3
4
5 /**
6
7 * Created by pure on 2018-05-06.
8
9 */
10
11 public class DataSourceContextHolder {
12
13 /**
14
15 * 默认数据源
16
17 */
18
19 public static final String DEFAULT_DS = "datasource1";
20
21
22
23 private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
24
25
26
27 // 设置数据源名
28
29 public static void setDB(String dbType) {
30
31 System.out.println("切换到{"+dbType+"}数据源");
32
33 contextHolder.set(dbType);
34
35 }
36
37
38
39 // 获取数据源名
40
41 public static String getDB() {
42
43 //return (contextHolder.get());
44
45 if(contextHolder.get()==null){
46
47 return DEFAULT_DS;
48
49 }else{
50
51 return (contextHolder.get());
52
53 }
54
55 }
56
57
58
59 // 清除数据源名
60
61 public static void clearDB() {
62
63 contextHolder.remove();
64
65 }
66
67 }
动态数据源类
1 package com.ss.config;
2
3
4
5 import org.springframework.core.annotation.Order;
6
7 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
8
9
10
11 /**
12
13 * Created by pure on 2018-05-08.
14
15 */
16
17 @Order(2)
18
19 public class DynamicDataSource extends AbstractRoutingDataSource {
20
21 @Override
22
23 protected Object determineCurrentLookupKey() {
24
25 System.out.println("当前数据源为"+DataSourceContextHolder.getDB());
26
27 return DataSourceContextHolder.getDB();
28
29 }
30
31 }
自定义注解
1 package com.ss.config;
2
3
4
5 import java.lang.annotation.*;
6
7
8
9 /**
10
11 * 自定义注解
12
13 */
14
15 @Retention(RetentionPolicy.RUNTIME)
16
17 @Target({ElementType.METHOD})
18
19 @Documented
20
21 public @interface DS {
22
23 String value() default "datasource1";
24
25 }
注解Aop切割类
1 package com.ss.config;
2
3
4
5 import org.aspectj.lang.JoinPoint;
6
7 import org.aspectj.lang.annotation.After;
8
9 import org.aspectj.lang.annotation.Aspect;
10
11 import org.aspectj.lang.annotation.Before;
12
13 import org.aspectj.lang.reflect.MethodSignature;
14
15 import org.springframework.core.annotation.Order;
16
17 import org.springframework.stereotype.Component;
18
19
20
21 import java.lang.reflect.Method;
22
23
24
25 /**
26
27 * 自定义注解 + AOP的方式实现数据源动态切换。
28
29 * Created by pure on 2018-05-06.
30
31 */
32
33 @Order(1)
34
35 @Aspect
36
37 //@Component
38
39 public class DynamicDataSourceAspect {
40
41 /*
42
43 //使用DS注解动作之后清除
44
45 @After("@annotation(DS)")
46
47 public void afterSwitchDS(JoinPoint point){
48
49 System.out.println("清除当前数据源"+DataSourceContextHolder.getDB());
50
51 DataSourceContextHolder.clearDB();
52
53 }
54
55 //*/
56
57 //使用DS注解动态切换
58
59 @Before("@annotation(DS)")
60
61 public void beforeSwitchDS(JoinPoint point){
62
63 //获得当前访问的class
64
65 Class<?> className = point.getTarget().getClass();
66
67 //获得访问的方法名
68
69 String methodName = point.getSignature().getName();
70
71 //得到方法的参数的类型
72
73 Class[] argClass = ((MethodSignature)point.getSignature()).getParameterTypes();
74
75 String dataSource = DataSourceContextHolder.DEFAULT_DS;
76
77 try {
78
79 // 得到访问的方法对象
80
81 Method method = className.getMethod(methodName, argClass);
82
83 // 判断是否存在@DS注解
84
85 if (method.isAnnotationPresent(DS.class)) {
86
87 DS annotation = method.getAnnotation(DS.class);
88
89 // 取出注解中的数据源名
90
91 dataSource = annotation.value();
92
93 }
94
95 } catch (Exception e) {
96
97 e.printStackTrace();
98
99 }
100
101 // 切换数据源
102
103 DataSourceContextHolder.setDB(dataSource);
104
105 }
106
107
108
109 }
Mapper映射xml
1 <?xml version="1.0" encoding="UTF-8" ?>
2
3 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
4
5
6
7 <mapper namespace="com.ss.dao.UserDao">
8
9 <!-- 查询所有user -->
10
11 <select id="getAllUser" resultType="java.util.Map">
12
13 select * from user
14
15 </select>
16
17 </mapper>
dao层
1 package com.ss.dao;
2
3 import org.apache.ibatis.annotations.Mapper;
4
5 import org.apache.ibatis.annotations.Param;
6
7 import java.util.List;
8
9 import java.util.Map;
10
11
12 /**
13
14 * dao层
15
16 * Created by pure on 2018-05-06.
17
18 */
19
20 @Mapper
21
22 public interface UserDao {
23
24 //使用xml配置形式查询
25
26 public List<Map> getAllUser();
27
28 }
service层
1 package com.ss.service;
2
3 import com.ss.config.DS;
4
5 import com.ss.dao.UserDao;
6
7 import org.springframework.beans.factory.annotation.Autowired;
8
9 import org.springframework.stereotype.Service;
10
11 import java.util.List;
12
13 import java.util.Map;
14
15 /**
16
17 * service层
18
19 * Created by pure on 2018-05-06.
20
21 */
22
23 @Service
24
25 public class UserService {
26
27 @Autowired
28
29 private UserDao userDao;
30
31 //使用数据源1查询
32
33 @DS("datasource1")
34
35 public List<Map> getAllUser1(){
36
37 return userDao.getAllUser();
38
39 }
40
41 //使用数据源2查询
42
43 @DS("datasource2")
44
45 public List<Map> getAllUser2(){
46
47 return userDao.getAllUser();
48
49 }
50
51 }
controller层
1 package com.ss.controller;
2
3 import com.ss.config.DataSourceContextHolder;
4
5 import com.ss.service.UserService;
6
7 import org.springframework.beans.factory.annotation.Autowired;
8
9 import org.springframework.stereotype.Controller;
10
11 import org.springframework.web.bind.annotation.RequestMapping;
12
13 import org.springframework.web.bind.annotation.ResponseBody;
14
15 import java.util.List;
16
17 import java.util.Map;
18
19 /**
20
21 * Created by pure on 2018-05-08.
22
23 */
24
25 @Controller
26
27 @RequestMapping("/user")
28
29 public class UserController {
30
31
32 @Autowired
33
34 private UserService userService;
35
36
37 @RequestMapping(value = "/getDb1AllUser")
38
39 @ResponseBody
40
41 public List<Map> getDb1AllUser() {
42
43 List<Map> list = userService.getAllUser1();
44
45 return list;
46
47 }
48
49
50 @RequestMapping(value = "/getDb2AllUser")
51
52 @ResponseBody
53
54 public List<Map> getDb2AllUser() {
55
56 List<Map> list = userService.getAllUser2();
57
58 return list;
59
60 }
61
62 }
maven配置pom.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <project xmlns="http://maven.apache.org/POM/4.0.0"
4
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6
7 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
8
9 <modelVersion>4.0.0</modelVersion>
10
11
12 <groupId>com.springmvc</groupId>
13
14 <artifactId>ss1</artifactId>
15
16 <version>1.0-SNAPSHOT</version>
17
18 <packaging>war</packaging>
19
20
21 <properties>
22
23 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
24
25 </properties>
26
27 <dependencies>
28
29
30
31 <!-- jsp页面jstl相关标签包 -->
32
33 <dependency>
34
35 <groupId>javax.servlet</groupId>
36
37 <artifactId>jstl</artifactId>
38
39 <version>1.2</version>
40
41 </dependency>
42
43 <dependency>
44
45 <groupId>taglibs</groupId>
46
47 <artifactId>standard</artifactId>
48
49 <version>1.1.2</version>
50
51 </dependency>
52
53 <dependency>
54
55 <groupId>javax.servlet.jsp</groupId>
56
57 <artifactId>jsp-api</artifactId>
58
59 <version>2.2</version>
60
61 </dependency>
62
63
64 <!-- springMvc相关架包maven配置 -->
65
66 <dependency>
67
68 <groupId>org.springframework</groupId>
69
70 <artifactId>spring-context</artifactId>
71
72 <version>4.3.9.RELEASE</version>
73
74 </dependency>
75
76 <dependency>
77
78 <groupId>org.springframework</groupId>
79
80 <artifactId>spring-core</artifactId>
81
82 <version>4.3.9.RELEASE</version>
83
84 </dependency>
85
86 <dependency>
87
88 <groupId>org.springframework</groupId>
89
90 <artifactId>spring-beans</artifactId>
91
92 <version>4.3.9.RELEASE</version>
93
94 </dependency>
95
96 <dependency>
97
98 <groupId>org.springframework</groupId>
99
100 <artifactId>spring-web</artifactId>
101
102 <version>4.3.9.RELEASE</version>
103
104 </dependency>
105
106 <dependency>
107
108 <groupId>org.springframework</groupId>
109
110 <artifactId>spring-webmvc</artifactId>
111
112 <version>4.3.9.RELEASE</version>
113
114 </dependency>
115
116 <dependency>
117
118 <groupId>org.springframework</groupId>
119
120 <artifactId>spring-aop</artifactId>
121
122 <version>4.3.9.RELEASE</version>
123
124 </dependency>
125
126 <dependency>
127
128 <groupId>org.springframework</groupId>
129
130 <artifactId>spring-test</artifactId>
131
132 <version>4.3.9.RELEASE</version>
133
134 <scope>test</scope>
135
136 </dependency>
137
138 <dependency>
139
140 <groupId>org.springframework</groupId>
141
142 <artifactId>spring-context-support</artifactId>
143
144 <version>4.3.9.RELEASE</version> <!-- 4.3.9.RELEASE 3.1.3.RELEASE-->
145
146 </dependency>
147
148 <dependency>
149
150 <groupId>commons-dbcp</groupId>
151
152 <artifactId>commons-dbcp</artifactId>
153
154 <version>1.4</version>
155
156 </dependency>
157
158 <dependency>
159
160 <groupId>org.springframework</groupId>
161
162 <artifactId>spring-jdbc</artifactId>
163
164 <version>4.3.9.RELEASE</version>
165
166 </dependency>
167
168 <dependency>
169
170 <groupId>org.springframework</groupId>
171
172 <artifactId>spring-orm</artifactId>
173
174 <version>4.3.9.RELEASE</version>
175
176 </dependency>
177
178
179 <dependency>
180
181 <groupId>org.aspectj</groupId>
182
183 <artifactId>aspectjrt</artifactId>
184
185 <version>1.8.10</version>
186
187 </dependency>
188
189 <dependency>
190
191 <groupId>org.aspectj</groupId>
192
193 <artifactId>aspectjweaver</artifactId>
194
195 <version>1.8.10</version>
196
197 </dependency>
198
199
200 <!-- mybatis相关配置架包 -->
201
202 <dependency>
203
204 <groupId>org.mybatis</groupId>
205
206 <artifactId>mybatis</artifactId>
207
208 <version>3.4.4</version>
209
210 </dependency>
211
212 <!-- spring-mybatis整合包 -->
213
214 <dependency>
215
216 <groupId>org.mybatis</groupId>
217
218 <artifactId>mybatis-spring</artifactId>
219
220 <version>1.3.1</version>
221
222 </dependency>
223
224
225 <!-- mysql连接包 -->
226
227 <dependency>
228
229 <groupId>mysql</groupId>
230
231 <artifactId>mysql-connector-java</artifactId>
232
233 <version>5.1.42</version>
234
235 </dependency>
236
237
238 <dependency>
239
240 <groupId>com.google.code.gson</groupId>
241
242 <artifactId>gson</artifactId>
243
244 <version>2.6.2</version>
245
246 </dependency>
247
248
249
250 <dependency>
251
252 <groupId>log4j</groupId>
253
254 <artifactId>log4j</artifactId>
255
256 <version>1.2.17</version>
257
258 </dependency>
259
260 </dependencies>
261
262
263
264 <build>
265
266 <plugins>
267
268 <plugin>
269
270 <artifactId>maven-compiler-plugin</artifactId>
271
272 <version>3.1</version>
273
274 <configuration>
275
276 <source>1.7</source>
277
278 <target>1.7</target>
279
280 </configuration>
281
282 </plugin>
283
284 </plugins>
285
286 </build>
287
288 </project>
web.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
4
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6
7 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
8
9 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
10
11 version="3.0">
12
13 <context-param>
14
15 <param-name>contextConfigLocation</param-name>
16
17 <param-value>
18
19 classpath:/spring-mvc.xml
20
21 </param-value><!-- classpath*:/spring-mvc.xml,classpath*:spring-quartz.xml -->
22
23 </context-param>
24
25 <listener>
26
27 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
28
29 </listener>
30
31
32
33 <!-- Spring -->
34
35 <servlet>
36
37 <servlet-name>springServlet</servlet-name>
38
39 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
40
41 <init-param>
42
43 <param-name>contextConfigLocation</param-name>
44
45 <param-value>classpath:/spring-mvc.xml</param-value>
46
47 </init-param>
48
49 <load-on-startup>1</load-on-startup>
50
51 </servlet>
52
53 <servlet-mapping>
54
55 <servlet-name>springServlet</servlet-name>
56
57 <url-pattern>/</url-pattern>
58
59 </servlet-mapping>
60
61
62
63 <filter>
64
65 <filter-name>encodingFilter</filter-name>
66
67 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
68
69 <init-param>
70
71 <param-name>encoding</param-name>
72
73 <param-value>UTF-8</param-value>
74
75 </init-param>
76
77 <init-param>
78
79 <param-name>forceEncoding</param-name>
80
81 <param-value>true</param-value>
82
83 </init-param>
84
85 </filter>
86
87 <filter-mapping>
88
89 <filter-name>encodingFilter</filter-name>
90
91 <url-pattern>/*</url-pattern>
92
93 </filter-mapping>
94
95
96
97 <welcome-file-list>
98
99 <welcome-file>index.jsp</welcome-file>
100
101 </welcome-file-list>
102
103 </web-app>
项目结构
运行结果: