• springmvc+mybatis多数据源配置,AOP注解动态切换数据源


    springmvc与springboot没多大区别,springboot一个jar包配置几乎包含了所有springmvc,也不需要繁琐的xml配置,springmvc需要配置多种jar包,需要繁琐的xml配置,当然springmvc也可以使用java类来配置,但这种感觉没有xml配置来的直观。 

    springboot+mybatis多数据源看这里

    下面是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>

    项目结构

    运行结果:

    代码下载:https://download.csdn.net/download/xiaosheng_papa/10417516

  • 相关阅读:
    WebFrom 小程序【分页功能 】
    WebForm 【Repeater】展示数据
    WebForm 小项目【人员管理系统】分析
    WebFrom 【内置对象】— —跳转页面,页面传值
    WebForm 【复合控件】
    WebForm 【简单控件】【表单元素】
    WebForm 基础学习
    js对元素属性.内容的操作。定时器。元素的平级,父级,子集关系。
    常用事件【由浅入深】1
    document 对象
  • 原文地址:https://www.cnblogs.com/weixupeng/p/9720472.html
Copyright © 2020-2023  润新知