最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java仿淘寶首頁分類列表功能的示例代碼

 更新時間:2018年05月08日 10:14:31   作者:Steafan_  
這篇文章主要介紹了仿淘寶分類管理功能的示例代碼,具有很好的參考價值,希望對大家有所幫助,也給大家做個參考

在之前的博文中,我們已經(jīng)完成了用戶模塊的所有的功能,那么在接下來的幾篇博文中,我們來完成分類管理功能模塊。

先來看一下后臺的分類管理都有哪些功能點

后臺品類管理其實就是對商品的一個管理,主要分為增加品類、更新品類名稱、獲取同級品類結點和獲取品類id及子節(jié)點品類

一、分類管理模塊-增加品類功能的實現(xiàn)

先來看Service層

// 添加品類 
 public ServerResponse addCategory(String categoryName, Integer parentId){ 
  if(parentId == null || StringUtils.isBlank(categoryName)){ 
   return ServerResponse.createByErrorMessage("參數(shù)錯誤"); 
  } 
 
  Category category = new Category(); 
  category.setName(categoryName); 
  category.setParentId(parentId); 
  category.setStatus(true); 
 
  int rowCount = categoryMapper.insert(category); 
  if(rowCount > 0){ 
   return ServerResponse.createBySuceessMessage("添加品類成功"); 
  } 
  return ServerResponse.createByErrorMessage("添加品類失敗"); 
 } 

添加品類相對來說還是比較簡單的。和之前的注冊邏輯有點相似。首先校驗前端傳過來的categoryName和parentId是否存在,如果不存在則提示參數(shù)錯誤,否則就繼續(xù)使用JavaBean的實例來增加品類。同樣的,在用JavaBean增加完之后,將結果插入到數(shù)據(jù)庫中,如果返回的生效行數(shù)大于0,則添加品類成功,否則添加品類失敗。

再來看Controller層

 /** 
  * 管理品類-增加品類 
  * @param categoryName 
  * @param parentId 
  * @param session 
  * @return 
  */ 
 @RequestMapping(value = "add_category.do") 
 @ResponseBody 
 public ServerResponse addCategory(String categoryName, @RequestParam(value = "parentId", defaultValue = "0") int parentId, HttpSession session) { 
  User user = (User) session.getAttribute(Const.CURRENT_USER); 
  if (user == null) { 
   return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "用戶未登錄,請登錄"); 
  } 
//  校驗是否是管理員 
  if (iUserService.checkAdmin(user).isSuccess()) { 
   return iCategoryService.addCategory(categoryName, parentId); 
  } else { 
   return ServerResponse.createByErrorMessage("無權限操作,請登錄管理員"); 
  } 
 } 

首先有一個不同的地方在與RequestMapping的value值,只有一個接口名稱,而沒有規(guī)定接口請求的方法,是因為品類管理模塊是網(wǎng)站管理員進行后臺管理,屬于后臺模塊。針對于后臺模塊,其是公司內(nèi)部員工使用,不需要對外界進行公開,所以使用默認的GET方式請求就可以。

后臺功能管理的通用邏輯就是首先驗證用戶是否處于登錄狀態(tài),如果用戶處于登錄狀態(tài),再來驗證當前登錄的是不是網(wǎng)站管理員,如果不是管理員,則無權進行相關的管理操作,如果是管理員,就可以進行后臺的管理。在進行后臺功能管理的邏輯中,一般的直接返回在Service層中方法處理結果就可以了。

  在上述方法中,需要判斷用戶的登錄狀態(tài),所以需要引入用戶服務,然后直接調(diào)用相應的方法即可。

二、分類管理模塊-更新品類名稱功能的實現(xiàn)

先來看Service層

// 更新品類名稱 
 public ServerResponse updateCategoryName(String categoryName, Integer categoryId){ 
  if(categoryId == null || StringUtils.isBlank(categoryName)){ 
   return ServerResponse.createByErrorMessage("更新品類參數(shù)錯誤"); 
  } 
  Category category = new Category(); 
  category.setId(categoryId); 
  category.setName(categoryName); 
 
  int rowCount = categoryMapper.updateByPrimaryKeySelective(category); 
  if(rowCount > 0){ 
   return ServerResponse.createBySuceessMessage("更新品類名稱成功"); 
  } 
  return ServerResponse.createByErrorMessage("更新品類名稱失敗"); 
 } 

和之前的處理邏輯完全一樣,這里不再一一贅述。

再來看Controller層

/** 
  * 管理品類-更新品類名稱 
  * @param categoryName 
  * @param categoryId 
  * @param session 
  * @return 
  */ 
 @RequestMapping(value = "update_category_name") 
 @ResponseBody 
 public ServerResponse updateCategoryName(String categoryName, Integer categoryId, HttpSession session){ 
  User user = (User)session.getAttribute(Const.CURRENT_USER); 
  if(user == null){ 
   return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "用戶未登錄,請登錄"); 
  } 
  if(iUserService.checkAdmin(user).isSuccess()){ 
   return iCategoryService.updateCategoryName(categoryName, categoryId); 
  }else{ 
   return ServerResponse.createByErrorMessage("無權限操作,請登錄管理員"); 
  } 
 } 

