1. 程式人生 > >淘淘商城專案 第二天總結

淘淘商城專案 第二天總結

1.   課程計劃

第二天:商品列表功能實現

1、Ssm框架整合。

2、服務中介軟體dubbo

3、整合測試

4、商品列表查詢功能實現。

2.   Ssm框架整合

2.1. 資料庫

資料庫使用mysql資料庫,要求5.5以上版本。

1、在mysql資料庫中建立資料庫taotao

2、將建立資料庫的指令碼匯入到taotao中。


2.2. Mybatis逆向工程

使用mybatis官方提供的mybatis-generator生成pojo、mapper介面及對映檔案。

並且將pojo放到toatao-manager-pojo工程中。

將mapper介面及對映檔案放到taotao-manager-dao工程中。

2.3. 整合思路

1、Dao層:

mybatis整合spring,通過spring管理SqlSessionFactory、mapper代理物件。需要mybatis和spring的整合包。

2、Service層:

所有的service實現類都放到spring容器中管理。由spring建立資料庫連線池,並有spring管理實務。

3、表現層:

Springmvc框架,由springmvc管理controller。

2.4. Dao整合

2.4.1.   建立SqlMapConfig.xml配置檔案


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
		PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
		"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>

2.4.1.   Spring整合mybatis

建立applicationContext-dao.xml



<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
	<!-- 載入配置檔案 -->
	<context:property-placeholder location="classpath:properties/*.properties" />
	<!-- 資料庫連線池 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="maxActive" value="10" />
		<property name="minIdle" value="5" />
	</bean>
	<!-- 讓spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 資料庫連線池 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 載入mybatis的全域性配置檔案 -->
		<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
	</bean>
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.taotao.mapper" />
	</bean>
</beans>

db.properties


jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/taotao?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

備註:

Druid是目前最好的資料庫連線池,在功能、效能、擴充套件性方面,都超過其他資料庫連線池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。

Druid已經在阿里巴巴部署了超過600個應用,經過多年多生產環境大規模部署的嚴苛考驗。

2.5. Service整合

2.5.1.   管理Service


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

	<context:component-scan base-package="com.taotao.service"></context:component-scan>
</beans>

2.5.1.   事務管理

建立applicationContext-trans.xml

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
	<!-- 事務管理器 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 資料來源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- 通知 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 傳播行為 -->
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="create*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
		</tx:attributes>
	</tx:advice>
	<!-- 切面 -->
	<aop:config>
		<aop:advisor advice-ref="txAdvice"
			pointcut="execution(* com.taotao.service.*.*(..))" />
	</aop:config>
</beans>

2.5.3.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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>taotao-manager</display-name>
	<!-- 載入spring容器 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/applicationContext*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
</web-app>

2.6. 表現層整合

2.6.1.   Springmvc.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-4.2.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

	<context:component-scan base-package="com.taotao.controller" />
	<mvc:annotation-driven />
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>	
</beans>

2.6.2.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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>taotao-manager-web</display-name>
	<welcome-file-list>
		<welcome-file>login.html</welcome-file>
	</welcome-file-list>
	<!-- 解決post亂碼 -->
	<filter>
		<filter-name>CharacterEncodingFilter</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>
	</filter>
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>


	<!-- springmvc的前端控制器 -->
	<servlet>
		<servlet-name>taotao-manager</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- contextConfigLocation不是必須的, 如果不配置contextConfigLocation, springmvc的配置檔案預設在:WEB-INF/servlet的name+"-servlet.xml" -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/springmvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>taotao-manager</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>

2.7. 系統間通訊

2.7.1.   分析

由於淘淘商城是基於soa的架構,表現層和服務層是不同的工程。所以要實現商品列表查詢需要兩個系統之間進行通訊。

如何實現遠端通訊?

1、Webservice:效率不高基於soap協議。專案中不推薦使用。

2、使用restful形式的服務:http+json。很多專案中應用。如果服務太多,服務之間呼叫關係混亂,需要治療服務。

3、使用dubbo。使用rpc協議進行遠端呼叫,直接使用socket通訊。傳輸效率高,並且可以統計出系統之間的呼叫關係、呼叫次數。

