《尚品甄选》:后台系统——权限管理之分类和品牌管理,使用EasyExcel导入导出数据(debug一遍)

文章目录

  • 一、分类管理
    • 1.1 表结构介绍
    • 1.2 分类列表查询
  • 二、EasyExcel使用
    • 2.1 EasyExcel简介
    • 2.2 导出功能
    • 2.3 导入功能
  • 三、品牌管理
    • 3.1 表结构介绍
    • 3.2 列表查询
    • 3.3 添加品牌
    • 3.4 修改品牌
    • 3.5 删除品牌

一、分类管理

分类管理就是对商品的分类数据进行维护。

在这里插入图片描述

1.1 表结构介绍

分类数据所对应的表结构如下所示,分类数据是具有层级结构的

CREATE TABLE `category` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '分类id',`name` varchar(50) DEFAULT NULL COMMENT '分类名称',`image_url` varchar(200) DEFAULT NULL,`parent_id` bigint DEFAULT NULL COMMENT '父分类id',`status` tinyint DEFAULT NULL COMMENT '是否显示[0-不显示,1显示]',`order_num` int DEFAULT NULL COMMENT '排序',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0:可用 1:不可用)',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9992 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品分类'

1.2 分类列表查询

需求分析:
当页面初始化完毕以后,此时请求后端接口查询所有的一级分类数据,一级分类数据的parent_id为0。当用户点击某一个分类前的小箭头,那么此时就需要查询该分类下所对应的所有的子分类数据,是一种懒加载实现方式。

话不多说,让我们来debug一遍:首先来到controller层,拿到前端传来的第一级id值
在这里插入图片描述
进入业务层,根据id值从数据库中查询数据,可以看到,我这里有10条数据
在这里插入图片描述
下图的for循环是用来判断该分类下是否有子节点,有子节点就设置字段hasChildren为true;前端根据hasChildren的值来展示样式。
在这里插入图片描述
对应的两个SQL语句如下:

@Mapper
public interface CategoryMapper {@Select("select * from category where parent_id = #{parentId} and is_deleted = 0 order by id desc")List<Category> selectByParentId(Long parentId);@Select("select count(*) from category where parent_id = #{id} and is_deleted = 0")int countByParentId(Long id);
}

二、EasyExcel使用

后台管理系统是管理、处理企业业务数据的重要工具,在这样的系统中,数据的导入和导出功能是非常重要的,其主要意义包括以下几个方面:

  • 提高数据操作效率:手动逐条添加或修改数据不仅费时费力,而且容易出错,此时就可以将大量数据从Excel等表格软件中导入到系统中,通过数据导入功能,可以直接将表格中的数据批量导入到系统中,提高了数据操作的效率。

  • 实现数据备份与迁移:通过数据导出功能,管理员可以将系统中的数据导出为 Excel 或其他格式的文件,以实现数据备份,避免数据丢失。同时,也可以将导出的数据文件用于数据迁移或其他用途。

  • 方便企业内部协作:不同部门可能会使用不同的系统或工具进行数据处理,在这种情况下,通过数据导入和导出功能,可以方便地转换和共享数据,促进企业内部协作。


2.1 EasyExcel简介

官网地址:https://easyexcel.opensource.alibaba.com/

EasyExcel 的主要特点如下:

  • 高性能:EasyExcel 采用了异步导入导出的方式,并且底层使用 NIO 技术实现,使得其在导入导出大数据量时的性能非常高效。

  • 易于使用:EasyExcel 提供了简单易用的 API,用户可以通过少量的代码即可实现复杂的 Excel 导入导出操作。

  • 可扩展性好:EasyExcel 具有良好的扩展性,用户可以通过自定义 Converter 对自定义类型进行转换,或者通过继承 EasyExcelListener 来自定义监听器实现更加灵活的需求。

2.2 导出功能

需求说明:
当用户点击导出按钮的时候,此时将数据库中所有分类的数据导出到一个excel文件中,如图所示:

在这里插入图片描述

首先引入依赖:

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version>
</dependency>

