1. 程式人生 > 實用技巧 >Java從入門到實戰之(32)Maven+SSM

Java從入門到實戰之(32)Maven+SSM

1、專案說明:

框架:Spring + Spring MVC + Mybatis +AspectJ

開發環境:jdk1.7,Tomcat7

使用框架AspectJ實現自動切換多資料來源,原理是AOP技術,類似於過濾器、監聽器、攔截器底層也都是與AOP技術相似,都是將某個你想要做處理的“塊”,當成切面或切點。Maven如何建立,我並沒有作說明,因為網上的例子實在是太多了,如果有需要我也會新增上的。

本文大部分大部分是程式碼的例項,一些說明我都寫在程式碼中的註釋中了,唯有AspectJ框架需要道友們自己上網查了,這塊的知識點還挺豐富的。最後,程式碼如有不足之處請多指教!

程式碼展示

1.pom.xml檔案

<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.test.multipleSource</groupId>
    <
artifactId>multipleSource-ssm</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>multipleSource-ssm Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <!-- spring版本號 -->
<spring.version>4.0.2.RELEASE</spring.version> <!-- mybatis版本號 --> <mybatis.version>3.2.6</mybatis.version> <!-- log4j日誌檔案管理包版本 --> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</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-webmvc</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> <!-- 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>1.2.2</version> </dependency> <!-- 匯入java ee jar 包 --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <!-- 匯入Mysql資料庫連結jar包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> <!-- JSTL標籤類 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- 日誌檔案管理包 --> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <!-- 上傳元件包 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <type>jar</type> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.8.0</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> <scope>compile</scope> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.5</version> <scope>compile</scope> </dependency> </dependencies> <build> <finalName>multipleSource-ssm</finalName> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat6-maven-plugin</artifactId> <version>2.1</version> <configuration> <url>http://localhost:9080</url> <server>tomcat6</server> <port>8080</port> <charset>UTF-8</charset> </configuration> </plugin> </plugins> </build> </project>

2.spring-mvc.xml檔案

<?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" xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
                        http://www.springframework.org/schema/beans  
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
 
    <!-- 設定AOP代理開啟 -->
    <!-- AOP的代理開啟放在必須在所有載入的 最前面 (意思是說這個檔案必須是第一個唄Spring容器載入的)-->
    <aop:aspectj-autoproxy proxy-target-class="true" />
    <!-- 自動掃描該包,使SpringMVC認為包下用了@controller註解的類是控制器 -->
    <!-- 此掃描路徑很重要,必須囊括你所自定義AOP的所在位置 -->
    <context:component-scan base-package="com.multiple" />
    
    <!--避免IE執行AJAX時,返回JSON出現下載檔案 -->
    <bean id="mappingJacksonHttpMessageConverter"
        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
            </list>
        </property>
    </bean>
    <!-- 啟動SpringMVC的註解功能,完成請求和註解POJO的對映 -->
    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJacksonHttpMessageConverter" />    <!-- JSON轉換器 -->
            </list>
        </property>
    </bean>
    <!-- 定義跳轉的檔案的前後綴 ,檢視模式配置 -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 這裡的配置我的理解是自動給後面action的方法return的字串加上字首和字尾,變成一個 可用的url地址 -->
        <property name="prefix" value="/" />
        <property name="suffix" value=".jsp" />
    </bean>
 
    <!-- 為Controller內的@ResponseBody的 json方法實現中文亂碼的解決 -->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
 
</beans>

3.spring-mybatis.xml