2.7.2.   什麼是dubbo

隨著網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。




  • 單一應用架構
    • 當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。
    • 此時,用於簡化增刪改查工作量的資料訪問框架(ORM)是關鍵。
  • 垂直應用架構
  • 當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。
  • 此時,用於加速前端頁面開發的 Web框架(MVC)是關鍵。
  • 分散式服務架構
  • 當垂直應用越來越多,應用之間互動不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
  • 此時,用於提高業務複用及整合的分散式服務框架(RPC)是關鍵。
  • 流動計算架構
  • 當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個排程中心基於訪問壓力實時管理叢集容量,提高叢集利用率。
  • 此時,用於提高機器利用率的資源排程和治理中心(SOA)是關鍵。

Dubbo就是資源排程和治理中心的管理工具。

2.7.3.   Dubbo的架構

節點角色說明:

Provider: 暴露服務的服務提供方。

Consumer: 呼叫遠端服務的服務消費方。

Registry: 服務註冊與發現的註冊中心。

Monitor: 統計服務的呼叫次調和呼叫時間的監控中心。

Container: 服務執行容器。

呼叫關係說明:

0. 服務容器負責啟動,載入,執行服務提供者。

1. 服務提供者在啟動時,向註冊中心註冊自己提供的服務。

2. 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。

3. 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。

4. 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫。

5. 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。

2.7.4.   使用方法

Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring載入Dubbo的配置即可,Dubbo基於Spring的Schema擴充套件進行載入。

單一工程中spring的配置


<bean id="xxxService" class="com.xxx.XxxServiceImpl" />
<bean id="xxxAction" class="com.xxx.XxxAction">
	<property name="xxxService" ref="xxxService" />
</bean>

遠端服務:

在本地服務的基礎上,只需做簡單配置,即可完成遠端化:

將上面的local.xml配置拆分成兩份,將服務定義部分放在服務提供方remote-provider.xml,將服務引用部分放在服務消費方remote-consumer.xml。

並在提供方增加暴露服務配置<dubbo:service>,在消費方增加引用服務配置<dubbo:reference>。

釋出服務:


<!-- 和本地服務一樣實現遠端服務 -->
<bean id="xxxService" class="com.xxx.XxxServiceImpl" />
<!-- 增加暴露遠端服務配置 -->
<dubbo:service interface="com.xxx.XxxService" ref="xxxService" />

呼叫服務:

<!-- 增加引用遠端服務配置 -->
<dubbo:reference id="xxxService" interface="com.xxx.XxxService" />
<!-- 和本地服務一樣使用遠端服務 -->
<bean id="xxxAction" class="com.xxx.XxxAction">
	<property name="xxxService" ref="xxxService" />
</bean>

2.7.5.   註冊中心

註冊中心負責服務地址的註冊與查詢,相當於目錄服務,服務提供者和消費者只在啟動時與註冊中心互動,註冊中心不轉發請求,壓力較小。使用dubbo-2.3.3以上版本,建議使用zookeeper註冊中心。

Zookeeper是Apacahe Hadoop的子專案,是一個樹型的目錄服務,支援變更推送,適合作為Dubbo服務的註冊中心,工業強度較高,可用於生產環境,並推薦使用

Zookeeper的安裝:

第一步:安裝jdk

第二步:解壓縮zookeeper壓縮包

第三步:將conf資料夾下zoo_sample.cfg複製一份,改名為zoo.cfg

第四步:修改配置dataDir屬性,指定一個真實目錄

第五步:

啟動zookeeper:bin/zkServer.sh start

關閉zookeeper:bin/zkServer.sh stop

檢視zookeeper狀態:bin/zkServer.sh status

注意要關閉linux的防火牆。

3.   整合測試

3.1. 需求

根據商品id查詢商品資訊,並將商品資訊使用json資料返回。

3.2. 分析

請求的url:/item/{itemId}

引數:商品id,從請求的url中獲得

返回值:TbItem物件,逆向工程生成的pojo(響應json資料)

3.3. Dao層

根據商品id查詢商品資訊,單表查詢可以使用逆向工程生成的程式碼。

