- 課程計划
- 第三天:
- 1、商品類目選擇
- 2、圖片上傳
- a) 圖片服務器FastDFS
- b) 圖片上傳功能實現
- 3、富文本編輯器的使用KindEditor
- 4、商品添加功能完成
1、商品類目選擇

1.1、功能分析
1.1.1、數據庫表結構設計

parent_id 表示節點的父節點。
上表的設計可以展示為樹形結構展開類目。
1.1.2、前端頁面分析
在taotao-manager-web項目中的jsp下的item-add.jsp中:

我們在該文件中使用 【Ctrl + F】 進行搜索,沒有找到事件綁定的樣式class(selectItemCat),那我們在Eclipse使用【文件搜索】功能,步驟:Search --> File..,如下:

我們找到了class綁定事件元素處理的js文件common.js,如下:

我們發現:在item-add.jsp中我們並沒有引用common.js,但由於在首頁index.jsp中我們已經引入了,所以
item-add.jsp作為首頁index.jsp一個片段
,所以在item-add.jsp中我們同樣可以使用common.js。
展示商品分類列表,使用EasyUI的tree控件展示。如下:

詳解如下:
初始化tree請求的url:/item/cat/list
參數:id 父節點的id值。
初始化tree時只需要把第一級節點展示,子節點異步加載展示。
返回值:json格式數據
[{
"id": 1,
"text": "Node 1",
"state": "closed"
},{
"id": 2,
"text": "Node 2",
"state": "closed"
}]
state:如果節點下有子節點則state的值為"closed",如果節點下沒有子節點則state的值為"open"。
所以我們需要創建一個pojo來描述tree的節點信息,包含三個屬性id、text、state。
放到taotao-common工程中。由於是服務端響應回來的pojo數據,所以需要實現序列化接口。
EasyUITreeNode.java
package com.taotao.common.pojo;
import java.io.Serializable;
/**
* 類目查詢時的返回的數據類
* @author chenmingjun
* @date 2018年11月12日下午5:01:23
* @version 1.0
*/
public class EasyUITreeNode implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String text;
private String state;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
@Override
public String toString() {
return "EasyUITreeNode [id=" + id + ", text=" + text + ", state=" + state + "]";
}
}
查詢的表:
tb_item_cat
查詢的列:
id、name、is_parent
查詢條件:
parentId
1.2、服務層工程開發
1.2.1、Dao層
Dao層只需要查詢商品分類表tb_item_cat即可,屬於單表查詢,單表查詢我們沒有必要自己寫Mapper了,使用Mybatis逆向工程生成的Mapper即可。
1.2.2、Service層
參數:
Long parentId
業務邏輯:
1、根據parentId查詢節點列表。
2、轉換成EasyUITreeNode列表。
3、返回。
返回值:
List<EasyUITreeNode>
先寫接口,在taotao-manager-interface工程中:
package com.taotao.service;
import java.util.List;
import com.taotao.common.pojo.EasyUITreeNode;
/**
* 商品類目管理接口
* @author chenmingjun
* @date 2018年11月12日下午8:15:24
* @version 1.0
*/
public interface ItemCatService {
/**
* 根據商品類目的父節點id,查詢該節點的子類目列表
* @param parentId
* @return
*/
List<EasyUITreeNode> getItemCatList(Long parentId);
}
再寫實現類,在taotao-manager-service工程中:
/**
* 商品類目管理Service
* @author chenmingjun
* @date 2018年11月12日下午8:15:58
* @version 1.0
*/
@Service
public class ItemCatServiceImpl implements ItemCatService {
@Autowired
private TbItemCatMapper itemCatMapper;
@Override
public List<EasyUITreeNode> getItemCatList(Long parentId) {
TbItemCatExample example = new TbItemCatExample();
// 設置查詢條件
Criteria criteria = example.createCriteria();
criteria.andParentIdEqualTo(parentId);
List<TbItemCat> list = itemCatMapper.selectByExample(example);
// 將list轉換成EasyUITreeNode列表
List<EasyUITreeNode> resultList = new ArrayList<>();
for (TbItemCat tbItemCat : list) {
EasyUITreeNode node = new EasyUITreeNode();
node.setId(tbItemCat.getId());
node.setText(tbItemCat.getName());
// 如果節點下有子節點則state的值為"closed",如果節點下沒有子節點則state的值為"open"
node.setState(tbItemCat.getIsParent() ? "closed" : "open");
// 將節點添加到list集合(列表)
resultList.add(node);
}
return resultList;
}
}
1.2.3、發布服務
在taotao-manager-service中的applicationContext-service.xml中發布服務:

1.3、表現層功能開發
1.3.1、引用服務
在taotao-manager-web中的springmvc.xml中引用服務:

1.3.2、Controller
初始化tree請求的url:
/item/cat/list
參數:
Long id(父節點id,表現層需要使用注解@RequestParam進行映射成parentId)
返回值:json格式的數據,使用注解@ResponseBody
List<EasyUITreeNode>
/**
* 商品類目管理Controller
* @author chenmingjun
* @date 2018年11月12日下午9:02:03
* @version 1.0
*/
@Controller
public class ItemCatController {
@Autowired
private ItemCatService itemCatService;
@RequestMapping("/item/cat/list")
@ResponseBody
public List<EasyUITreeNode> getItemCatList(@RequestParam(value="id", defaultValue="0") Long parentId) {
// 注意:第一次請求是沒有參數傳過來的,我們給id一個默認值0,defaultValue="0"
List<EasyUITreeNode> list = itemCatService.getItemCatList(parentId);
return list;
}
}
2、新增商品數據庫分析
比如:產品經理提供需求
商品屬性如下:

2.1、商品表分析

商品價格設置為Long ,就可以避免對小數點的處理。例如:
public static void main(String[] args) {
float a = 1.3f;
double b = 1.3d;
float aa = a * 3;
double bb = b * 3;
System.out.println(aa);
System.out.println(bb);
}
打印結果是:
3.8999999
3.9000000000000004
存在的問題:
前端顯示是元,兩位小數,保存在數據庫是分,所以保存數據需要把顯示的數據乘以100。
2.2、商品描述表分析

商品描述被拆分成另一張表。
商品描述的特點:
數據量大
修改的頻率低
所以需要拆分。
3、圖片上傳分析
傳統方式:

集群環境:

解決方案:
搭建一個圖片服務器,專門保存圖片。可以使用
分布式文件系統FastDFS(國產:淘寶)
。
4、圖片服務器
圖片服務器的要求:
1、存儲空間可擴展。
2、提供一個統一的訪問方式。
3、如果想安裝,可參考文檔,暫時不推薦自己搭建(耗費時間很長,有空再搭建),直接使用提供的虛擬機。
使用FastDFS,分布式文件系統。存儲空間可以橫向擴展,可以實現服務器的高可用
。支持每個節點有備份機
。
4.1、什么是FastDFS
FastDFS是用
c語言編寫
的一款開源的分布式文件系統
(國產軟件)。FastDFS為互聯網量身定制,充分考慮了冗余備份(高可用)
、負載均衡(高並發量)
、線性擴容(添加服務器或者磁盤)
等機制,並注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集群提供文件上傳、下載等服務。
4.2、FastDFS架構
FastDFS架構包括
Tracker server
和Storage server
。客戶端請求 Tracker server 進行文件上傳、下載,通過Tracker server調度最終由 Storage server 完成文件上傳和下載。
Tracker server 作用是負載均衡和調度
,通過 Tracker server 在文件上傳時可以根據一些策略找到 Storage server 提供文件上傳服務。可以將 tracker 稱為追蹤服務器
或調度服務器
。
Storage server 作用是文件存儲
,客戶端上傳的文件最終存儲在Storage服務器上,Storage server 沒有實現自己的文件系統而是利用操作系統的文件系統來管理文件
。可以將storage稱為存儲服務器
。
FastDFS架構圖如下所示:

詳解如下:
服務端兩個角色:
Tracker:管理集群,tracker也可以實現集群。每個tracker節點地位平等(沒有主從的概念)。
收集Storage集群的狀態。
Storage:實際保存文件。
Storage分為多個組(卷),每個組之間保存的文件是不同的。每個組內部可以有多個成員,組內的成員內部保存的內容是一樣的,組成員的地位是一致的,沒有主從的概念。
4.3、文件上傳的流程

客戶端上傳文件后存儲服務器將
文件ID
返回給客戶端,此文件ID用於以后訪問該文件的索引信息。
文件索引信息包括:組名,虛擬磁盤路徑,數據兩級目錄,文件名。