<?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-3.1.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    <!-- 自動掃描 -->
<!--     <context:component-scan base-package="com.multiple" /> -->
    <!-- 引入配置檔案 -->
    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>
 
    <bean id="dataSourceMaster" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${masterUrl}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
    </bean>
 
    <bean id="dataSourceSecondary" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${secondaryUrl}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
    </bean>
 
    <bean id="dynamicDataSource" class="com.multiple.utils.DynamicDataSource">
        <property name="targetDataSources">
            <map key-type="java.lang.String">
                <entry value-ref="dataSourceMaster" key="dataSourceMaster"></entry>
                <entry value-ref="dataSourceSecondary" key="dataSourceSecondary"></entry>
            </map>
        </property>
        <property name="defaultTargetDataSource" ref="dataSourceMaster">
        </property>
    </bean>
 
    <!-- spring和MyBatis完美整合,不需要mybatis的配置對映檔案 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dynamicDataSource" />
        <!-- 自動掃描mapping.xml檔案 -->
        <property name="mapperLocations">
            <list>
                <value>classpath:com/multiple/master/mapper/*.xml</value>
                <value>classpath:com/multiple/secondary/mapper/*.xml</value>
            </list>
        </property>
    </bean>
 
    <!-- DAO介面所在包名,Spring會自動查詢其下的類 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage"
            value="com/multiple/master/dao,com/multiple/secondary/dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
 
    <!-- (事務管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dynamicDataSource" />
    </bean>
</beans>

5.jdbc.properties

driver=com.mysql.jdbc.Driver
masterUrl=jdbc:mysql://127.0.0.1:3306/master
secondaryUrl=jdbc:mysql://127.0.0.1:3306/secondary
username=root
password=root
initialSize=0
maxActive=20
maxIdle=20
minIdle=1
maxWait=60000

log4j.properties

log4j.rootLogger=INFO,Console,File
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n

log4j.appender.File = org.apache.log4j.RollingFileAppender
log4j.appender.File.File = logs/ssm.log
log4j.appender.File.MaxFileSize = 10MB
log4j.appender.File.Threshold = ALL
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

6.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"
    version="3.0">
    <display-name>Archetype Created Web Application</display-name>
    <!-- Spring和mybatis的配置檔案 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mybatis.xml</param-value>
    </context-param>
    <!-- 編碼過濾器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- Spring監聽器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 防止Spring記憶體溢位監聽器 -->
    <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>
    
 
    <!-- Spring MVC servlet -->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <!-- 此處可以可以配置成*.do,對應struts的字尾習慣 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>
 
</web-app>

工程的目錄結構圖

在目錄結構上我分com.multiple.master、com.multiple.secondary,這是為了對應AOP的攔截路徑

6.DynamicDataSource.java

package com.multiple.utils;
 
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
 
/**
 * @author Wh
 * 一個動態資料來源
 */
public class DynamicDataSource extends AbstractRoutingDataSource {
 
    public static final String DATA_SOURCE_MASTER = "dataSourceMaster";    //主資料來源名稱。與XML檔案中名稱對應
    public static final String DATA_SOURCE_SECONDARY = "dataSourceSecondary";    //從資料來源名稱。與XML檔案中名稱對應
    private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
 
    /**
     * 引數為要切換的資料來源名稱,就是上面的final變數
     * @param customerType
     */
    public static void setCustomerType(String customerType) {
        contextHolder.set(customerType);
    }
 
    /**
     * 通過執行緒的方式獲取資料來源,目的是為了在併發的情況下依然能夠正常切換
     * @return
     */
    public static String getCustomerType() {
        return contextHolder.get();
    }
 
    /**
     * 用於關閉當前切換的資料來源
     */
    public static void clearCustomerType() {
        contextHolder.remove();
    }
 
    /**
     * @author Wh
     * 這個用於切換動態資料來源必須要實現的一個方法
     */
    @Override
    protected Object determineCurrentLookupKey() {
        return getCustomerType();
    }
 
}

7.ServiceAspect.java

package com.multiple.utils;
 
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
 
/**
 * @author Wh
 * 通過AOP實現對資料來源的自動切換,AOP是Spring的核心。通過AspectJ框架實現對AOP的操作
 */
@Component
@Aspect
// 設定當前載入的順序
@Order(-1)
public class ServiceAspect {
 
