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 ... 
随机推荐
- eclipse 搭建连接 activemq
			今天我特地写下笔记,希望可以完全掌握这个东西,也希望可以帮助到任何想对学习这个东西的同学. 1.下载activemq压缩包,并解压(如果需要下载请看文章尾部附录) 2.进入bin文件夹,(64位电脑就 ... 
- CentOS7 扩容磁盘非根分区
			CentOS7扩展磁盘分区  因为业务所在分区空间不足,需要扩容.分配磁盘大小为1T但实际使用过程中发现仅使用了500G左右空间,本次计划在原有磁盘上扩容1T,加上之前500G空闲直接扩容1.5TB ... 
- 使用Tomcat Native提升Tomcat IO效率
			目录 简介 Tomcat的连接方式 APR和Tomcat Native 在tomcat中使用APR 简介 IO有很多种,从最开始的Block IO,到nonblocking IO,再到IO多路复用和异 ... 
- Angular:使用前端proxy代理解决跨域问题
			①在项目文件的根目录下新建文件proxy.config.json { "/": { "target": "http://127.0.0.1:3000& ... 
- ADF 第四篇:管道的执行和触发器
			Azure Data Factory 系列博客: ADF 第一篇:Azure Data Factory介绍 ADF 第二篇:使用UI创建数据工厂 ADF 第三篇:Integration runtime ... 
- Java中构造代码块的使用
			例子1 public class Client { { System.out.println("执行构造代码块1"); } { System.out.println("执 ... 
- 2020-2021-1 20209307《Linux内核原理与分析》第五周作业
			一.理论知识 系统调用:操作系统为用户态进程与硬件设备进行交互提供的一组接口. 系统调用的三层皮:API(应用程序接口),中断向量system_call,中断服务程序sys_xyz 宏观上Linux操 ... 
- 最火的分布式调度系统 XXL-JOB 安装和简单使用
			唉,在谈文章之前先说一下自己的情况.原计划是在上周六写完这篇文章的,然而周六的时候打开电脑的,按照平常"惯例",先补一些 "黑色五叶草"/"进巨&qu ... 
- java基础:详解类和对象,类和对象的应用,封装思想,构造方法详解,附练习案列
			1. 类和对象 面向对象和面向过程的思想对比 : 面向过程 :是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的 面向对象 :是一种以对象为中心的编程思想,通过指挥对象实现具体的功能 1. ... 
- Python利用openpyxl带格式统计数据(1)- 处理excel数据
			统计数据的随笔写了两篇了,再来一篇,这是第三篇,前面第一篇是用xlwt写excel数据,第二篇是用xlwt写mysql数据.先贴要处理的数据截图: 再贴最终要求的统计格式截图: 第三贴代码: 1 '' ... 