- 組名:文件上傳后所在的storage組名稱,在文件上傳成功后有storage服務器返回,需要客戶端自行保存。
- 虛擬磁盤路徑:storage配置的虛擬路徑,與磁盤選項store_path*對應。如果配置了store_path0則是M00,如果配置了store_path1則是M01,以此類推。
- 數據兩級目錄:storage服務器在每個虛擬磁盤路徑下創建的兩級目錄,用於存儲數據文件。00~FF
- 文件名:與文件上傳時不同。是由存儲服務器根據特定信息生成,文件名包含:源存儲服務器IP地址、文件創建時間戳、文件大小、隨機數和文件拓展名等信息。
4.4、文件下載

4.5、最簡單的FastDFS架構

5、圖片服務器安裝方法
暫時不推薦自己搭建FastDFS圖片服務器(耗費時間很長,有空再搭建),直接使用提供的虛擬機。
使用提供的虛擬機,需要注意幾個問題,如下圖所示:

由於兩台虛擬機的ip網段不一樣,所以我們還得改一下【虛擬機網絡編輯器】,將他們改為在同一網段192.168.25.xxx。如下:
在Vmmare上選擇【編輯(E)】--> 【虛擬機網絡編輯器】

選擇【更改設置(C)】

注意:以后所有學習中演示的例子都是用網段192.168.25.xxx。
圖片服務器ip地址:192.168.25.133
用戶名:root、itcast
密碼:itcast
該圖片服務器里面的nginx和FastDFS配置的是開機自啟。
6、圖片服務器使用
6.1、FastDFS的Java客戶端

目前我們使用的是maven工程,不能直接添加jar包,需要創建maven工程,安裝到本地,再在使用的工程中添加依賴。
Maven環境:

導入FastDFS的Java客戶端Maven工程,其POM文件如下:

我們將FastDFS的Java客戶端的坐標添加依賴到taotao-manager-web中的pom.xml中:

6.2、使用DastDFS的Java客戶端上傳圖片
6.2.1、上傳步驟

1、加載配置文件,配置文件中的內容就是tracker服務的地址。
配置文件內容:tracker_server=192.168.25.133:22122
2、創建一個TrackerClient對象。直接new一個。
3、使用TrackerClient對象創建連接,獲得一個TrackerServer對象。
4、創建一個StorageServer的引用,值為null。
5、創建一個StorageClient對象,需要兩個參數TrackerServer對象、StorageServer的引用。
6、使用StorageClient對象上傳圖片。
7、返回數組。包含組名和圖片的路徑。
6.2.2、測試代碼
/**
* 使用DastDFS的Java客戶端上傳圖片
* @author chenmingjun
* @date 2018年11月13日下午4:14:01
* @version 1.0
*/
public class FastDFSTest {
@Test
public void FileUploadTest() throws Exception {
// 0、向工程中添加jar包。目前我們使用的是maven工程,不能直接添加jar包,需要創建maven工程,安裝到本地,再在使用的工程中添加依賴。
// 1、加載配置文件,配置文件中的內容就是tracker服務的地址。配置文件內容:tracker_server=192.168.25.133:22122
ClientGlobal.init("D:/learn/Java/eclipse-jee-mars-2-win32_x64/eclipse-workspace/taotao/taotao-manager-web/src/main/resources/resource/fdfs_client.conf");
// 2、創建一個TrackerClient對象,我們直接new一個。
TrackerClient trackerClient = new TrackerClient();
// 3、使用TrackerClient對象創建連接,獲得一個TrackerServer對象。
TrackerServer trackerServer = trackerClient.getConnection();
// 4、創建一個StorageServer的引用(不用new出來),值為null。不創建這個引用也可以,直接引用。
StorageServer storageServer = null;
// 5、創建一個StorageClient對象,該對象需要兩個參數:TrackerServer對象、StorageServer的引用
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
// 6、使用StorageClient對象上傳圖片。
// 擴展名不帶“.”
String[] strings = storageClient.upload_file("C:/Users/Bruce/Desktop/我的頭像.jpg", "jpg", null);
// 7、返回數組。包含組名和圖片的路徑。
for (String string : strings) {
System.out.println(string);
}
}
}
6.3、使用工具類上傳圖片

工具類位置:

工具類代碼如下:
/**
* DastDFS的Java客戶端上傳圖片工具類,用於上傳圖片至DastDFS服務器
* @author chenmingjun
* @date 2018年11月13日下午4:58:48
* @version 1.0
*/
public class FastDFSClientUtil {
private TrackerClient trackerClient = null;
private TrackerServer trackerServer = null;
private StorageServer storageServer = null;
private StorageClient1 storageClient = null;
public FastDFSClientUtil(String conf) throws Exception {
if (conf.contains("classpath:")) {
conf = conf.replace("classpath:", this.getClass().getResource("/").getPath());
}
ClientGlobal.init(conf);
trackerClient = new TrackerClient();
trackerServer = trackerClient.getConnection();
storageServer = null;
storageClient = new StorageClient1(trackerServer, storageServer);
}
/**
* 上傳文件方法(文件方式)
* @param fileName 文件全路徑
* @param extName 文件擴展名,不包含(.)
* @param metas 文件擴展信息
* @return
* @throws Exception
*/
public String uploadFile(String fileName, String extName, NameValuePair[] metas) throws Exception {
String result = storageClient.upload_file1(fileName, extName, metas);
return result;
}
public String uploadFile(String fileName) throws Exception {
return uploadFile(fileName, null, null);
}
public String uploadFile(String fileName, String extName) throws Exception {
return uploadFile(fileName, extName, null);
}
/**
* 上傳文件方法(字節方式)
* @param fileContent 文件的內容,字節數組
* @param extName 文件擴展名
* @param metas 文件擴展信息
* @return
* @throws Exception
*/
public String uploadFile(byte[] fileContent, String extName, NameValuePair[] metas) throws Exception {
String result = storageClient.upload_file1(fileContent, extName, metas);
return result;
}
public String uploadFile(byte[] fileContent) throws Exception {
return uploadFile(fileContent, null, null);
}
public String uploadFile(byte[] fileContent, String extName) throws Exception {
return uploadFile(fileContent, extName, null);
}
}
分析還是有幾個地方需要用到圖片上傳的,所以將工具類拷貝到:taotao-common工程下,如圖:

測試代碼:
@Test
public void FastDFSClientUtilsTest() throws Exception {
// 生產環境下我們使用classpath,現在學習階段使用全路徑名,由於工具類寫的不夠好
FastDFSClientUtil fastDFSClientUtils = new FastDFSClientUtil("D:/learn/Java/eclipse-jee-mars-2-win32_x64/eclipse-workspace/taotao/taotao-manager-web/src/main/resources/resource/fdfs_client.conf");
String string = fastDFSClientUtils.uploadFile("C:/Users/Bruce/Desktop/我的頭像.jpg");
System.out.println(string);
}
7、實現圖片上傳功能
7.1、功能分析
7.1.1、前端頁面實現

使用的是KindEditor的多圖片上傳插件。
KindEditor 4.x 文檔
文檔網址:http://kindeditor.net/doc.php

7.1.2、請求分析
請求的url:/pic/upload
參數:MultiPartFile uploadFile
返回值:

可以創建一個pojo對應返回值。也可以使用Map集合。
7.1.3、加入文件上傳的jar包
圖片上傳跟服務層沒有什么關系,表現層就可以將這件事做了。
表現層使用的是SpringMVC,需要加入文件上傳的jar包,如果沒有添加jar包,則需要把commons-io
、fileupload
的jar包添加到taotao-manager-web工程中。

7.1.4、配置(多媒體)文件上傳解析器
在taotao-manager-web工程中的springmvc.xml中添加如下:
<!-- 配置文件上傳解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 設定默認編碼 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 設定文件上傳的最大值5MB,5*1024*1024 -->
<property name="maxUploadSize" value="5242880"></property>
</bean>
7.2、Controller開發
開發controller實現圖片上傳。
將圖片服務器的前綴放入屬性文件中:

在taotao-manager-web工程中的springmvc.xml中加載該屬性文件:

這樣spring容器加載的時候,我們使用注解@Value("${TAOTAO_IMAGE_SERVER_URL}")取出配置文件的值。
代碼如下:
@Controller
public class PictureController {
@Value("${TAOTAO_IMAGE_SERVER_URL}") // 使用注解取出配置文件的值
private String TAOTAO_IMAGE_SERVER_URL;
/**
* 上傳圖片
* @param uploadFile
* @return
*/
@RequestMapping(value="/pic/upload")
@ResponseBody // 在后台,把JavaBean強制轉換成json格式數據返回給前台頁面。
public Map<String, Object> pictureUpload(MultipartFile uploadFile) {
try {
// 1、取出文件的擴展名
String originalFilename = uploadFile.getOriginalFilename();
String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
// 2、使用工具類創建一個FastDFS的客戶端
FastDFSClientUtil fastDFSClientUtil = new FastDFSClientUtil("classpath:resource/fdfs_client.conf");
// 3、執行上傳處理,返回的字符串:group1/M00/00/01/wKgZhVjnAd6AKj_RAAvqH_kipG8211.jpg
String path = fastDFSClientUtil.uploadFile(uploadFile.getBytes(), extName);
// 4、拼接返回的url和ip地址,拼裝成完整的url
// String url = "http://192.168.25.133/" + path;
String url = TAOTAO_IMAGE_SERVER_URL + path;
// 5、返回map,設置上傳成功后的圖片的路徑
Map<String, Object> result = new HashMap<>();
result.put("error", 0);
result.put("url", url);
// 6、返回
return result;
} catch (Exception e) {
e.printStackTrace();
// 5、返回map,設置上傳失敗錯誤信息
Map<String, Object> result = new HashMap<>();
result.put("error", 1);
result.put("message", "圖片上傳失敗");
return result;
}
}
}
7.3、解決火狐瀏覽器兼容性的問題
KindEditor的圖片上傳插件,對瀏覽器兼容性不好,不能使用JSON響應。

使用@ResponseBody注解返回java對象實際上是JSON格式的數據。
返回JSON格式的數據時的Content-Type為:application/json;charset=UTF-8 在火狐上測試不行。
返回字符串時的Content-Type為:text/plain;charset=UTF-8 它是可以成功返回的。火狐瀏覽器支持。
可以通過produces指定響應結果的content-type:
@RequestMapping(value="/pic/upload",produces=MediaType.TEXT_PLAIN_VALUE+";charset=utf-8")
需要使用
JsonUtils工具類
將
對象轉換成JSON格式的字符串
。將其拷貝到
taotao-common
項目中,
安裝到本地倉庫
。
修改代碼如下:
@Controller
public class PictureController {
@Value("${TAOTAO_IMAGE_SERVER_URL}") // 使用注解取出配置文件的值
private String TAOTAO_IMAGE_SERVER_URL;
/**
* 上傳圖片
* @param uploadFile
* @return
*/
@RequestMapping(value="/pic/upload", produces=MediaType.TEXT_PLAIN_VALUE + ";charset=UTF-8")
@ResponseBody // 在后台,把JavaBean強制轉換成json格式數據返回給前台頁面。
public String PictureUpload(MultipartFile uploadFile) {
try {
// 1、取出文件的擴展名
String originalFilename = uploadFile.getOriginalFilename();
String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
// 2、使用工具類創建一個FastDFS的客戶端
FastDFSClientUtil fastDFSClientUtil = new FastDFSClientUtil("classpath:resource/fdfs_client.conf");
// 3、執行上傳處理,返回的字符串:group1/M00/00/01/wKgZhVjnAd6AKj_RAAvqH_kipG8211.jpg
String path = fastDFSClientUtil.uploadFile(uploadFile.getBytes(), extName);
// 4、拼接返回的url和ip地址,拼裝成完整的url
// String url = "http://192.168.25.133/" + path;
String url = TAOTAO_IMAGE_SERVER_URL + path;
// 5、返回map,設置上傳成功后的圖片的路徑
Map<String, Object> result = new HashMap<>();
result.put("error", 0);
result.put("url", url);
// 6、返回
return JsonUtils.objectToJson(result);
} catch (Exception e) {
e.printStackTrace();
// 5、返回map,設置上傳失敗錯誤信息
Map<String, Object> result = new HashMap<>();
result.put("error", 1);
result.put("message", "圖片上傳失敗");
return JsonUtils.objectToJson(result);
}
}
}
8、富文本編輯器的使用方法
8.1、富文本編輯器介紹