    /**
     * 設定切點:路徑為Secondary層的service層,*.*(..)代表其service報下的所有類和方法
     */
    @Pointcut("execution(* com.multiple.secondary.service.*.*(..))")
    public void aspect() {
    }
 
    /**
     * @param joinPoint
     * 進入切點方法之前(切點是專業術語,在本文中就是你要切換資料來源的的方法)
     * 切換資料來源,當一個工程中兩個資料來源時可以對不常用的資料來源寫死,因為工程中必定有一個主資料來源,當超過兩個以上的資料來源時可以通過傳參的形式到該方法中
     */
    @Before("aspect()")
    public void before(JoinPoint joinPoint) {
        DynamicDataSource
                .setCustomerType(DynamicDataSource.DATA_SOURCE_SECONDARY);
    }
 
    /**
     * @param joinPoint
     * 當退出切點方法之後,關閉所切換額資料來源
     */
    @After("aspect()")
    public void after(JoinPoint joinPoint) {
        DynamicDataSource.clearCustomerType();
    }
 
    /**
     * @param joinPoint
     * @param ex
     * 針對當前攔截的切點方法中出現異常時所做的處理
     */
    @AfterThrowing(pointcut = "aspect()", throwing = "ex")
    public void afterThrow(JoinPoint joinPoint, Exception ex) {
        DynamicDataSource.clearCustomerType();
    }
 
}

2.Master資料來源

1.Goods.java

package com.multiple.master.entity;
 
import java.util.Date;
 
/**
 * @author Wh
 * 商品表
 */
public class Goods {
 
    private String uuid; // uuid
    private String goodsName; // 商品名稱
    private float prices; // 商品價格
    private Date generateDate; // 生成日期
    private int number; // 商品數量
 
    public String getUuid() {
        return uuid;
    }
 
    public void setUuid(String uuid) {
        this.uuid = uuid;
    }
 
    public String getGoodsName() {
        return goodsName;
    }
 
    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }
 
    public float getPrices() {
        return prices;
    }
 
    public void setPrices(float prices) {
        this.prices = prices;
    }
 
    public Date getGenerateDate() {
        return generateDate;
    }
 
    public void setGenerateDate(Date generateDate) {
        this.generateDate = generateDate;
    }
 
    public int getNumber() {
        return number;
    }
 
    public void setNumber(int number) {
        this.number = number;
    }
 
}

2.GoodsMapper.xml

<?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="com.multiple.master.dao.GoodsMapper">
 
    <select id="queryGoodsList" resultType="com.multiple.master.entity.Goods"> 
        select 
            uuid as uuid,
            goods_name as goodsName,
            prices as prices,
            generate_date as generateDate,
            number as number
        from merchandise;
    </select>
 
</mapper>

3.GoodsMapper.java

package com.multiple.master.dao;
 
import java.util.List;
 
import com.multiple.master.entity.Goods;
 
public interface GoodsMapper {
 
    List<Goods> queryGoodsList();
 
}

IGoodsService.java

package com.multiple.master.service;
 
import java.util.List;
 
import com.multiple.master.entity.Goods;
 
public interface IGoodsService {
 
    List<Goods> queryGoodsList();
 
}

4.GoodsServiceImpl.java

package com.multiple.master.service.impl;
 
import java.util.List;
 
import javax.annotation.Resource;
 
import org.springframework.stereotype.Service;
 
import com.multiple.master.dao.GoodsMapper;
import com.multiple.master.entity.Goods;
import com.multiple.master.service.IGoodsService;
 
/**
 * @author Wh
 * Master資料庫下商品表的業務層
 */
@Service("goodsService")
public class GoodsServiceImpl implements IGoodsService {
 
    @Resource
    private GoodsMapper goodsMapper;
 
    @Override
    public List<Goods> queryGoodsList() {
        return goodsMapper.queryGoodsList();
    }
 
}

3.Secondary層

1.Orders.java

package com.multiple.secondary.entity;
 
/**
 * @author Wh
 * 訂單表
 */
public class Orders {
 
