淘淘商城專案 第二天總結
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)服務消費者