KindEditor
http://kindeditor.net/
UEditor:百度編輯器
http://ueditor.baidu.com/website/
CKEditor
http://ckeditor.com/
富文本編輯器純js開發,跟后台語言沒有關系。
8.2、使用方法
- 第一步:在jsp中引入KindEditor的css和js代碼。
- 第二步:在表單中添加一個
textarea控件
。是一個富文本編輯器的載體
。類似數據源。 - 第三步:初始化富文本編輯器。使用官方提供的方法初始化。
common.js - 第四步:取富文本編輯器的內容。
表單提交之前,把富文本編輯器的內容同步
到textarea控件中。 即將編輯器中的數據放到textarea
中,最終提交數據是textarea提交到后台。
9、新增商品功能實現
9.1、功能分析
- 前端分析:
表單:
提交表單: - 業務邏輯:
請求的url:/item/save
參數:表單的數據。可以使用表單的pojo接收表單的數據,要求pojo的屬性名稱和input的name屬性值要一致
。
使用TbItem對象
接收表單的商品基本數據
,使用字符串
接收表單中的商品描述的數據
。
參數如下:TbItem item, String desc
返回值:json格式的數據。應該包含一個status的屬性。`一般而言,我們響應的json格式數據都是通過一個對象轉化而來!`
我們可以使用提供的工具類TaotaoResult。 - 將工具類TaotaoResult代碼拷貝放入taotao-common中,。安裝到本地倉庫。(注意:該工具類TaotaoResult需要實現序列化接口)
- 業務邏輯:
1、生成商品id
實現方案:
a) UUID,生成的是字符串,不推薦使用。
b) 數值類型,不重復。日期+時間+隨機數20160402151333123123
c) 時間戳,可以直接取毫秒值+隨機數。可以使用。(本例使用)
d) 使用Redis。Incr命令
。推薦使用。暫時還沒用到。
可以使用工具類IDUtils
生成商品id。安裝到本地倉庫。
2、補全TbItem對象的屬性
3、向商品表插入數據
4、創建一個TbItemDesc對象
5、補全TbItemDesc的屬性
6、向商品描述表插入數據
7、TaotaoResult.ok()
9.2、服務層功能開發
9.2.1、Dao層
向tb_item, tb_item_desc表中插入數據,可以使用逆向工程生成的代碼。
9.2.2、Service層
- 開發接口:部分代碼如下:
/**
* 根據商品的基礎數據和商品的描述信息插入商品(插入商品表和商品描述表)
* @param item
* @param desc
* @return
*/
TaotaoResult saveItem(TbItem item, String desc);
- 開發實現類
參數:TbItem item, String desc
業務邏輯:略,參考上面
返回值:TaotaoResult
@Override
public TaotaoResult saveItem(TbItem item, String desc) {
// 1、生成商品id,本例中使用工具類IDUtils生成商品id
Long itemId = IDUtils.genItemId();
item.setId(itemId);
// 2、補全商品表TbItem的其他屬性
// 商品狀態,1-正常,2-下架,3-刪除
item.setStatus((byte) 1);
Date date = new Date();
item.setCreated(date);
item.setUpdated(date);
// 3、向商品表中插入數據
itemMapper.insert(item);
// 4、創建一個商品描述表TbItemDesc對象
TbItemDesc itemDesc = new TbItemDesc();
// 5、補全商品描述表TbItemDesc的其他屬性
itemDesc.setItemId(itemId);
itemDesc.setItemDesc(desc);
itemDesc.setCreated(date);
itemDesc.setUpdated(date);
// 6、向商品描述表中插入數據
itemDescMapper.insert(itemDesc);
// 7、返回TaotaoResult.ok()
return TaotaoResult.ok();
}
9.2.3、發布服務
在taotao-manager-service工程中的applicationContext-service.xml中發布服務:

9.3、表現層功能開發
9.3.1、引用服務
在taotao-manager-web工程中的springmvc.xml中引用服務:

9.3.2、Controller
請求的url:/item/save
參數:TbItem item, String desc
返回值:TaotaoResult
/**
* 根據商品的基礎數據和商品的描述信息添加商品,返回服務器插入成功的響應狀態
* @param item
* @param desc
* @return
*/
@RequestMapping(value="/item/save", method=RequestMethod.POST)
@ResponseBody
public TaotaoResult savetItem(TbItem item, String desc) {
TaotaoResult result = itemService.saveItem(item, desc);
return result;
}
9.4、作業
商品修改、商品刪除、上架下架。