后台分类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商城分类模块总结的更多相关文章

  1. mmall商城购物车模块总结

    购物车模块的设计思想 购物车的实现方式有很多,但是最常见的就三种:Cookie,Session,数据库.三种方法各有优劣,适合的场景各不相同.Cookie方法:通过把购物车中的商品数据写入Cookie ...

  2. mmall商城用户模块开发总结

    1.需要实现的功能介绍 注册 登录 用户名校验 忘记密码 提交问题答案 重置密码 获取用户信息 更新用户信息 退出登录 目标: 避免横向越权,纵向越权的安全漏洞 MD5明文加密级增加的salt值 Gu ...

  3. JavaWeb网上图书商城完整项目--day02-24.分类模块的相关类创建

    所谓的分类模块:就是显示所有的分类的功能,显示所有的分类在left.jsp页面中 这就是显示所有的分类: 要实现上面的,我们首先创建一个分类模块,该模块需要实现下面的功能 我们先创建上面的java包 ...

  4. mmal商城商品模块总结

    学习目标 FTP服务器的对接 SpringMVC文件上传 流读取properties配置文件 抽象POJO.BO.VO对象之间的转换关系及解决思路 joda-time快速入门 静态代码块 mybati ...

  5. bookStore案例第一篇【部署开发环境、解决分类模块】

    前言 巩固Servlet+JSP开发模式,做一个比较完整的小项目 成果图 该项目包含了两个部分,前台和后台. 前台用于显示 后台用于管理 该项目可分为5个模块来组成:分类模块,用户模块,图书模块,购买 ...

  6. Mvp快速搭建商城购物车模块

    代码地址如下:http://www.demodashi.com/demo/12834.html 前言: 说到MVP的时候其实大家都不陌生,但是涉及到实际项目中使用,还是有些无从下手.因此这里小编带着大 ...

  7. asp.net mvc 抓取京东商城分类

    555 asp.net mvc 抓取京东商城分类   URL:http://www.jd.com/allSort.aspx   效果:   //后台代码 public ActionResult Get ...

  8. 商城分类导航实现 (css)

    代码实例:demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  9. ThinkPHP无限分类模块设计

    public function catelist(){ $cate=D('Cate'); //var_dump($cate->gettree());exit; $cateres=$cate-&g ...

随机推荐

  1. php curl的使用心得

    php的curl有很多参数,整理一下其中的常用参数的作用 1.CURLOPT_SSL_VERIFYHOST 设置为 1 是检查服务器SSL证书中是否存在一个公用名(common name).译者注:公 ...

  2. 架构师基础技能-搭建gitLab

    前言 想要成为一名架构师,一定要有从无到有搭建环境的能力,这是作为架构师的基础技能,而gitLab服务器的搭建一定又是重中之重. 相信很多小伙伴的公司也在使用gitLab,但都是你们公司的架构师搭建好 ...

  3. 没有部署ingress pod的woker节点telnet slb的80 443端口不通

    一,问题描述 没有部署ingress pod的woker节点telnet slb的80 443端口不通 二,解决办法 方法一:改用svc地址调用 方法二:让每台woker节点都部署ingress po ...

  4. 自顶向下redis4.0(2)文件事件与客户端

    redis4.0的文件事件与客户端 目录 redis4.0的文件事件与客户端 简介 正文 准备阶段 接受客户端连接 处理数据 返回数据结果 参考文献 简介 文件事件的流程大概如下: 在服务器初始化时生 ...

  5. rbd锁引起kvm虚拟机无法启动的故障

    前言 环境因为一些问题(网络,或者磁盘,或者其它各种异常),引起了集群的状态的一些变化,变化之后,集群的某些虚拟机正常某些虚拟机出现异常,异常现象就是无法启动 特别是win server2008 ,会 ...

  6. 使用Github快速的寻找项目

    作为一个3年的码农昨天在学习项目,顺便总结一下 ,在Github找项目的几个常用方式 ,如果对您有帮助,可以点个关注,便于下次光顾! 首先我们来看一下常用命令 1.指定搜索方式 搜索文件中有spiri ...

  7. 探究虚拟dom与diff算法

    一.虚拟DOM (1)什么是虚拟DOM? vdom可以看作是一个使用javascript模拟了DOM结构的树形结构,这个树结构包含整个DOM结构的信息,如下图:   可见左边的DOM结构,不论是标签名 ...

  8. matplotlib学习日记(七)---误差棒图

    (一)误差棒图----误差置信区间的表示 import matplotlib.pyplot as plt import numpy as np x = np.linspace(0.1, 0.6, 10 ...

  9. sql中模糊查询和在开始和结束时间之间

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...

  10. Echarts数据可视化,easyshu图表集成。

      介绍: ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Sa ...