接着定义一个实体类来封装每一行的数据:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CategoryExcelVo {@ExcelProperty(value = "id" ,index = 0)private Long id;@ExcelProperty(value = "名称" ,index = 1)private String name;@ExcelProperty(value = "图片url" ,index = 2)private String imageUrl ;@ExcelProperty(value = "上级id" ,index = 3)private Long parentId;@ExcelProperty(value = "状态" ,index = 4)private Integer status;@ExcelProperty(value = "排序" ,index = 5)private Integer orderNum;
}

debug看一遍流程,来到controller层
在这里插入图片描述
来到业务层,首先设置响应结果类型,接着查询分类表,可以看到查询到了703条数据
在这里插入图片描述
数据库查询到的数据不是我们需要的数据格式,因此需要将数据库查询到的数据转换成自己定义的CategoryExcelVo类格式。
在这里插入图片描述
SQL语句编写如下:

    @Select("select id, name, image_url, parent_id, status, order_num from category where is_deleted = 0 order by id")List<Category> selectAll();

2.3 导入功能

需求说明:
当用户点击导入按钮的时候,此时会弹出一个对话框,让用户选择要导入的excel文件,选择完毕以后将文件上传到服务端,服务端通过easyExcel解析文件的内容,然后将解析的结果存储到category表中。如下所示:

在这里插入图片描述

通过EasyExcel的操作文档,对于导入功能,我们需要创建监听器类ExcelListener,让其实现ReadListener接口。

public class ExcelListener<T> implements ReadListener<T> {/*** 每隔100条将数据存入数据库*/private static final int BATCH_COUNT = 100;/*** 缓存的数据*/private List<T> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);private CategoryMapper categoryMapper;public ExcelListener(CategoryMapper categoryMapper) {this.categoryMapper = categoryMapper;}//每解析一行数据就会调用一次该方法@Overridepublic void invoke(T o, AnalysisContext analysisContext) {cachedDataList.add(o);//达到BATCH_COUNT时,需要去存储一次数据库,防止数据几万条数据在内存,容易OOMif (cachedDataList.size() >= BATCH_COUNT) {saveData();//存储完成,清理listcachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);}}//excel解析完毕以后需要执行的代码,这里也要保存数据,确保最后遗留的数据也存储到数据库@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {saveData();}//保存数据到数据库private void saveData() {categoryMapper.batchInsert(cachedDataList);}
}

这里的批量插入SQL语句编写如下:

    <!--    <T> void batchInsert(List<T> cachedDataList);--><insert id="batchInsert">insert into category values<foreach collection="cachedDataList" item="item" separator=",">(#{item.id}, #{item.name}, #{item.imageUrl}, #{item.parentId},#{item.status}, #{item.orderNum},now(), now(), 0)</foreach></insert>

创建好监听器,接下来让我们debug,首先来到controller层,接收文件"01.xlsx"

在这里插入图片描述
来到业务层,首先创建监听器类,然后调用read方法读取excel数据。
在这里插入图片描述

三、品牌管理

品牌管理就是对商品所涉及到的品牌数据进行维护。

3.1 表结构介绍

CREATE TABLE `brand` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',`name` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '品牌名称',`logo` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '品牌图标',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0:可用 1:不可用)',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='分类品牌'

3.2 列表查询

需求说明:
当品牌管理页面加载完毕以后就向后端发送分页查询请求,后端进行分页查询,返回分页结果数据。

在这里插入图片描述

继续debug,在controller层,接收到分页参数信息
在这里插入图片描述
业务层代码也很简单,分页查询品牌数据,我这里只查到了2条数据
在这里插入图片描述

SQL语句的编写也很容易

    @Select("select * from brand where is_deleted = 0 order by id desc")List<Brand> findByPage();

3.3 添加品牌

需求说明:
用户点击添加按钮,填写表单数据,点击提交按钮,请求后端接口完成数据的保存操作。效果如下所示:
在这里插入图片描述
controller层获取品牌name、logo图片地址
在这里插入图片描述
业务层将数据存入品牌表
在这里插入图片描述
SQL语句编写如下:

    @Insert("insert into brand (name, logo, create_time, update_time, is_deleted)\n" +"values (#{name}, #{logo}, now(), now(), 0)")void save(Brand brand);

3.4 修改品牌

需求说明:
当用户点击修改按钮的时候,对话框中需要将当前行所对应的品牌数据在该表单页面进行展示。当用户在该表单中点击提交按钮的时候那么此时就需要将表单进行提交,在后端需要提交过来的表单数据修改数据库中的即可。
在这里插入图片描述
controller拿到修改的数据,我这里只修改了name字段
在这里插入图片描述
业务层根据实体类,修改品牌表。
在这里插入图片描述
修改操作对应的SQL语句如下:

    <!--    void updateById(Brand brand);--><update id="updateById">update brand set<if test="name != null and name != ''">name = #{name},</if><if test="logo != null and logo != ''">logo = #{logo},</if>update_time = now()whereid = #{id}</update>

3.5 删除品牌

需求说明:
当点击删除按钮的时候此时需要弹出一个提示框,询问是否需要删除数据?如果用户点击是,那么此时向后端发送请求传递id参数,后端接收id参数进行逻辑删除

在这里插入图片描述
来到controller层,获取到要删除品牌的id值
在这里插入图片描述
业务层也同样很简单,简单的更新语句
在这里插入图片描述
SQL编写如下:

    @Update("update brand set is_deleted = 1,update_time = now() where id = #{id}")void deleteById(Long id);

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

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

相关文章

缺省参数的声明和定义

首先&#xff0c;函数缺省参数不能同时出现在声明和定义中&#xff0c;如出现则报错&#xff1a; 声明和定义中同时出现缺省参数 ctrlb&#xff0c;编译报错&#xff0c;提示 “test"&#xff1a;重定义默认参数&#xff1a;参数1 编译报错 当函数的声明和定义中都出现…

第10关:基数排序

任务要求参考答案问答98 任务描述相关知识 基数排序算法编程要求测试说明 任务描述 本关任务&#xff1a;实现基数排序算法&#xff0c;并将乱序数列变成升序。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.基数排序算法。 基数排序算法 基数排序是按…

Node.js下载安装教程

一、下载安装包 1、百度网盘自提链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Bbw895MtUgjlfZylPHCCxw 提取码&#xff1a;x89v 2、进入官网下载 https://nodejs.org/zh-cn/download/ 选择对应版本&#xff0c;我这里选的windows64位版本 二、安装程序 1、…

使用shell快速查看电脑曾经连接过的WiFi密码

此方法只能查看以前连接过的wifi名称和对应的密码 查看连接过的WiFi名称netsh wlan show profiles查看具体的WiFi名称netsh wlan show profile name"你的wifi名称" keyclear

vivado综合分析与收敛技巧1

使用细化视图对 RTL 进行最优化 完成任意实现步骤后使用 report_timing 、 report_timing_summary 或 report_design_analysis 分析时序结果时&#xff0c; 您必须审查关键路径结构 &#xff0c; 了解是否可通过修改 RTL 、使用综合属性或者使用其他综合选项来更有效地将…

LeetCode.24两两交换链表中的节点

LeetCode.24两两交换链表中的节点 1.问题描述2.解题思路3.代码 1.问题描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示…

雷达公式实现(matlab)

雷达公式实现 代码来源&#xff1a;《雷达系统分析与设计(MATLAB版)(第三版)》 function [snr] radar_eq(pt,freq,g,sigma,b,nf,loss,range) % This program implements Eq.(1.63) %% Inputs:% pt——峰值功率&#xff0c;W% freq——雷达中心频率&#xff0c;Hz% g——天线…

IntelliJ IDEA 中有什么让你相见恨晚的技巧

一、条件断点 循环中经常用到这个技巧&#xff0c;比如&#xff1a;遍历1个大List的过程中&#xff0c;想让断点停在某个特定值。 参考上图&#xff0c;在断点的位置&#xff0c;右击断点旁边的小红点&#xff0c;会出来一个界面&#xff0c;在Condition这里填入断点条件即可&…

AI旅游:旅游行业的人工智能成熟艺术适应从实践到表现报告

今天分享的是AI系列深度研究报告&#xff1a;《AI旅游&#xff1a;旅游行业的人工智能成熟艺术适应从实践到表现报告》。 &#xff08;报告出品方&#xff1a;accenture&#xff09; 报告共计&#xff1a;25页 旅行还没有充分利用AI所能做的一 而旅游业比两年前强多了。公司…

如何通过Portal实现消息集成

在数字化时代浪潮下&#xff0c;信息的流通与交互已变得至关重要&#xff0c;不论是在企业内部日常协作&#xff0c;还是与外部客户的紧密沟通&#xff0c;信息的快速、准确、实时传递都成为了确保业务顺畅进行的关键因素、决策精准的核心要素。 为了满足这种日益增长的需求&a…

flask web开发学习之初识flask(一)

一、概念 flask是一个使用python编写的轻量级web框架&#xff0c;作者为Armin Ronacher&#xff08;中文名&#xff1a;阿尔敏罗纳彻&#xff09;&#xff0c;它广泛被应用于web开发和API。flask提供了简洁而灵活地方式来构建web应用&#xff0c;它不会强加太多约束&#xff0…

PyCharm简介与安装

pyCharm的作用 PyCharm是一种Python的集成开发环境&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高效率的工具 pyCharm的集成 pyCharm的分类 PyCharm的下载 网址&#xff1a;https://www.jetbrains.com/pycharm/download/#sectionwindows PyCharm的安装

第五届全国高校计算机能力挑战赛-程序设计挑战赛(C语言模拟题)

1、已有定义“int a[10]{1,2},i0;”&#xff0c;下面语句中与“ a[i]a[i1],i;”等价的是()。 A. a[i]a[i1]; B. a[i]a[i]; C. a[i]a[i1]; D. i,a[i-1]a[i]; 2、两次运行下面的程序&#xff0c;如果从键盘上分别输入6和4&#xff0c;则输出结果是(&#xff09;。 A. 7和5 …

3D打印报价系统

一款3d打印报价系统不仅可以展示三维模型&#xff0c;还能自动计算模型的相关信息&#xff0c;如面积、体积和尺寸信息。 用户上传三维模型后&#xff0c;系统会自动为其生成一个报价页面。在这个页面上&#xff0c;用户可以看到他们模型的所有相关信息&#xff0c;包括面积、体…

常用的系统播放器——MediaPlayer生命周期

常用的系统播放器——MediaPlayer 状态图以及生命周期 Idle状态、End状态、Error状态 MediaPlayer创建实例或者调用reset&#xff08;&#xff09;后就处于Idle状态&#xff0c;即就绪。 任意时刻调用release&#xff08;&#xff09;就会进入End 当运行过程中出错&#xf…

鼎捷副总裁谢丽霞:从四大趋势来看,数智时代企业如何加速研发创新

目录 导读 01 研发创新 势不可挡 ① 从逆向设计走向正向设计 ② 从专业协助走向全面协同 ③ 从单点场景走向业务闭环 ④ 从知识管理走向知识工程 02 鼎捷雅典娜 数智驱动企业新未来 03 鼎捷PLM 赋能企业研发创新 导读 研发&#xff0c;企业长青的必备源动能。如何在…

孩子写作业用的护眼灯哪种好?适合考研的护眼台灯推荐

随着现在小孩子的近视率越来越高&#xff0c;全国中小学生近视比率占大多数&#xff0c;许多家长也开始为孩子的健康成长而担忧&#xff0c;这时很多家长就会选择护眼台灯来为孩子保驾护航。但面对市面上五花八门的台灯品牌&#xff0c;各式各样的台灯许多家长却乱了阵脚&#…

android viewpager 禁止滑动

android viewpager 禁止滑动 前言一、viewpager 禁止滑动是什么&#xff0c;有现成方法吗&#xff1f;二、使用setOnTouchListener三、使用自定义viewpager总结 前言 本文介绍了本人有一个相关的需求需要实现这一功能&#xff0c;在过程中发现自己之前没做过&#xff0c;然后记…

服务器运行情况及线上排查问题常用命令

一、top命令 指令行&#xff1a; top返回&#xff1a; 返回分为两部分 &#xff08;一&#xff09;系统概览&#xff0c;见图知意 以下是几个需要注意的参数 1、load average&#xff1a; 系统负载&#xff0c;即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分…

MES系统数字化看板:生产过程透明化与优化

在当今的制造业中&#xff0c;实现生产过程的透明化和优化已成为企业持续发展的关键。MES系统&#xff08;制造执行系统&#xff09;作为实现这一目标的重要工具&#xff0c;其数字化看板功能在生产现场管理中发挥着越来越重要的作用。 一、MES系统的基本概念与功能 MES系统是…