3.4. Service層

1、在taotao-manager-interface工程中建立一個ItemService介面

2、在taotao-manager-Service工程中建立一個itemSeviceImpl的實現類。

@Service
public class ItemServiceImpl implements ItemService {

	@Autowired
	private TbItemMapper itemMapper;
	
	@Override
	public TbItem getItemById(long itemId) {
		TbItem tbItem = itemMapper.selectByPrimaryKey(itemId);
		return tbItem;
	}
}

3.5. 釋出服務

1、在taotao-manager-Service工程中新增dubbo依賴的jar包。

<!-- dubbo相關 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.jboss.netty</groupId>
					<artifactId>netty</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>

2、在spring的配置檔案中新增dubbo的約束,然後使用dubbo:service釋出服務。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">

	<context:component-scan base-package="com.taotao.service"></context:component-scan>

	<!-- 使用dubbo釋出服務 -->
	<!-- 提供方應用資訊,用於計算依賴關係 -->
	<dubbo:application name="taotao-manager" />
	<dubbo:registry protocol="zookeeper"
		address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183" />
	<!-- 用dubbo協議在20880埠暴露服務 -->
	<dubbo:protocol name="dubbo" port="20880" />
	<!-- 宣告需要暴露的服務介面 -->
	<dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl" />

</beans>

3.6. 引用服務

1、在taotao-manager-web工程中新增dubbo依賴的jar包

<!-- dubbo相關 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.jboss.netty</groupId>
					<artifactId>netty</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>

2、在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:dubbo="http://code.alibabatech.com/schema/dubbo" 
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

	<context:component-scan base-package="com.taotao.controller" />
	<mvc:annotation-driven />
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>
	
	<!-- 引用dubbo服務 -->
	<dubbo:application name="taotao-manager-web"/>
	<dubbo:registry protocol="zookeeper" address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"/>	
	<dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />
	
</beans>


3.7.Controller

@Controller
public class ItemController {

	@Autowired
	private ItemService itemService;
	
	@RequestMapping("/item/{itemId}")
	@ResponseBody
	public TbItem getItemById(@PathVariable Long itemId) {
		//根據商品id查詢商品資訊
		TbItem tbItem = itemService.getItemById(itemId);
		return tbItem;
	}

3.8. 解決mapper對映檔案不釋出問題

在taotao-manager-dao工程的pom檔案中新增如下內容:

<!-- 如果不新增此節點mybatis的mapper.xml檔案都會被漏掉。 -->
	<build>
		<resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
	</build>

4.   Dubbo監控中心


需要安裝tomcat,然後部署監控中心即可。

1、部署監控中心:

[[email protected] ~]# cp dubbo-admin-2.5.4.warapache-tomcat-7.0.47/webapps/dubbo-admin.war

2、啟動tomcat

3、訪問http://192.168.25.167:8080/dubbo-admin/

使用者名稱:root

密碼:root

如果監控中心和註冊中心在同一臺伺服器上,可以不需要任何配置。

如果不在同一臺伺服器,需要修改配置檔案:

/root/apache-tomcat-7.0.47/webapps/dubbo-admin/WEB-INF/dubbo.properties



5.   商品列表查詢

5.1. 展示後臺首頁

5.1.1.   功能分析

請求的url:/

引數:無

返回值:邏輯檢視String

5.1.2.   Controller

@Controller
public class PageController {

	@RequestMapping("/")
	public String showIndex() {
		return "index";
	}
	
	@RequestMapping("/{page}")
	public String showPage(@PathVariable String page) {
		return page;
	}
}

5.2. 功能分析

5.2.1.   整合靜態頁面

靜態頁面位置:02.第二天(三大框架整合,後臺系統搭建)\01.參考資料\後臺管理系統靜態頁面

使用方法:

把靜態頁面新增到taotao-manager-web工程中的WEB-INF下:


由於在web.xml中定義的url攔截形式為“/”表示攔截所有的url請求,包括靜態資源例如css、js等。所以需要在springmvc.xml中新增資源對映標籤:

	<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
	<mvc:resources location="/WEB-INF/css/" mapping="/css/**"/>

5.2.2.   商品列表頁面

對應的jsp為

item-list.jsp

請求的url:

/item/list

請求的引數:

page=1&rows=30

響應的json資料格式:

Easyui中datagrid控制元件要求的資料格式為:

{total:”2”,rows:[{“id”:”1”,”name”:”張三”},{“id”:”2”,”name”:”李四”}]}


5.2.3.   響應的json資料格式EasyUIResult

public class EasyUIDataGridResult {

    private Integer total;

    private List<?> rows;

    public EasyUIResult(Integer total, List<?> rows) {
        this.total = total;
        this.rows = rows;
    }

    public EasyUIResult(Long total, List<?> rows) {
        this.total = total.intValue();
        this.rows = rows;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }

    public List<?> getRows() {
        return rows;
    }

    public void setRows(List<?> rows) {
        this.rows = rows;
    }

}

5.2.4.   分頁處理

逆向工程生成的程式碼是不支援分頁處理的,如果想進行分頁需要自己編寫mapper,這樣就失去逆向工程的意義了。為了提高開發效率可以使用mybatis的分頁外掛PageHelper。

5.3. 分頁外掛PageHelper

5.3.1.   Mybatis分頁外掛 - PageHelper說明

如果你也在用Mybatis,建議嘗試該分頁外掛,這個一定是最方便使用的分頁外掛。

該外掛目前支援Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六種資料庫分頁。

5.3.2.   使用方法

第一步:把PageHelper依賴的jar包新增到工程中。官方提供的程式碼對逆向工程支援的不好,使用參考資料中的pagehelper-fix。

第二步:在Mybatis配置xml中配置攔截器外掛:

<plugins>
    <!-- com.github.pagehelper為PageHelper類所在包名 -->
    <plugin interceptor="com.github.pagehelper.PageHelper">
        <!-- 設定資料庫型別 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六種資料庫-->        
        <property name="dialect" value="mysql"/>
    </plugin>
</plugins>

第二步:在程式碼中使用

1、設定分頁資訊:
    //獲取第1頁,10條內容,預設查詢總數count
    PageHelper.startPage(1, 10);

    //緊跟著的第一個select方法會被分頁
List<Country> list = countryMapper.selectIf(1);
2、取分頁資訊
//分頁後,實際返回的結果list型別是Page<E>,如果想取出分頁資訊,需要強制轉換為Page<E>,
Page<Country> listCountry = (Page<Country>)list;
listCountry.getTotal();
3、取分頁資訊的第二種方法
//獲取第1頁,10條內容,預設查詢總數count
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();
//用PageInfo對結果進行包裝
PageInfo page = new PageInfo(list);
//測試PageInfo全部屬性
//PageInfo包含了非常全面的分頁屬性
assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());

5.3.3.   分頁測試

@Test
	public void testPageHelper() throws Exception {
		//初始化spring容器
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
		//獲得Mapper的代理物件
		TbItemMapper itemMapper = applicationContext.getBean(TbItemMapper.class);
		//設定分頁資訊
		PageHelper.startPage(1, 30);
		//執行查詢
		TbItemExample example = new TbItemExample();
		List<TbItem> list = itemMapper.selectByExample(example);
		//取分頁資訊
		PageInfo<TbItem> pageInfo = new PageInfo<>(list);
		System.out.println(pageInfo.getTotal());
		System.out.println(pageInfo.getPages());
		System.out.println(pageInfo.getPageNum());
		System.out.println(pageInfo.getPageSize());
	}

5.4. Service層

引數:int page ,int rows

業務邏輯:查詢所有商品列表,要進行分頁處理。

返回值:EasyUIDataGridResult

@Override
	public EasyUIDataGridResult getItemList(int page, int rows) {
		
		//設定分頁資訊
		PageHelper.startPage(page, rows);
		//執行查詢
		TbItemExample example = new TbItemExample();
		List<TbItem> list = itemMapper.selectByExample(example);
		//取分頁資訊
		PageInfo<TbItem> pageInfo = new PageInfo<>(list);
		
		//建立返回結果物件
		EasyUIDataGridResult result = new EasyUIDataGridResult();
		result.setTotal(pageInfo.getTotal());
		result.setRows(list);
		
		return result;
	}