    private String uuid; // 訂單uuid
    private String goods_uuids; // 商品UUID組
    private float orderPrice; // 訂單價格
 
    public String getUuid() {
        return uuid;
    }
 
    public void setUuid(String uuid) {
        this.uuid = uuid;
    }
 
    public String getGoods_uuids() {
        return goods_uuids;
    }
 
    public void setGoods_uuids(String goods_uuids) {
        this.goods_uuids = goods_uuids;
    }
 
    public float getOrderPrice() {
        return orderPrice;
    }
 
    public void setOrderPrice(float orderPrice) {
        this.orderPrice = orderPrice;
    }
 
}

2.OrdersMapper.java

package com.multiple.secondary.dao;
 
 
import java.util.List;
 
 
import com.multiple.secondary.entity.Orders;
 
 
public interface OrdersMapper {
 
 
    List<Orders> queryOrdersList();
 
 
}

3.OrdersMapper.xml

<?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="com.multiple.secondary.dao.OrdersMapper">
 
 
    <select id="queryOrdersList" resultType="com.multiple.secondary.entity.Orders"> 
        select 
            uuid as uuid,
            goods_uuids as goodsUuids,
            order_price as orderPrice
        from orders;
    </select>
 
 
</mapper>

4.IOrdersService.java

package com.multiple.secondary.service;
 
import java.util.List;
 
import com.multiple.secondary.entity.Orders;
 
public interface IOrdersService {
    
    List<Orders> queryOrdersList();
 
}

5.OrdersServiceImpl.java

package com.multiple.secondary.service.impl;
 
import java.util.List;
 
import javax.annotation.Resource;
 
import org.springframework.stereotype.Service;
 
import com.multiple.secondary.dao.OrdersMapper;
import com.multiple.secondary.entity.Orders;
import com.multiple.secondary.service.IOrdersService;
 
/**
 * @author Wh
 * Secondary資料庫下的訂單表的業務層
 */
@Service("ordersService")
public class OrdersServiceImpl implements IOrdersService {
    
    @Resource
    private OrdersMapper ordersMapper;
 
 
    @Override
    public List<Orders> queryOrdersList() {
        return ordersMapper.queryOrdersList();
    }
 
}

6.TestController.java

package com.multiple.controller;
 
import java.io.UnsupportedEncodingException;
import java.util.List;
 
import javax.annotation.Resource;
 
import net.sf.json.JSONArray;
 
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
import com.multiple.master.entity.Goods;
import com.multiple.master.service.IGoodsService;
import com.multiple.secondary.entity.Orders;
import com.multiple.secondary.service.IOrdersService;
 
/**
 * @author Wh
 * 一個測試的Controller類
 */
@Controller
@RequestMapping("/testController")
public class TestController {
 
    @Resource
    @Qualifier("goodsService")
    private IGoodsService goodsService;
 
    @Resource
    @Qualifier("ordersService")
    private IOrdersService ordersService;
 
    /**
     * 
     * 實現對Master資料庫的資訊查詢
     * 
     * @return
     * @throws UnsupportedEncodingException
     */
    @RequestMapping(value = "/queryGoods", produces = "application/json;charset=GBK")
    @ResponseBody
    private String queryGoodsList() throws UnsupportedEncodingException {
        List<Goods> goodsList = goodsService.queryGoodsList();
        JSONArray jsonObject = JSONArray.fromObject(goodsList);
        String jsonStr = jsonObject.toString();
        return jsonStr;
    }
 
    /**
     * 實現對Secondary資料庫的資訊查詢
     * 
     * @return
     * @throws UnsupportedEncodingException
     */
    @RequestMapping(value = "/queryOrders", produces = "application/json;charset=GBK")
    @ResponseBody
    private String queryOrdersList() throws UnsupportedEncodingException {
        List<Orders> goodsList = ordersService.queryOrdersList();
        JSONArray jsonObject = JSONArray.fromObject(goodsList);
        String jsonStr = jsonObject.toString();
        return jsonStr;
    }
 
}