成都建站费用/模板建站哪里有
- 从0开始写Vue项目-环境和项目搭建_慕言要努力的博客-CSDN博客
- 从0开始写Vue项目-Vue2集成Element-ui和后台主体框架搭建_慕言要努力的博客-CSDN博客
- 从0开始写Vue项目-Vue页面主体布局和登录、注册页面_慕言要努力的博客-CSDN博客
- 从0开始写Vue项目-SpringBoot整合Mybatis-plus实现登录、注册功能_慕言要努力的博客-CSDN博客_mybatisplus登陆
- 从0开始写Vue项目-SpringBoot实现增删改查和分页查询_慕言要努力的博客-CSDN博客
- 从0开始写Vue项目-Vue实现数据渲染和数据的增删改查_慕言要努力的博客-CSDN博客
一、前言
我们在之前已经做好了我们的登录和注册,以及能通过登录然后进入到我们项目的某一个界面,我们之前做的演示就是拿的我们的用户来进行我们的增删改查功能。
那么我们在写项目的功能的时候,有时候会用到我们通过上传文件来进行某些功能,比如我们通过上传用户信息表来做到我们的批量导入用户信息,那么我们现在就来实现这一功能。
二、认识MD5
1. md5简介
md5的全称是md5信息摘要算法(英文:MD5 Message-Digest Algorithm ),一种被广泛使用的密码散列函数,可以产生一个128位(16字节,1字节8位)的散列值(常见的是用32位的16进制表示,比如:0caa3b23b8da53f9e4e041d95dc8fa2c),用于确保信息传输的完整一致。
2. md5原理
md5将整个文件当做一个大文本信息,通过不可逆的字符串变换算法,产生一个唯一的MD5信息摘要。文件的md5类似于人的指纹,在世界上是独立无二的,如果任何人对文件做了任何改动,其md5的值也就是对应的“数字指纹”都会发生变化。
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
md5与对称和非对称加密算法不同,这两种密码是防止信息被窃取,而摘要算法的目标是用于证明原文的完整性。
3. md5特性
(1).不可逆
没有系统有办法知道md5原来的文字是什么。
(2).具有高度的离散性
md5码具有高度的散列性,没有规律可循,哪怕原信息只有一点点的变化,比如多个空格,那么就会导致md5发生巨大变化,也可以说产生的md5码是不可预测的。
(3).压缩性
任意长度的数据,算出的md5值得长度都是固定的。
(4).弱碰撞性
已知原数据和其md5的值,想找到一个具有相同md5值得数据(即伪造数据)是非常困难的。
4. md5的用途
- 密码的加密存储,用户设置密码时,服务端只记录这个密码的MD5,而不记录密码本身,以后验证用户身份时,只需要将用户输入的密码再次做一下MD5后,与记录的MD5作一个比较即可验证其密码的合法性。
- 数字签名,比如发布一个程序,为了防止别人在你的程序里插入病毒或木马,你可以在发布这个程序的同时,公开这个程序文件的MD5码,这样别人只需要在任何地方下载这个程序后做一次MD5,然后跟公开的这个MD5作一个比较就知道这个程序是否被第三方修改过。
- 文件完整性验证,比如当下载一个文件时,服务器返回的信息中包括这个文件的md5,在本地下载完毕时进行md5,将两个md5值进行比较,如果一致则说明文件完整没有丢包现象。
- 文件上传,比如百度云实现的秒传,就是对比你上传的文件md5在百度服务器是否已经存在了。
三、数据库建立
我们要实现我们用户数据的批量导入,我们需要在我们的数据库里面新建一个表,用来存放我们上传的表格以及其他的文件,也可以用来存放我们的图片。
存放文件的SQL:file
CREATE TABLE `file` (`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件名称',`type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件类型',`size` bigint DEFAULT NULL COMMENT '文件大小(kb)',`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '下载链接',`md5` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '文件md5',`creat_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '时间',`is_delete` tinyint(1) DEFAULT '0' COMMENT '是否删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=158 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
四、文件上传
1.新建我们的Files.Java
我们要在我们的后台进行类的书写,以及一定的方法。
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("file")
public class Files {@TableId(type = IdType.AUTO)private Integer id;private String name;private String type;private Long size;private String url;private String md5;private Boolean isDelete;
}
2.基础配置
设置我们的上传到磁盘的文件存放的路径,虽然我们存放的数据是在数据库,但是当我们在使用的时候,我们要去进行一定的审视,即我们需要将我们文件存放的磁盘地址进行一定的注明。
此还需要在我们的基础配置里面进行配置
3.文件上传
然后就是我们进行文件上传的接口了,我们需要在上传的时候给我们的文件定义一个唯一标识码,为的是当我们上传多个统一的文件,我们只显示一个文件,就大大的减少了我们的数据。然后我们将我们的文件上传到磁盘的某一个位置上去,并且获取我们这个文件的MD5,如果上传的文件出现重复,就删除多余的,就只显示一个文件,最后就设置我们文件的大小,类型以及我们的路径和md5唯一标识,将以上信息存放到我们的数据库里面。
4.文件下载
我们进行文件下载的时候,我们需要根据文件的唯一标识码获取文件,获取到我们的文件之后,需要设置我们文件的输出格式,然后读取字节流进行放行和文件关闭。
5.文件查询
我们需要通过遍历我们的files表来识别我们文件的md5唯一标识码,最后通过这个唯一标识码来进行我们文件的查询。
6.缓存
7.源码
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.common.Constants;
import com.example.demo.common.Result;
import com.example.demo.entity.Files;
import com.example.demo.mapper.FileMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;@RestController
@RequestMapping("/file")
public class FileController {@Value("${files.upload.path}")private String fileUploadPath;@Value("${server.ip}")private String serverIp;@Resourceprivate FileMapper fileMapper;@Autowiredprivate StringRedisTemplate stringRedisTemplate;@PostMapping("/upload")public String upload(@RequestParam MultipartFile file) throws IOException {String originalFilename = file.getOriginalFilename();String type = FileUtil.extName(originalFilename);long size = file.getSize();// 定义一个文件唯一的标识码String fileUUID = IdUtil.fastSimpleUUID() + StrUtil.DOT + type;File uploadFile = new File(fileUploadPath + fileUUID);// 判断配置的文件目录是否存在,若不存在则创建一个新的文件目录File parentFile = uploadFile.getParentFile();//判断目录是否存在,不存在就新建if (!parentFile.exists()) {parentFile.mkdirs();}String url;// 获取文件的md5String md5 = SecureUtil.md5(file.getInputStream());// 从数据库查询是否存在相同的记录Files dbFiles = getFileByMd5(md5);if (dbFiles != null) {url = dbFiles.getUrl();} else {// 上传文件到磁盘file.transferTo(uploadFile);// 数据库若不存在重复文件,则不删除刚才上传的文件url = "http://" + serverIp + ":9090/file/" + fileUUID;}//存储到数据库Files saveFile = new Files();saveFile.setName(originalFilename);saveFile.setType(type);saveFile.setSize(size/1024);saveFile.setUrl(url);saveFile.setMd5(md5);fileMapper.insert(saveFile);return url;}@GetMapping("/{fileUUID}")public void download(@PathVariable String fileUUID, HttpServletResponse response) throws IOException {// 根据文件的唯一标识码获取文件File uploadFile = new File(fileUploadPath + fileUUID);// 设置输出流的格式ServletOutputStream os = response.getOutputStream();response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileUUID, "UTF-8"));response.setContentType("application/octet-stream");// 读取文件的字节流os.write(FileUtil.readBytes(uploadFile));os.flush();os.close();}/*** 通过文件的md5查询文件* @param md5* @return*/private Files getFileByMd5(String md5) {// 查询文件的md5是否存在QueryWrapper<Files> queryWrapper = new QueryWrapper<>();queryWrapper.eq("md5", md5);List<Files> filesList = fileMapper.selectList(queryWrapper);return filesList.size() == 0 ? null : filesList.get(0);}// @CachePut(value = "files", key = "'frontAll'")@PostMapping("/update")public Result update(@RequestBody Files files) {fileMapper.updateById(files);flushRedis(Constants.FILES_KEY);return Result.success();}@GetMapping("/detail/{id}")public Result getById(@PathVariable Integer id) {return Result.success(fileMapper.selectById(id));}//清除一条缓存,key为要清空的数据
// @CacheEvict(value="files",key="'frontAll'")@DeleteMapping("/{id}")public Result delete(@PathVariable Integer id) {Files files = fileMapper.selectById(id);files.setIsDelete(true);fileMapper.updateById(files);flushRedis(Constants.FILES_KEY);return Result.success();}@PostMapping("/del/batch")public Result deleteBatch(@RequestBody List<Integer> ids) {// select * from sys_file where id in (id,id,id...)QueryWrapper<Files> queryWrapper = new QueryWrapper<>();queryWrapper.in("id", ids);List<Files> files = fileMapper.selectList(queryWrapper);for (Files file : files) {file.setIsDelete(true);fileMapper.updateById(file);}return Result.success();}/*** 分页查询接口* @param pageNum* @param pageSize* @param name* @return*/@GetMapping("/page")public Result findPage(@RequestParam Integer pageNum,@RequestParam Integer pageSize,@RequestParam(defaultValue = "") String name) {QueryWrapper<Files> queryWrapper = new QueryWrapper<>();// 查询未删除的记录queryWrapper.eq("is_delete", false);queryWrapper.orderByDesc("id");if (!"".equals(name)) {queryWrapper.like("name", name);}return Result.success(fileMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper));}// 设置缓存private void setCache(String key, String value) {stringRedisTemplate.opsForValue().set(key, value);}// 删除缓存private void flushRedis(String key) {stringRedisTemplate.delete(key);}}
五、需要使用功能的Java后台
我们做的是我们的用户数据的批量导入和用户信息表导出,也就是我们的上传功能和导出功能,那么我们就需要在我们用户的Controller里面去写我们的接口出来,然后提供给前端进行调用。
源码:
/*** 导出接口*/@GetMapping("/export")public void export(HttpServletResponse response) throws Exception {//从数据库查询出所有的数据List<User> list = userService.list();//通过工具类创建writer 写出到磁盘路径//ExcelWriter writer = ExcelUtil.getWriter(filesUploadPath + "/用户信息.xlsx");//在内存操作,写出到浏览器ExcelWriter writer = ExcelUtil.getWriter(true);//自定义标题别名writer.addHeaderAlias("username", "用户名");writer.addHeaderAlias("password", "密码");writer.addHeaderAlias("nickname", "昵称");writer.addHeaderAlias("sex", "性别");writer.addHeaderAlias("phone", "联系方式");writer.addHeaderAlias("address", "地址");writer.addHeaderAlias("email", "邮箱");writer.addHeaderAlias("createTime", "创建时间");writer.addHeaderAlias("avatarUrl", "头像");writer.addHeaderAlias("role", "身份");//一次性写出list类的对象到excel,使用默认样式,强制输出标题writer.write(list, true);response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");String fileName = URLEncoder.encode("用户详情","UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + fileName +".xlsx");ServletOutputStream out = response.getOutputStream();writer.flush(out, true);out.close();writer.close();}/*** excel导入* @param* @throws Exception*/@PostMapping("/import")public Result imp(MultipartFile file) throws Exception {InputStream inputStream = file.getInputStream();ExcelReader reader = ExcelUtil.getReader(inputStream);//通过JavaBean的方式读取Excel内的对象,但要求表头必须是英文,跟JavaBean的属性要对应List<User> list = reader.readAll(User.class);userService.saveBatch(list);return Result.success(true);}
六、前端Vue
1.分析
我们需要实现的是我们的导入和导出功能,那么我们就需要去调用我们的接口进行功能实现
我们直接来调用我们的组件实现我们的上传功能
2.实现
<el-upload action="http://localhost:9090/user/import" :show-file-list="false" accept=".xlsx":on-success="handleExcelImportSuccess" style="display: inline-block"><el-button type="primary" class="ml-5"><i class="el-icon-upload" />导入</el-button></el-upload><el-button type="primary" class="ml-5" @click="exp"><i class="el-icon-download" />导出</el-button>
我们给我们的这个导入和导出分别写上一个方法,用来实现我们的功能,我们的导入是直接写在我们的组件之上,而我们的导出是进行方法命名,打开我们的路径,来实现我们数据的导出。
methods: {// 用户信息文件导出exp() {window.open("http://localhost:9090/user/export")},// 文件导入成功handleExcelImportSuccess() {this.$message.success("文件导入成功")this.load()},}
七、功能展示
导入
导出
⛵小结
以上就是对从0开始写Vue项目-Vue实现用户数据批量上传和数据导出简单的概述,后面会陆续更新其他的代码,请持续关注!!!
如果这篇文章有帮助到你,希望可以给作者点个赞👍,创作不易,如果有对后端技术、前端领域感兴趣的,也欢迎关注 ,我将会给你带来巨大的收获与惊喜💝💝💝!
相关文章:

从0开始写Vue项目-Vue实现用户数据批量上传和数据导出
从0开始写Vue项目-环境和项目搭建_慕言要努力的博客-CSDN博客从0开始写Vue项目-Vue2集成Element-ui和后台主体框架搭建_慕言要努力的博客-CSDN博客从0开始写Vue项目-Vue页面主体布局和登录、注册页面_慕言要努力的博客-CSDN博客从0开始写Vue项目-SpringBoot整合Mybatis-plus实现…...

企业容器云管理平台选型指南
作者简介 涂家英,SUSE 资深架构师,专注 Cloud-Native 相关产品和解决方案设计,在企业级云原生平台建设领域拥有丰富的经验。 数字时代下的容器云管理平台 数字时代,市场竞争加剧,业务需求日新月异,敏态 IT…...

OpenGL超级宝典学习笔记:着色器存储区块、原子内存操作、内存屏障
前言 本篇在讲什么 本篇为蓝宝书学习笔记 着色器存储区块 原子内存操作 内存屏障 本篇适合什么 适合初学Open的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重…...

SpringMVC框架知识详解(入门版)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

25-动画和过渡
动画和过渡 一、动画 使用css动画样式,配合vue实现动画效果。 编写模板 <template><div><button click"isShow !isShow">显示/隐藏</button><h1 v-show"isShow">你好啊</h1></div> </templa…...

Linux 操作系统原理 — 虚拟内存管理
目录 文章目录 目录虚拟内存技术页式内存管理技术x86_32 CPU 虚拟内存虚拟地址格式与内核页表虚拟内存空间Kernel SpaceUser Spacex86_64 CPU 虚拟内存虚拟地址格式与内核页表(四级页表)虚拟内存空间TLB 缓冲(快表)进程页表虚拟内存技术 虚拟内存技术是操作系统实现的一种…...

保持超低温环境新方法:功耗降至十分之一!
(图片来源:网络)量子比特是量子计算机的主要构建部分,然而热量会导致量子比特容易出错,因此量子系统通常保存在超低温稀释制冷机内,可以将温度保持在绝对零度(−273.15℃)以上。但是…...

论文投稿指南——中文核心期刊推荐(音乐)
【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...

es-10搜索推荐suggest
搜索推荐:Suggest 概述 搜索一般都会要求具有“搜索推荐”或者叫“搜索补全”的功能,即在用户输入搜索的过程中,进行自动补全或者纠错。以此来提高搜索文档的匹配精准度,进而提升用户的搜索体验,这就是Suggest。 四…...

VMware ESXi 7.0 Update 3k - 领先的裸机 Hypervisor (sysin Custom Image)
VMware ESXi 7.0 Update 3k - 领先的裸机 Hypervisor (sysin Custom Image) VMware ESXi 7.0 Update 3k Standard & All Custom Image for ESXi 7.0 U3k Install CD 请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3/,查看最新版。原创作品…...

JVM整体分析篇
这里写目录标题JVM的组成部分1.类装载子系统1.1一个类加载到JVM的过程1.2类加载机制1.3为什么设计双亲委派机制1.4怎么打破双亲委派机制2.运行时数据区2.1线程私有及共享2.2JVM内存区结构2.3JVM参数设置经验3.Java对象的生命周期3.1.对象的创建3.2.对象大小的计算(6…...

【Python入门第十七天】Python While 循环
Python 循环 Python 有两个原始的循环命令: while 循环for 循环 while 循环 如果使用 while 循环,只要条件为真,我们就可以执行一组语句。 实例 只要 i 小于 7,打印 i: i 1 while i < 7:print(i)i 1运行实…...

怎样激发读者好奇心?短视频营销之场景化
目录 激发读者好奇心?四个小技巧帮你搞定 1.省略法 2.欲言又止法: 3.问句法:就是用疑问的形式引起别人的好奇。 4.反差法 选择合适的主题。 利用场景化效果 使用滤镜。 如何提高用户的留存率。 1、设置一个有趣的话题。 2、用好道具。 3、多用竖屏。 什…...

【LeetCode】剑指 Offer 14- II. 剪绳子 II p96 -- Java Version
题目链接:https://leetcode.cn/problems/jian-sheng-zi-ii-lcof/ 1. 题目介绍(14- II. 剪绳子 II) 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1)&…...

【红黑树】红黑树插入操作相关的细节和疑难拆解分析
本文就红黑树的插入操作进行细致到每一个小步骤的解析。1,成员变量本红黑树使用了三叉链结构,使用的时候尤其要记得处理指向父亲的指针。为何在节点的构造函数中,默认节点的颜色为红色?因为考虑到红黑树的性质(对于每个…...

字符串匹配--strstr函数的模拟实现思路和代码
一,strstr函数 原型: const char * strstr ( const char * str1, const char * str2 );char * strstr ( char * str1, const char * str2 ); strstr是一个字符串匹配函数,在str1中去寻找str2,如果找到,返回str2在…...

【ArcGIS Pro二次开发】(7):地图(Map)的基本操作
地图是ArcGIS Pro中的基础起点,也是大多数工程的基础。主要用于显示表示空间数据的图层。 一、地图(Map)的基本操作示例 1、获取当前地图 var map MapView.Active.Map; 2、获取一级图层 var lys map.Layers; 用于获取地图中的单一图层,以及图层组…...

python 自动化测试 pytest 的使用
pytest 是一款以python为开发语言的第三方测试,主要特点如下: 比自带的 unittest 更简洁高效,兼容 unittest框架 支持参数化 可以更精确的控制要测试的测试用例 丰富的插件,已有300多个各种各样的插件,也可自定义扩…...

闭包(回顾)
概念作用保护作用保存作用优缺点命名空间 概念 闭包(closure)指有权访问另一个函数作用域中变量的函数 — Javacript高级程序设计 p309 简单理解,一个作用域可以访问另一个函数内部的私有变量 // 其中 test就是一个闭包 function fn(){var num 10function test …...

利用好这两个方法,服务型企业缺成本票不再难解决!
现代服务业属于人才密集型和技术型类别,其中囊括了不少技术,知识,智力服务等产业:信息技术,文化创意,营销策划,广告设计,以及咨询,商务和法律服务。 在金税三期完善之前…...

前端面试编程题(异步调度,Promise实现、占用空间大小、渲染虚拟节点、实现for of)
目录 异步调度问题 题目一 答案 题目二 答案 递归输出 题目一 答案 Promise相关 题目一 答案 占用空间大小 题目一 答案 渲染虚拟节点 题目一 答案 实现for of 题目一 答案 异步调度问题 题目一 1.实现一个带并发限制的异步调度Scheduler,保证同…...

复旦团队发布国内首个模型MOSS 类ChatGPT
复旦团队发布国内首个模型MOSS 类ChatGPT 首先看到这个标题,还有这个名字,我是正经(zhen jing)的 (bu shi 流浪地球?550W?不了解的可以把550W倒过来写,就懂了 看到新闻里的一些图…...

5.35 综合案例2.0 -称重数据上传云端
综合案例2.0 - 称重数据上传云端案例说明连线功能实现1.阿里云平台连接代码应用开发3.1新建‘普通项目’3.2关联产品和设备3.3新建‘移动应用’3.4添加组件3.5配置组件信息3.6保存预览案例说明 使用hx711串口模块称重,结合IOT studio制作手机APP远程控制并采集物体重量。 hx7…...

如何让人机对话更自然?
来源:投稿 作者:顾相欢 编辑:学姐 AAAI-2022|定制对话的人设和知识背景 原文标题: Call for Customized Conversation: Customized Conversation Grounding Persona and Knowledge 原文链接: https://arxiv.org/ab…...

Python每日一练(20230224)
目录 1. 列表奇偶拆分 ★ 2. 二叉树的后序遍历 ★★ 3. 接雨水 ★★★ 附录 二叉树 特点 性质 特殊二叉树 满二叉树 完全二叉树 完全二叉树性质 二叉树的遍历 1. 列表奇偶拆分 【问题描述】 输入一个列表,包含若干个整数(允许为空ÿ…...

【Linux】-- Shell的运行原理、Linux当中的权限
目录 Shell的运行原理 Linux权限的概念 su命令 权限 文件访问权限的相关设置方法 chmod指令 chown指令 chgrp指令 sudo命令 文件的常见问题 umask 粘滞位 关于权限的总结 Shell的运行原理 Shell运行原理 —— 外壳程序。 Linux严格意义上说的是一个操作系统&…...

MOS管选型参数:VGS(th)
MOS管选型参数:VGS(th) VGS(th):开启电压(阀值电压)。当外加栅极控制电压 VGS 超过 VGS(th) 时,漏区和源区的表面反型层形成了连接的沟道。应用中,常将漏极短…...

二.线性表之顺序表
文章目录前言一.顺序表的概念及结构二.顺序表的接口实现1.顺序表的动态存储2.顺序表的初始化3.顺序表尾插#封装:扩容函数4.顺序表尾删5.顺序表头插6.顺序表头删7.顺序表查找8.顺序表在pos位置插入x9.顺序表删除pos位置的值10.顺序表销毁11.顺序表打印三.源1.Seqlist…...

ElasticSearch - SpringBoot整合ElasticSearch实现文档的增删改
文章目录1. ElasticSearch和kibana的安装和配置2. SpringBoot 项目环境搭建3. 创建索引4. 索引文档5. 更新文档6. 删除文档https://www.elastic.co/guide/en/elasticsearch/reference/current/search-your-data.htmlhttps://www.elastic.co/guide/cn/elasticsearch/guide/curre…...

JavaScript 库
文章目录JavaScript 库JavaScript 框架(库)jQueryPrototypeMooTools其他框架CDN -内容分发网络引用 jQuery使用框架JavaScript 库 JavaScript 库 - jQuery、Prototype、MooTools。 JavaScript 框架(库) JavaScript 高级程序设计…...