5.4.1.   釋出服務

5.5. 表現層

引用服務:

1、初始化表格請求的url:/item/list

2、Datagrid預設請求引數:

1、page:當前的頁碼,從1開始。

2、rows:每頁顯示的記錄數。

3、響應的資料:json資料。EasyUIDataGridResult

@RequestMapping("/item/list")
	@ResponseBody
	public EasyUIDataGridResult getItemList(Integer page, Integer rows) {
		EasyUIDataGridResult result = itemService.getItemList(page, rows);
		return result;
	}

可以設定服務超時時間:

服務呼叫超時時間預設1秒,

Debug設定原始碼:

5.6. 安裝maven工程跳過測試

clean install -DskipTests


相關推薦

商城專案 第二總結

1.   課程計劃第二天:商品列表功能實現1、Ssm框架整合。2、服務中介軟體dubbo3、整合測試4、商品列表查詢功能實現。2.   Ssm框架整合2.1. 資料庫資料庫使用mysql資料庫,要求5.5以上版本。1、在mysql資料庫中建立資料庫taotao2、將建立資料庫

java ssm實現商城專案 第二

1.使用mysql,建立資料庫: 在網際網路行業的專案中儘可能的減少表的管理查詢。使用冗餘解決表的關聯問題。有利於分庫分表。 2.mybatis逆向工程生成根據資料庫表生成java程式碼 SSM框架的整合 一,整合的思路: 1.1DAO層 使用mybatis框架。

linux培訓第二總結

linux;小白回顧:1)雲計算概念雲計算,通過互聯網(超級雲網)來提供/使用XX資源或功能對服務商來說,關註如何提供(雲平臺)對用戶來說,關註資源/功能的可用性雲計算三大服務模式IaaS,基礎架構(計算機/服務器、網絡設備、硬盤)即服務PaaS,平臺(LAMP網站、數據庫、開發環境)即服務SaaS,軟件即服

廖大python實戰專案第二

這一篇是補的,有些資料我也忘了當時查來幹嘛。但是那麼辛苦的查,總要記錄下來。 不過經過那一天的學習,我不那麼怕閱讀文件了,而且有些文件寫得真的非常清晰易讀; Asyncio 介紹 參考 Python 的非同步 IO:Asyncio 簡介 aiohttp官方文件 aiohttp官方文

Learn Python3 the hard way 第二總結 命令列(2)

複製檔案 命令:cp含義:很簡單,就是把一個檔案複製成一個新檔案而已。使用 cp -r命令可以複製一些包含檔案的目錄 移動檔案 命令:mv含義:對檔案進行"rename". 檢視檔案內容 命令:less含義:這是檢視檔案內容的一種方法,它有用的地方在於,如果檔案內容有很多行,它會將其分頁,

java ssm實現商城專案 第一

建立parent專案控制版本,讓大家的開發環境相同,之後的子專案都要繼承達到版本一直的目的 run as->maven install 將父工程安裝到.m2的maven倉庫 建立taobao-common工具類的jar包(之後各個工程會用到的工具類,放在這,匯入即可使用)

面試第二總結,調整心態,繼續出發

今天是我面試的第二天,今天有一家面試。 約得是下午兩點半,我大約2點十幾分的時候到的,公司裡面感覺工作的人不多,都是在閒聊天。進去之後給了面試題,需要做,題目很簡單,我很快就做完了,然後就是等著面技術。期間我還出去打了一個電話。 技術面的也很簡單,我當時就覺得這次有戲,臨

linux實訓第二總結--快速搭建Httpd服務&部署基於Httpd的網路Yum&搭建NFS共享&兩個終端之間”聊天室”

   DAY02 案例一-->部署網路yum源      1.0快速搭建Httpd服務      1.1部署基於Httpd的網路Yum   案例1.0-->

做B2C商城專案的一些總結

          這裡主要負責的是後臺商品資料等的上傳,更新和刪除效果。從這個專案中讓我更加懂得了如何使用資料庫,如果通過自己的思維一步一步的實現想要的功能,怎麼用debug等除錯工具除錯自己的錯誤;          主要是怕以後忘了自己的一些犯錯點,所以做一些筆記。

小組專案第二總結

一、系統主要功能設計學生:選課與退課、查詢課表、查詢成績、查詢個人資訊等老師:釋出課程、查詢課表、釋出考試時間、查詢個人資訊等管理員:管理並維護系統正常工作二、UML邊界圖三、Mysql實現結構與資料管理1.    使用mysql中的觸發器進行系統資料的實時同步。2.    

牛客專案第二----解決No data sources are configured to run this SQL and provide advanced

 出現這個問題的原因是 ,Intellij沒有成功沒有配置資料來源執行此 sql ,但是如果沒有連線成功資料庫,我們想表中新增資料,又怎麼成功了,其實,mybatis通過application.properties中檔案,可以連線資料庫,但是,我們這個sql檔案是在te

前端學習第二 總結 2018/7/17

初學程式碼 html部分 <!doctype html> <html> <head> <title>標題</title> </

SSM專案之---商城(第一

注:xx商城是培訓網站(itcast)出的SSM培訓視訊,使用的技術還是現在比較靠前的技術~原始碼會在以後陸續放出~想要原始碼以及視訊的小夥伴可以加本人qq,,272273581  (注:由於本人最近考研,所以不經常看qq,大家想要原始碼視訊的話,可以直接發郵件給我,我看到之後第一時間

day79_商城專案_商城購物車系統實現三種方案總結

1、商城購物車系統實現的三種方案 1.1、session   將購物車直接存放到與使用者相關的session中。優點:  程式碼實現超級簡單。缺點:  購物車存在session當中,如果session銷燬,購物車就沒有了。(session只存在於一次會話中。)  使用者未登入的時候不能新增購物車

day82_商城_15_專案總結 + 專案中的問題_匠心筆記

專案的總結 第一天: 學習電商行業的背景,電商模式:B2B、B2C、B2B2C、O2O。分散式,叢集的理解,系統的架構,基於SSO的架構。使用Maven搭建後臺工程,及SVN的使用。 第二天: dubbo的學習和使用,系統和系統之間通訊的中介軟體。webservice :系統之間通訊。應

商城第二—完成商品新增功能 商品類目選擇 圖片上傳 圖片伺服器搭建 kindEditor富文字編輯器的使用 商品新增功能

1、實現商品類目選擇功能 1.1需求 在商品新增頁面,點選“選擇類目”顯示商品類目列表: 請求初始化樹形控制元件的url:/item/cat/list 1.2 EasyUI tree資料結構 資料結構中必須包含: Id:節點id Text:節

商城_專案異常總結

1.xml配置檔案報錯 解決方法:     2。沒有啟動zookeeper錯誤   3.未找到註冊中心的service   4.啟動taotao-manager-web 報錯

商城分散式電商系統專案總結

淘淘商城是採用分散式架構部署的一個大型網上商城系統,類似於京東商城。本系統分前臺系統和後臺系統。前臺系統主要負責商城的頁面的顯示功能,這裡採用的面向服務的方式,pc端手機端只負責顯示頁面,業務邏輯都在服務層實現,客戶端呼叫服務端介面來實現顯示功能。 在前臺系統中主要分為:客戶端:系統前臺頁面顯示系

帶你逐步深入瞭解SSM框架——商城專案專案總結

1.  專案總結 總結淘淘商城中用到的技術點: 1.1. 專案工程搭建。 1、使用maven構建工程。Maven的繼承、聚合、依賴管理。 2、Svn的使用,svn上傳下載程式碼。 1.2. ssm框

day82_商城專案_15_專案總結 + 專案中的問題_匠心筆記

專案總結 第一天 1、電商行業的背景,b2b、b2c、b2b2c、c2c、o2o2。 2、系統的架構。基於SOA的架構。 3、工程搭建。使用maven管理工程。 4、svn的使用。 第二天 1、ssm框架整合。 2、使用dubbo進行通訊   1)服務提供者   2)服務消費者