使用Java怎么實(shí)現(xiàn)一個(gè)首頁(yè)分類列表功能

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

創(chuàng)新互聯(lián)2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元海林做網(wǎng)站,已為上家服務(wù),為海林各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

Java的特點(diǎn)有哪些

Java的特點(diǎn)有哪些 1.Java語(yǔ)言作為靜態(tài)面向?qū)ο缶幊陶Z(yǔ)言的代表,實(shí)現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程。 2.Java具有簡(jiǎn)單性、面向?qū)ο?、分布式、安全性、平臺(tái)獨(dú)立與可移植性、動(dòng)態(tài)性等特點(diǎn)。 3.使用Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。

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

先來看Service層

// 添加品類 
 public ServerResponse addCategory(String categoryName, Integer parentId){ 
  if(parentId == null || StringUtils.isBlank(categoryName)){ 
   return ServerResponse.createByErrorMessage("參數(shù)錯(cuò)誤"); 
  } 
 
  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("添加品類失敗"); 
 }

添加品類相對(duì)來說還是比較簡(jiǎn)單的。和之前的注冊(cè)邏輯有點(diǎn)相似。首先校驗(yàn)前端傳過來的categoryName和parentId是否存在,如果不存在則提示參數(shù)錯(cuò)誤,否則就繼續(xù)使用JavaBean的實(shí)例來增加品類。同樣的,在用JavaBean增加完之后,將結(jié)果插入到數(shù)據(jù)庫(kù)中,如果返回的生效行數(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(), "用戶未登錄,請(qǐng)登錄"); 
  } 
//  校驗(yàn)是否是管理員 
  if (iUserService.checkAdmin(user).isSuccess()) { 
   return iCategoryService.addCategory(categoryName, parentId); 
  } else { 
   return ServerResponse.createByErrorMessage("無權(quán)限操作,請(qǐng)登錄管理員"); 
  } 
 }

首先有一個(gè)不同的地方在與RequestMapping的value值,只有一個(gè)接口名稱,而沒有規(guī)定接口請(qǐng)求的方法,是因?yàn)槠奉惞芾砟K是網(wǎng)站管理員進(jìn)行后臺(tái)管理,屬于后臺(tái)模塊。針對(duì)于后臺(tái)模塊,其是公司內(nèi)部員工使用,不需要對(duì)外界進(jìn)行公開,所以使用默認(rèn)的GET方式請(qǐng)求就可以。

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

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

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

先來看Service層

// 更新品類名稱 
 public ServerResponse updateCategoryName(String categoryName, Integer categoryId){ 
  if(categoryId == null || StringUtils.isBlank(categoryName)){ 
   return ServerResponse.createByErrorMessage("更新品類參數(shù)錯(cuò)誤"); 
  } 
  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(), "用戶未登錄,請(qǐng)登錄"); 
  } 
  if(iUserService.checkAdmin(user).isSuccess()){ 
   return iCategoryService.updateCategoryName(categoryName, categoryId); 
  }else{ 
   return ServerResponse.createByErrorMessage("無權(quán)限操作,請(qǐng)登錄管理員"); 
  } 
 }

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

三、分類管理模塊-獲取平級(jí)品類結(jié)點(diǎn)(后臺(tái)商品搜索)功能的實(shí)現(xiàn)

Service層

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

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

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

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

Controller層

/** 
  * 管理品類-獲取同級(jí)品類的結(jié)點(diǎn) 
  * @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(), "用戶未登錄,請(qǐng)登錄"); 
  } 
  if(iUserService.checkAdmin(user).isSuccess()){ 
   return iCategoryService.getChildrenParalleCategory(categoryId); 
  }else { 
   return ServerResponse.createByErrorMessage("無權(quán)限操作,請(qǐng)登錄管理員"); 
  } 
 }

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

四、分類管理模塊-獲取品類id及子結(jié)點(diǎn)功能的實(shí)現(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é)點(diǎn) 
 private Set<Category> findChildCategory(Integer categoryId, Set<Category> categorySet){ 
  Category category = categoryMapper.selectByPrimaryKey(categoryId); 
  if(category != null){ 
   categorySet.add(category); 
  } 
//  查找子節(jié)點(diǎn) 
  List<Category> categoryList = categoryMapper.selectCategoryChildrenByParentId(categoryId); 
  for(Category categoryItem : categoryList){ 
   findChildCategory(categoryItem.getId(), categorySet); 
  } 
  return categorySet; 
 }

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

Controller層

/** 
  * 管理品類-獲取id及子節(jié)點(diǎn)品類 
  * @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(), "用戶未登錄,請(qǐng)登錄"); 
  } 
  if(iUserService.checkAdmin(user).isSuccess()){ 
   return iCategoryService.selectCategoryAndChildrenById(categoryId); 
  }else{ 
   return ServerResponse.createByErrorMessage("無權(quán)限操作,請(qǐng)登錄管理員"); 
  } 
 }

和之前的獲取品類同級(jí)結(jié)點(diǎn)的邏輯處理完全一樣,這里就不一一贅述了。

五、補(bǔ)充用戶模塊

在后臺(tái)品類管理模塊中,用到了校驗(yàn)當(dāng)前登錄的用戶是否是管理員的方法,這個(gè)是在用戶模塊中寫到的,之前我忘記寫了,所以,在這里做一個(gè)補(bǔ)充。

用戶模塊的Service層

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

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

文章標(biāo)題:使用Java怎么實(shí)現(xiàn)一個(gè)首頁(yè)分類列表功能
URL鏈接:http://www.muchs.cn/article4/gcejie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站排名靜態(tài)網(wǎng)站、網(wǎng)站建設(shè)、域名注冊(cè)、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司