mmall商城分类模块总结
后台分类model的开发具体功能有:添加分类名称,修改分类名称,查询所有子分类,查询父分类以及它下面的子分类(递归)
- 需要注意的是,在后台管理进行操作的时候,都需要验证当前用户是否是管理员的角色,不管进行哪些操作都需要提前验证身份。具体的实现方法就是,先从session中获取user,判断不为空的条件下再进行角色验证,如果不是管理员直接返回错误信息,提示需要管理员登录,如果是管理员才能进行下面的操作。验证方法的主要代码如下:
User user = (User) session.getAttribute(Const.CURRENT_USER);
if (user == null) {
return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(), "需要管理员登录");
}
//校验是否是管理员
ServerResponse response = userService.checkAdminRole(user);
if (response.isSuccess()) {
//是管理员,才进行操作
} else {
return ServerResponse.createByErrorMessage("您不是管理员,没有权限");
}
checkAdminRole方法如下:
public ServerResponse checkAdminRole(User user) {
if (user!=null&&user.getRole()==Const.Role.ROLE_ADMIN.intValue()){
return ServerResponse.createBySuccess();
}
return ServerResponse.createByError();
}
这里主要记录一下查询父分类以及它下面的子类的实现方法;首先我们先搞明白想要获取的数据到底是什么?例如父分类就是一个大的方向的分类,例如家用电器,家用电器下又有许多子分类,像格力,小米,海尔等,而像小米下面又有许多分类。所以我们想要获取的就是当一个父分类没有子分类的时候我们只要返回它本身,如果他下面还有其他的子分类那就返回它本身加上他他的所有子分类下的分类。
因此可以采用递归的形式获取:
/**
* 递归查询 当前分类下的子分类
* 0->1->2;当前节点是0,返回0,1,2;当前节点是1,返回1,2;
* @param categories
* @param categoryId
* @return
*/
private Set<Category> findChildCategory(Set<Category> categories,Integer categoryId){
Category category = categoryMapper.selectByPrimaryKey(categoryId);
if (category!=null){
categories.add(category);
}
List<Category> categoryList = categoryMapper.selectChildrenCategoryByParentId(categoryId);
for (Category category1 : categoryList) {
findChildCategory(categories, category1.getId());
}
return categories;
}
递归结束的条件就是当前分类没有子分类,也就是子分类等于null;否者就把当前分类放到一个set集合中,我妈知道set集合是不重复并且无序的,那他是怎样保证排除重复的呢?没错就是通过对象的equals方法和hashcode方法来判断两个对象是否相等,这里需要知道,如果两个对象通过equals方法比较返回true,那么他俩的hashCode方法也返回true,但是反过来hashcode一样,equals不一定返回true。
所以这里需要重写Category的hashCode方法和equals方法。按照id比较,来半段这两个实例是否相等。
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Category)) {
return false;
}
Category category = (Category) o;
return Objects.equals(getId(), category.getId());
}
@Override
public int hashCode() {
return Objects.hash(getId());
}
mapper的selectByPrimaryKey方法是根据id从数据库中查询到这一个分类,selectChildrenCategoryByParentId是根据父类id查询他下面所有的子类对象封装成list集合,然后在递归。
mmall商城分类模块总结的更多相关文章
- mmall商城购物车模块总结
购物车模块的设计思想 购物车的实现方式有很多,但是最常见的就三种:Cookie,Session,数据库.三种方法各有优劣,适合的场景各不相同.Cookie方法:通过把购物车中的商品数据写入Cookie ...
- mmall商城用户模块开发总结
1.需要实现的功能介绍 注册 登录 用户名校验 忘记密码 提交问题答案 重置密码 获取用户信息 更新用户信息 退出登录 目标: 避免横向越权,纵向越权的安全漏洞 MD5明文加密级增加的salt值 Gu ...
- JavaWeb网上图书商城完整项目--day02-24.分类模块的相关类创建
所谓的分类模块:就是显示所有的分类的功能,显示所有的分类在left.jsp页面中 这就是显示所有的分类: 要实现上面的,我们首先创建一个分类模块,该模块需要实现下面的功能 我们先创建上面的java包 ...
- mmal商城商品模块总结
学习目标 FTP服务器的对接 SpringMVC文件上传 流读取properties配置文件 抽象POJO.BO.VO对象之间的转换关系及解决思路 joda-time快速入门 静态代码块 mybati ...
- bookStore案例第一篇【部署开发环境、解决分类模块】
前言 巩固Servlet+JSP开发模式,做一个比较完整的小项目 成果图 该项目包含了两个部分,前台和后台. 前台用于显示 后台用于管理 该项目可分为5个模块来组成:分类模块,用户模块,图书模块,购买 ...
- Mvp快速搭建商城购物车模块
代码地址如下:http://www.demodashi.com/demo/12834.html 前言: 说到MVP的时候其实大家都不陌生,但是涉及到实际项目中使用,还是有些无从下手.因此这里小编带着大 ...
- asp.net mvc 抓取京东商城分类
555 asp.net mvc 抓取京东商城分类 URL:http://www.jd.com/allSort.aspx 效果: //后台代码 public ActionResult Get ...
- 商城分类导航实现 (css)
代码实例:demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- ThinkPHP无限分类模块设计
public function catelist(){ $cate=D('Cate'); //var_dump($cate->gettree());exit; $cateres=$cate-&g ...
随机推荐
- ADF 第四篇:管道的执行和触发器
Azure Data Factory 系列博客: ADF 第一篇:Azure Data Factory介绍 ADF 第二篇:使用UI创建数据工厂 ADF 第三篇:Integration runtime ...
- 什么叫做ECS云服务器?
什么是ECS云服务器,阿里ECS云服务器与虚拟主机的区别是什么.以前,ECS云服务器还不带"云"字,只是叫做"服务器",毫无疑问"ECS云服务器&qu ...
- JavaScript中遍历的几种方法
1.while循环 while后面跟循环条件和执行语句,只要满足条件,就会一直执行里面的执行 var i = 0 while(){ console.log(i) i++ } 2.do...while循 ...
- Nginx(一):安装与常用命令
简介 Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能 力强,事实上nginx的并发能力确实在同类型的网页服务器中表现 ...
- maven中引入jstl
<!--jsp标签--> <dependency> <groupId>taglibs</groupId> <artifactId>stand ...
- [OI笔记]三种逆元的求法
其实这篇博客只是搬运一下我之前(大概是NOIP那会)写在word里的笔记- 下面直接复制原话,题目是洛谷上求逆元的模板题:https://www.luogu.org/problemnew/show/P ...
- Helm 带你飞
文章目录 目录 文章目录 在没使用 Helm之前,向 K8S部署应用,我们要依次部署 deployment. svc 等,步骤较繁琐.况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复 ...
- python简单爬去前程无忧信息招聘
import sys reload(sys) sys.setdefaultencoding('utf-8') import requests import csv from BeautifulSoup ...
- Java基础进阶:时间类要点摘要,时间Date类实现格式化与解析源码实现详解,LocalDateTime时间类格式化与解析源码实现详解,Period,Duration获取时间间隔与源码实现,程序异常解析与处理方式
要点摘要 课堂笔记 日期相关 JDK7 日期类-Date 概述 表示一个时间点对象,这个时间点是以1970年1月1日为参考点; 作用 可以通过该类的对象,表示一个时间,并面向对象操作时间; 构造方法 ...
- net core 3.1使用ElasticSearch 全文搜索引擎
ElasticSearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene 基础之上. Lucene 可以说是当下最先进.高性能.全功能的搜索引擎库,无论是开源还是私有. ...