2.02 分类功能实现后台实现

news2024/12/23 18:23:06

三级分类效果图:在这里插入图片描述

一 实现一级分类查询
步骤1:使用逆向工程生成创建实体类和对应的mapper

 实体类:Category
   mapper: CategoryMapper和CategoryMapper.xml

步骤2:

import com.one.pojo.Category;
import java.util.List;
public interface CategoryService {
    /**
     * 查询所有一级分类
     * @return
     */
    public List<Category> queryAllRootLevelCat();
}
import com.one.mapper.CategoryMapper;
import com.one.pojo.Category;
import com.one.service.category.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
@Service
public class CategoryServiceImpl implements CategoryService {
    @Autowired
    private CategoryMapper categoryMapper;
    @Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public List<Category> queryAllRootLevelCat() {
        Example example = new Example(Category.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("type", 1);
        List<Category> result =  categoryMapper.selectByExample(example);
        return result;
    }
}

步骤3:

/**
 * 首页分类展示需求:
 * 1. 第一次刷新主页查询大分类,渲染展示到首页
 * 2. 如果鼠标上移到大分类,则加载其子分类的内容,如果已经存在子分类,则不需要加载(懒加载)
 */
@ApiOperation(value = "获取商品分类(一级分类)", notes = "获取商品分类(一级分类)", httpMethod = "GET")
@GetMapping("/cats")
public JSONResult cats() {
	List<Category> list = categoryService.queryAllRootLevelCat();
	return JSONResult.ok(list);
}

二 根据一级分类查询对应的二级和三级分类
步骤1:定义查询结果封装vo实体类

public class CategoryVO {
    private Integer id;
    private String name;
    private String type;
    private Integer fatherId;
    // 三级分类vo list
    private List<SubCategoryVO> subCatList;
}

public class SubCategoryVO {
    private Integer subId;
    private String subName;
    private String subType;
    private Integer subFatherId;
}

步骤2:定义对应查询二级和三级分类mapper

import com.one.vo.CategoryVO;
import java.util.List;
public interface CategoryMapperCustom {
    public List<CategoryVO> getSubCatList(Integer rootCatId);
}

CategoryMapperCustom.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.one.mapper.CategoryMapperCustom" >
  <resultMap id="myCategoryVO" type="com.one.vo.CategoryVO">
    <id column="id" property="id"/>
    <result column="name" property="name"/>
    <result column="type" property="type"/>
    <result column="fatherId" property="fatherId"/>
    <!--
      collection 标签:用于定义关联的list集合类型的封装规则
      property:对应三级分类的list属性名
      ofType:集合的类型,三级分类的vo
    -->
    <collection property="subCatList" ofType="com.one.vo.SubCategoryVO">
      <id column="subId" property="subId"/>
      <result column="subName" property="subName"/>
      <result column="subType" property="subType"/>
      <result column="subFatherId" property="subFatherId"/>
    </collection>
  </resultMap>

  <select id="getSubCatList" resultMap="myCategoryVO" parameterType="int">
    SELECT
        f.id as id,
        f.`name` as `name`,
        f.type as type,
        f.father_id as fatherId,
        c.id as subId,
        c.`name` as subName,
        c.type as subType,
        c.father_id as subFatherId
    FROM
        category f
    LEFT JOIN
        category c
    on
        f.id = c.father_id
    WHERE
        f.father_id = #{rootCatId}
  </select>

</mapper>

步骤3:实现类调用mapper对应的方法

/**
 * 根据一级分类id查询子分类信息
 * @param rootCatId
 * @return
 */
public List<CategoryVO> getSubCatList(Integer rootCatId);
@Autowired
private CategoryMapperCustom categoryMapperCustom;
@Transactional(propagation = Propagation.SUPPORTS)
@Override
public List<CategoryVO> getSubCatList(Integer rootCatId) {
	return categoryMapperCustom.getSubCatList(rootCatId);
}

步骤4:写接口调用对应的方法实现

@ApiOperation(value = "获取商品子分类", notes = "获取商品子分类", httpMethod = "GET")
@GetMapping("/subCat/{rootCatId}")
public JSONResult subCat(
		@ApiParam(name = "rootCatId", value = "一级分类id", required = true)
		@PathVariable Integer rootCatId) {
	if (rootCatId == null) {
		return JSONResult.errorMsg("分类不存在");
	}
	List<CategoryVO> list = categoryService.getSubCatList(rootCatId);
	return JSONResult.ok(list);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/785957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频讲解Codeforces Round 887 (Div. 2)(A--C)

文章目录 A. Desorting1、板书2、代码 B. Fibonaccharsis1、板书2、代码 C. Ntarsis Set1、板书2、代码 视频讲解Codeforces Round 887 (Div. 2)&#xff08;A–C&#xff09; A. Desorting 1、板书 2、代码 #include<bits/stdc.h> #define endl \n #define INF 0x3f…

Linux6.13 Docker LNMP项目搭建

文章目录 计算机系统5G云计算第四章 LINUX Docker LNMP项目搭建一、项目环境1.环境描述2.容器ip地址规划3.任务需求 二、部署过程1.部署构建 nginx 镜像2.部署构建 mysql 镜像3.部署构建 php 镜像4.验证测试 计算机系统 5G云计算 第四章 LINUX Docker LNMP项目搭建 一、项目…

功能测试也可以发现数据库相关的性能问题

很多同学认为功能测试和性能测试是严格分开的&#xff0c;功能测试人员无法发现性能问题。其实不是这样的&#xff0c;功能测试人员在验证功能时也可以发现性能问题&#xff1b;一些功能反而在功能测试环境不好验证&#xff0c;需要在性能环境上测试。 今天咱们就说一下测试涉及…

Spring Security 身份验证的基本类/架构

目录 1、SecurityContextHolder 核心类 2、SecurityContext 接口 3、Authentication 用户认证信息接口 4、GrantedAuthority 拥有权限接口 5、AuthenticationManager 身份认证管理器接口 6、ProviderManager 身份认证管理器的实现 7、AuthenticationProvider 特定类型的…

西北乱跑娃 -- CSS动态旋转果冻效果

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>旋转果冻</title> <style> #myDIV {margin: 250px;width: 250px;height: 250px;background: orange;position: relative;font-size: 20px;animation: anima…

【前缀和】LeetCode 560. 和为k的字数组

文章目录 题目描述方法1 暴力方法2 暴力优化方法3 前缀和方法4 前缀和优化 题目描述 力扣560题&#xff0c;链接&#xff1a;https://leetcode.cn/problems/subarray-sum-equals-k 方法1 暴力 暴力法&#xff0c;三重for循环&#xff0c;时间复杂度 O ( N 3 ) O(N^3) O(N3)&a…

[回馈]ASP.NET Core MVC开发实战之商城系统(二)

经过一段时间的准备&#xff0c;新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始&#xff0c;在之前的文章中&#xff0c;讲解了商城系统的整体功能设计&#xff0c;页面布局设计&#xff0c;环境搭建&#xff0c;系统配置&#xff0c;及首页商品类型&#xff0c;bann…

一百三十五、Azkaban——AzkabanWebServer服务开启后秒退

一、问题 Azkaban的AzkabanWebServer服务开启后秒退&#xff0c;造成Azkaban的页面登录不上 AzkabanWebServer服务开启后&#xff0c;第一个jps里面有AzkabanWebServer&#xff0c;随后第二个jps里面没有AzkabanWebServer 二、问题原因 MySQL中azkaban数据库的表executors的…

PDF转换成word乱码了怎么办?最实用的方法在这里!

在日常办公中&#xff0c;我们常常需要将PDF文件转换成Word文件&#xff0c;以便于编辑和修改。然而有时候在PDF转Word的过程中可能会遇到乱码的问题&#xff0c;让人感到困扰。在面对这种情况时&#xff0c;我们需要选择正确的方法&#xff0c;避免文件转换后出现乱码。下面我…

面积阵列封装技术-BGA CSP/Flip Chip

面积阵列封装有不同的类型&#xff0c;因此也就有着不 同的结构特点和组装方式。面积阵列封装以其结构 形 式 可 分 为 两 大 类 :BGA/CSP 和 倒 装 芯 片&#xff08;Flip Chip&#xff09;。 1 BGA技术 BGA 形式封装是 1980 年由富士通公司提出&#xff0c; 在日本 IBM 公司…

Excel处理数据的常用函数整理

1.常用函数 2.常见数学和三角函数 excel求逆矩阵的例子&#xff1a; 3.统计函数

图像滤波器

图像噪声 • 图像噪声是图像在获取或是传输过程中受到随机信号干扰&#xff0c;妨碍人们对图像理解及分析处理 的信号。 • 图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量&#xff0c;图像在传输过程中产 生图像噪声的主要因素是所用的传输信道受到了噪声…

mysql用is null查不生效的一种情况

今天发现了一个诡异的情况&#xff1a; 首先是在记录中可以明显看到 update_time有null记录。 但用一下sql查询&#xff1a; SELECT count(*) FROM risknoting WHERE noting_state未标注 and update_time is NULL得到结果却是0条。 但应该无论如何都要大于等于1条。 因此&am…

互联网医院系统|互联网医院软件开发|互联网医院搭建方案

随着互联网技术的发展&#xff0c;互联网医院系统逐渐成为医疗服务的新模式&#xff0c;为患者和医生提供了更加方便和高效的医疗体验。下面将介绍互联网医院系统的功能优势。   在线挂号和预约&#xff1a;互联网医院系统可以提供在线挂号和预约功能&#xff0c;患者可以通过…

Mysql关于进程中的死锁和解除锁

Mysql 经常会遇到语句或者存储过程长时间没有反应&#xff0c;大概率就是挂掉了&#xff0c;或者死锁了。 可通过如下几种方式来查看当前进程状态 1. 查询数据库所有的进程状态 SHOW PROCESSLIST SELECT * FROM information_schema.PROCESSLIST; 2. 查询在锁的事务 SELECT…

Unity TMP (TextMeshPro) 创建字体材质

1 TMP 简介 完整名称&#xff1a;Text Mesh Pro &#xff0c;unity新一代主流字体插件 1.1 组件变化 内置的Text组件以及与内置Text组件绑定的Button、DropDown、InputField均被替换为使用TextMeshPro的版本 内置的Text组件以及与内置Text组件绑定的Button、DropDown、Input…

Python基于PyTorch实现循环神经网络分类模型(LSTM分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 LSTM网络是目前更加通用的循环神经网络结构&#xff0c;全称为Long Short-Term Memory&#xff0c;翻…

事业单位-语言理解1】逻辑填空-词的辨析04

事业单位-语言理解1】逻辑填空04 一、词的辨析1.1词义侧重瞻前顾后 三、程度轻重四、感情色彩五&#xff0c;今日词义搭配 一、词的辨析 2022年联考常见词汇 1.1词义侧重 推脱&#xff0c;推托&#xff0c;可以把拆开&#xff0c;单单看脱和托的区别。 注意前后的主语和宾…

性能测试请求重试实现思路

文章目录 一、背景二、尝试的解决方案三、解决方案1&#xff1a;jmeter retrier插件&#xff01;有点用但是不是特别有用-_-||四&#xff0c;最终解决方案&#xff1a;lucust! 一、背景 最近系统需要压测一些活动&#xff0c;场景是新建抽奖活动之后&#xff0c;每隔2s查询1次…

Java 稀疏数组

实际需求&#xff08;应用场景&#xff09; 稀疏数组基本介绍 上面表格的第一行中的6、7、8 表示左边的二维数组一共有 6 行 7 列&#xff0c;在数组中有 8 个不同的值&#xff0c;分别是22、15、 11、17、 -6、 39、 91、 28. 表格的其他行表示每个值所在的行列信息&#xff0…