溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Java怎么實現一個首頁分類列表功能

發(fā)布時間:2021-05-11 16:34:39 來源:億速云 閱讀:443 作者:Leah 欄目:編程語言

使用Java怎么實現一個首頁分類列表功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

Java的特點有哪些

Java的特點有哪些 1.Java語言作為靜態(tài)面向對象編程語言的代表,實現了面向對象理論,允許程序員以優(yōu)雅的思維方式進行復雜的編程。 2.Java具有簡單性、面向對象、分布式、安全性、平臺獨立與可移植性、動態(tài)性等特點。 3.使用Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。

一、分類管理模塊-增加品類功能的實現

先來看Service層

// 添加品類 
 public ServerResponse addCategory(String categoryName, Integer parentId){ 
  if(parentId == null || StringUtils.isBlank(categoryName)){ 
   return ServerResponse.createByErrorMessage("參數錯誤"); 
  } 
 
  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是否存在,如果不存在則提示參數錯誤,否則就繼續(xù)使用JavaBean的實例來增加品類。同樣的,在用JavaBean增加完之后,將結果插入到數據庫中,如果返回的生效行數大于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ī)定接口請求的方法,是因為品類管理模塊是網站管理員進行后臺管理,屬于后臺模塊。針對于后臺模塊,其是公司內部員工使用,不需要對外界進行公開,所以使用默認的GET方式請求就可以。

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

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

二、分類管理模塊-更新品類名稱功能的實現

先來看Service層

// 更新品類名稱 
 public ServerResponse updateCategoryName(String categoryName, Integer categoryId){ 
  if(categoryId == null || StringUtils.isBlank(categoryName)){ 
   return ServerResponse.createByErrorMessage("更新品類參數錯誤"); 
  } 
  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("無權限操作,請登錄管理員"); 
  } 
 }

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

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

Service層

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

處理一組商品信息,往往使用集合的方式,根據集合不同種類,其適用長青也不一樣。這里,我用的是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),需要傳遞一個參數,就是當前需要打印日志的類,例如這里的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("無權限操作,請登錄管理員"); 
  } 
 }

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

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

看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。在主方法中通過調用輔助方法,將商品的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(); 
 }

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI