后台分类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. 使用纯js 不导包实现 table 导出 Excel

    1.将js粘贴到项目 2.设置table标签 id3.定义按钮,调用方法即可 1 <!DOCTYPE html> 2 <html lang="zh_CN"> ...

  2. sessionStorage 退出登录删除sessionStorage储存

    1 登录后在sessionStorage中添加token的值,退出后清空 登录后在sessionStorage中添加token的值,退出后清空 localStorage 和 sessionStorag ...

  3. 基于WSL2 的 Docker Desktop 启动时 Failed to set version to docker-desktop: exit code: -1的解决方法

    在Windows 10 的 2004 版本  中, 启用 使用Docker Desktop 时 发现  根本无法启动, 偶尔 或者频繁的出错: System.InvalidOperationExcep ...

  4. 三、LoadRunner卸载

    由于安装的时候没看提前了解清楚,LoadRunner社区版只能模拟50个用户,满足不了工作需求,删了重装吧. 1-打开"控制面板"-点击"卸载程序" 2-找到H ...

  5. JavaSE03-运算符&分支语句

    1.运算符 1.1 算术运算符 1.1.1 运算符和表达式 运算符:对常量或者变量进行操作的符号 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式. 不同运算符连接的表达式 ...

  6. Navicat Primium连接数据库报ORA-28547错误

    这个问题主要是Navicat Primium与orecal中的oci.dll版本不一致造成的,无论是本地数据库或者网络数据库. 解决方法:在数据库orecal安装目录中搜索oci.dll文件,找到后将 ...

  7. 嵌入式开发笔记——调试组件SEGGER_RTT

    一.前言 在嵌入式开发过程中,经常会通过打印输出一些调试信息来调试参数.查找问题等,通常我的做法都是使用芯片的串口硬件设备配合串口助手软件来进行调试.但是这次项目的PCB硬件设计并未预留串口调试接口, ...

  8. vue API 知识点(3) --- 实例 总结

    一.实例 property 1.vm.$data Vue 实例观察的数据对象,Vue 实例代理了对其 data 对象 property 的的访问 2.vm.$props 当前组件接收到的 props ...

  9. Autofac的基本使用---4、使用Config配置

    Autofac的基本使用---目录 准备 使用的表是Student,创建相关的IDAL.DAL.IBLL.BLL层. 使用EF,创建一个Model层,存放edmx文件. 创建一个Infrastruct ...

  10. [.NET] WCFDataService项目host到IIS上碰到的一个问题:数据库未能打开

    今天在尝试重现OP一个问题的,遇到了一个新的问题. 项目坏境: WCF Data Service 5.6 Entity Framewrok 5(不用6的原因时要重新配置WCF项目) SQL Serve ...