和之前的處理邏輯完全一樣,這里不再一一贅述。

三、分類管理模塊-獲取平級品類結點(后臺商品搜索)功能的實現(xiàn)

Service層

// 平級查詢品類結點 
 public ServerResponse<List<Category>> getChildrenParalleCategory(Integer categoryId){ 
  List<Category> categoryList = categoryMapper.selectCategoryChildrenByParentId(categoryId); 
  if(CollectionUtils.isEmpty(categoryList)){ 
   logger.info("未找到當前分類的子分類"); 
  } 
  return ServerResponse.createBySuccess(categoryList); 
 } 

處理一組商品信息,往往使用集合的方式,根據(jù)集合不同種類,其適用長青也不一樣。這里,我用的是List集合,一是考慮到List集合方便遍歷操作,也方便管理。因為是管理商品,所以指定List集合的泛型為Category,通過categoryMapper的selectCategoryChildrenByParentId方法來進行商品id的查詢。在邏輯判斷上,使用Java中封裝好的CollectionUtils工具類,來判斷集合的返回結果是否為空,如果為空就打印一行日志,否則將執(zhí)行成功的categoryList結果返回即可。這里的logger是餓哦們自己封裝的日志打印工具類,關于他的用法,簡單提一下

private org.slf4j.Logger logger = LoggerFactory.getLogger(CategoryServiceImpl.class);

注意,這個logger使用的是slf4j包下的,不要導錯包了,然后LoggerFactory.getLogger(classs),需要傳遞一個參數(shù),就是當前需要打印日志的類,例如這里的CategoryServiceImpl.class。即可在控制臺看到日志的打印結果。

Controller層

/** 
  * 管理品類-獲取同級品類的結點 
  * @param categoryId 
  * @param session 
  * @return 
  */ 
 @RequestMapping(value = "get_category.do") 
 @ResponseBody 
 public ServerResponse getChildrenParalleCategory(@RequestParam(value = "categoryId", defaultValue = "0") Integer categoryId, HttpSession session){ 
  User user = (User)session.getAttribute(Const.CURRENT_USER); 
  if(user == null){ 
   return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "用戶未登錄,請登錄"); 
  } 
  if(iUserService.checkAdmin(user).isSuccess()){ 
   return iCategoryService.getChildrenParalleCategory(categoryId); 
  }else { 
   return ServerResponse.createByErrorMessage("無權限操作,請登錄管理員"); 
  } 
 } 

出于實際情況的考慮,當商品數(shù)量為0時,不需要對商品品類進行管理,所以使用RequestParam注解的defaultValue="0"來規(guī)定一個參數(shù)的默認值。其余的邏輯處理和之前的完全一樣。

四、分類管理模塊-獲取品類id及子結點功能的實現(xiàn)

看Service層

public ServerResponse<List<Integer>> selectCategoryAndChildrenById(Integer categoryId){ 
  Set<Category> categorySet = Sets.newHashSet(); 
  findChildCategory(categoryId, categorySet); 
  List<Integer> categoryIdList = Lists.newArrayList(); 
  if(categoryId != null){ 
   for(Category categoryItem : categorySet){ 
    categoryIdList.add(categoryItem.getId()); 
   } 
  } 
  return ServerResponse.createBySuccess(categoryIdList); 
 } 
 
// 遞歸算法,算出子節(jié)點 
 private Set<Category> findChildCategory(Integer categoryId, Set<Category> categorySet){ 
  Category category = categoryMapper.selectByPrimaryKey(categoryId); 
  if(category != null){ 
   categorySet.add(category); 
  } 
//  查找子節(jié)點 
  List<Category> categoryList = categoryMapper.selectCategoryChildrenByParentId(categoryId); 
  for(Category categoryItem : categoryList){ 
   findChildCategory(categoryItem.getId(), categorySet); 
  } 
  return categorySet; 
 } 

主方法是selectCategoryAndChildrenById,輔助方法為findChildCategory,通過遞歸算出子節(jié)點。在輔助方法中,通過categoryId來查詢出商品的id信息,并且加入到Set集合中,再通過foreach循環(huán)來遍歷出商品的子節(jié)點,最后返回categorySet。在主方法中通過調(diào)用輔助方法,將商品的id及子節(jié)點全部查出,然后放到List集合中,再通過foreach循環(huán)遍歷出我們想要的結果,最后直接返回categoryIdList即可。

Controller層

/** 
  * 管理品類-獲取id及子節(jié)點品類 
  * @param categoryId 
  * @param session 
  * @return 
  */ 
 @RequestMapping(value = "get_deep_category.do") 
 @ResponseBody 
 public ServerResponse getCategoryAndDeepChildrenCategory(@RequestParam(value = "categoryId", defaultValue = "0") Integer categoryId, HttpSession session){ 
  User user = (User)session.getAttribute(Const.CURRENT_USER); 
  if(user == null){ 
   return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "用戶未登錄,請登錄"); 
  } 
  if(iUserService.checkAdmin(user).isSuccess()){ 
   return iCategoryService.selectCategoryAndChildrenById(categoryId); 
  }else{ 
   return ServerResponse.createByErrorMessage("無權限操作,請登錄管理員"); 
  } 
 }

和之前的獲取品類同級結點的邏輯處理完全一樣,這里就不一一贅述了。

五、補充用戶模塊

在后臺品類管理模塊中,用到了校驗當前登錄的用戶是否是管理員的方法,這個是在用戶模塊中寫到的,之前我忘記寫了,所以,在這里做一個補充。

用戶模塊的Service層

// 用戶后臺-校驗是否是管理員 
 public ServerResponse checkAdmin(User user){ 
  if(user != null && user.getRole().intValue() == Const.Role.ROLE_ADMIN){ 
   return ServerResponse.createBySuccess(); 
  } 
  return ServerResponse.createByError(); 
 } 

因為是管理員相關,所以只需要在Service層中進行邏輯處理,不需要再在Controller中聲明。該方法傳入一個user對象,通過封裝好的Role接口進行權限判定,如果返回值為ADMIN,則視為管理員,直接返回成功,否則返回失敗。

寫到這里,后臺的品類管理模塊就寫完了。因為該模塊的功能接口比較少,所以用了較長的篇幅全部寫在一篇博文中,這樣也方便大家一次性就學完后臺的品類管理模塊。

在接下來的博文中,繼續(xù)推進項目進度,將為大家?guī)砗笈_商品模塊的開發(fā),希望大家跟上進度。

如果在之前的博文中你遇到了什么問題,歡迎留言反饋,我會盡可能為大家解決問題。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot開發(fā)案例之配置Druid數(shù)據(jù)庫連接池的示例

    SpringBoot開發(fā)案例之配置Druid數(shù)據(jù)庫連接池的示例

    本篇文章主要介紹了SpringBoot開發(fā)案例之配置Druid數(shù)據(jù)庫連接池的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • java自動生成ID號的方法

    java自動生成ID號的方法

    這篇文章主要介紹了java自動生成ID號的方法,涉及java生成ID號的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Java使用J4L識別驗證碼的操作方法

    Java使用J4L識別驗證碼的操作方法

    這篇文章主要介紹了Java使用J4L識別驗證碼的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Java如何實現(xiàn)HTTP斷點續(xù)傳功能

    Java如何實現(xiàn)HTTP斷點續(xù)傳功能

    其實斷點續(xù)傳的原理很簡單,就是在Http的請求上和一般的下載有所不同而已,本文將詳細介紹Java如何實現(xiàn)HTTP斷點續(xù)傳功能,需要的朋友可以參考下
    2012-11-11
  • java中response對象用法實例分析

    java中response對象用法實例分析

    這篇文章主要介紹了java中response對象用法,結合實例形式分析了Java中response對象的功能及具體使用技巧,需要的朋友可以參考下
    2015-12-12
  • java生成jar包并且單進程運行的實例

    java生成jar包并且單進程運行的實例

    下面小編就為大家分享一篇java生成jar包并且單進程運行的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Spring Security實現(xiàn)退出登錄和退出處理器

    Spring Security實現(xiàn)退出登錄和退出處理器

    本文主要介紹了Spring Security實現(xiàn)退出登錄和退出處理器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • JAVA讀取HDFS的文件數(shù)據(jù)出現(xiàn)亂碼的解決方案

    JAVA讀取HDFS的文件數(shù)據(jù)出現(xiàn)亂碼的解決方案

    這篇文章主要介紹了JAVA讀取HDFS的文件數(shù)據(jù)出現(xiàn)亂碼的解決方案,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • java程序員如何編寫更好的單元測試的7個技巧

    java程序員如何編寫更好的單元測試的7個技巧

    測試是開發(fā)的一個非常重要的方面,可以在很大程度上決定一個應用程序的命運。良好的測試可以在早期捕獲導致應用程序崩潰的問題,但較差的測試往往總是導致故障和停機。本文主要介紹java程序員編寫更好的單元測試的7個技巧。下面跟著小編一起來看下吧
    2017-03-03
  • Java雙色球系統(tǒng)開發(fā)詳解

    Java雙色球系統(tǒng)開發(fā)詳解

    這篇文章主要為大家詳細介紹了Java雙色球系統(tǒng)的開發(fā),超級簡單的邏輯,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

兖州市| 平昌县| 渝北区| 通城县| 乃东县| 凯里市| 岫岩| 来安县| 陕西省| 东乡族自治县| 云安县| 荔波县| 南郑县| 新和县| 陕西省| 会同县| 麦盖提县| 秀山| 寻甸| 宝丰县| 滁州市| 田阳县| 师宗县| 赞皇县| 陇南市| 广水市| 绥江县| 都安| 平定县| 松溪县| 荔浦县| 普兰县| 永康市| 巨野县| 卢氏县| 阿拉善右旗| 沁源县| 建平县| 苏尼特右旗| 赣州市| 肥西县|