当前位置: 首页 > news >正文

5. 使用springboot做一个音乐播放器软件项目【业务逻辑开发】

#万物oop

上一章文章 我们做了音乐播放器 数据表的创建。参加地址:
https://blog.csdn.net/Drug_/article/details/145093705

今天分享的这篇文章就是根据数据表 来写 业务逻辑 。 今天我们主要是实现管理后台的功能。
对于这篇文章 的理解 需要小伙伴有 springboot框架 基础 。
代码实现起来还是比较简单的,就是常规业务开发的增删改查 。

实现需求:
管理后台:
账号管理、专辑管理、作者管理、歌曲管理

一:账号管理

在这里插入图片描述
后端代码 如下:

因为代码内容过多
对于接口类和实体类 我就不分享了
实体类 里的对应的就是 数据表里的字段 因为我们是用 实体类接参数,所以需要根据数据表一一创建实体类
直接分享的是 控制器和实现类

在这里插入图片描述

用户表控制器:

package com.music.base.controller;import com.music.base.aop.noLogin.NoLogin;
import com.music.base.entities.MuUser;
import com.music.base.out.R;
import com.music.base.request.BaseRequest;
import com.music.base.service.inteface.IMuUserService;
import com.music.base.webFilterIntercept.LoginUserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** <p>* 账号表 前端控制器* </p>** @author Json* @since 2024-12-22*/
@RestController
@RequestMapping("/mu-user")
public class MuUserController extends BaseController {@AutowiredIMuUserService userService;//注册@PostMapping("register")public R register(@RequestBody MuUser muUser){return userService.register(muUser);}//删除@GetMapping("del")public R del(Integer id){return userService.del(id);}//登录@PostMapping("login")@NoLoginpublic R login(@RequestBody MuUser muUser){return userService.login(muUser);}//列表@GetMapping("pageList")public R pageList(BaseRequest baseRequest){return userService.pageList(baseRequest);}//当前登陆人信息@GetMapping("getUserInfo")public R getUserInfo(){return R.data(userService.getById(LoginUserInfo.getLoginUserId()));}}

用户表实现类

package com.music.base.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.music.base.entities.MuUser;
import com.music.base.mapper.MuUserMapper;
import com.music.base.out.R;
import com.music.base.request.BaseRequest;
import com.music.base.service.inteface.IMuUserService;
import com.music.base.utils.JwtHelper;
import com.music.base.utils.MD5;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;/*** <p>* 账号表 服务实现类* </p>** @author Json* @since 2024-12-22*/
@Service
public class MuUserServiceImpl extends ServiceImpl<MuUserMapper, MuUser> implements IMuUserService {@Overridepublic R register(MuUser muUser) {if(StringUtils.isEmpty(muUser.getUsername()) || StringUtils.isEmpty(muUser.getPassword())){return R.fail("账号密码不能为空!");}if(StringUtils.isEmpty(muUser.getNickname()) ){return R.fail("用户昵称不能为空!");}long count=count(new QueryWrapper<MuUser>().lambda().eq(MuUser::getUsername, muUser.getUsername()));if(count>0){return R.fail("账号已存在!");}muUser.setPassword(MD5.encoder(muUser.getPassword()));save(muUser);return R.success();}@Overridepublic R login(MuUser muUser) {if(StringUtils.isEmpty(muUser.getUsername()) || StringUtils.isEmpty(muUser.getPassword())){return R.fail("账号密码不能为空!");}MuUser one = getOne(new QueryWrapper<MuUser>().lambda().eq(MuUser::getUsername, muUser.getUsername()));if(ObjectUtils.isEmpty(one)){return R.fail("账号不存在");}if(!one.getPassword().equals(MD5.encoder(muUser.getPassword()))){return R.fail("密码不正确!");}String token =  JwtHelper.sign(one.getId());return R.data(token);}@Overridepublic R pageList(BaseRequest request) {Page<MuUser> page = new Page<>(request.getPage() == null ? 1 : request.getPage(), request.getPageSize() == null ? 10 : request.getPageSize());QueryWrapper<MuUser> queryWrapper = new QueryWrapper<>();page(page, queryWrapper.lambda().orderByDesc(MuUser::getId));return R.data(page);}@Overridepublic R del(Integer id) {MuUser byId = getById(id);if(ObjectUtils.isEmpty(byId)){return R.fail("未查询到用户,删除失败!");}if(byId.getIsSuper().equals(1)){return R.fail("内置管理员,不能删除");}removeById(id);return R.success();}
}

二.专辑管理

专辑控制器

package com.music.base.controller;import com.music.base.entities.MuAlbum;
import com.music.base.out.R;
import com.music.base.request.BaseRequest;
import com.music.base.service.inteface.IMuAlbumService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** <p>* 专辑表 前端控制器* </p>** @author Json* @since 2024-12-22*/
@RestController
@RequestMapping("/mu-album")
public class MuAlbumController extends BaseController {@AutowiredIMuAlbumService iMuAlbumService;//列表@GetMapping("pageList")public R pageList(BaseRequest baseRequest){return iMuAlbumService.pageList(baseRequest);}//添加@PostMapping("add")public R add(@RequestBody MuAlbum muAlbum){return iMuAlbumService.add(muAlbum);}//删除@GetMapping("del")public R del(Integer id){return iMuAlbumService.del(id);}
}

专辑实现类

package com.music.base.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.music.base.entities.MuAlbum;
import com.music.base.entities.MuSong;
import com.music.base.mapper.MuAlbumMapper;
import com.music.base.out.R;
import com.music.base.request.BaseRequest;
import com.music.base.service.inteface.IMuAlbumService;
import com.music.base.service.inteface.IMuSongService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;/*** <p>* 专辑表 服务实现类* </p>** @author Json* @since 2024-12-22*/
@Service
public class MuAlbumServiceImpl extends ServiceImpl<MuAlbumMapper, MuAlbum> implements IMuAlbumService {@Autowiredprivate IMuSongService iMuSongService;@Overridepublic R pageList(BaseRequest request) {Page<MuAlbum> page = new Page<>(request.getPage() == null ? 1 : request.getPage(), request.getPageSize() == null ? 10 : request.getPageSize());QueryWrapper<MuAlbum> queryWrapper = new QueryWrapper<>();page(page, queryWrapper.lambda().orderByDesc(MuAlbum::getId));if(!page.getRecords().isEmpty()){page.getRecords().forEach(muAlbum -> {Long count= iMuSongService.count(new QueryWrapper<MuSong>().lambda().eq(MuSong::getAlbumId, muAlbum.getId()));muAlbum.setAlbumSongCount(count);});}return R.data(page);}@Overridepublic R add(MuAlbum muAlbum) {if(StringUtils.isEmpty(muAlbum.getAlbumName())){return R.fail("作者名称不能为空!");}long count=count(new QueryWrapper<MuAlbum>().lambda().eq(MuAlbum::getAlbumName, muAlbum.getAlbumName().trim()));if(count>0){return R.fail("作者名称已存在!");}muAlbum.setAlbumName( muAlbum.getAlbumName().trim());save(muAlbum);return R.success();}@Overridepublic R del(Integer id) {removeById(id);return R.success();}
}

三.作者管理

在这里插入图片描述
作者表控制器

package com.music.base.controller;import com.music.base.entities.MuAuthor;
import com.music.base.out.R;
import com.music.base.request.BaseRequest;
import com.music.base.service.inteface.IMuAuthorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** <p>* 作者表 前端控制器* </p>** @author Json* @since 2024-12-22*/
@RestController
@RequestMapping("/mu-author")
public class MuAuthorController extends BaseController {@AutowiredIMuAuthorService iMuAuthorService;//列表@GetMapping("pageList")public R pageList(BaseRequest baseRequest){return iMuAuthorService.pageList(baseRequest);}//添加@PostMapping("add")public R add(@RequestBody MuAuthor muAuthor){return iMuAuthorService.add(muAuthor);}//删除@GetMapping("del")public R del(Integer id){return iMuAuthorService.del(id);}}

作者表实现类

package com.music.base.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.music.base.entities.MuAuthor;
import com.music.base.entities.MuSong;
import com.music.base.mapper.MuAuthorMapper;
import com.music.base.out.R;
import com.music.base.request.BaseRequest;
import com.music.base.service.inteface.IMuAuthorService;
import com.music.base.service.inteface.IMuSongService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;/*** <p>* 作者表 服务实现类* </p>** @author Json* @since 2024-12-22*/
@Service
public class MuAuthorServiceImpl extends ServiceImpl<MuAuthorMapper, MuAuthor> implements IMuAuthorService {@Autowiredprivate IMuSongService iMuSongService;@Overridepublic R pageList(BaseRequest request) {Page<MuAuthor> page = new Page<>(request.getPage() == null ? 1 : request.getPage(), request.getPageSize() == null ? 10 : request.getPageSize());QueryWrapper<MuAuthor> queryWrapper = new QueryWrapper<>();page(page, queryWrapper.lambda().orderByDesc(MuAuthor::getId));if(!page.getRecords().isEmpty()){page.getRecords().forEach(muAuthor -> {Long count= iMuSongService.count(new QueryWrapper<MuSong>().lambda().eq(MuSong::getAuthorId, muAuthor.getId()));muAuthor.setAuthorSongCount(count);});}return R.data(page);}@Overridepublic R add(MuAuthor muAuthor) {if(StringUtils.isEmpty(muAuthor.getAuthorName())){return R.fail("作者名称不能为空!");}long count=count(new QueryWrapper<MuAuthor>().lambda().eq(MuAuthor::getAuthorName, muAuthor.getAuthorName().trim()));if(count>0){return R.fail("作者名称已存在!");}muAuthor.setAuthorName( muAuthor.getAuthorName().trim());save(muAuthor);return R.success();}@Overridepublic R del(Integer id) {removeById(id);return R.success();}
}

四.歌曲管理

在这里插入图片描述
歌曲表控制器

package com.music.base.controller;import com.music.base.entities.MuSong;
import com.music.base.out.R;
import com.music.base.request.MuSongRequest;
import com.music.base.service.inteface.IMuSongService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** <p>* 歌曲表 前端控制器* </p>** @author Json* @since 2024-12-22*/
@RestController
@RequestMapping("/mu-song")
public class MuSongController extends BaseController {@AutowiredIMuSongService iMuSongService;//列表@GetMapping("pageList")public R pageList(MuSongRequest baseRequest){return iMuSongService.pageList(baseRequest);}//添加@PostMapping("add")public R add(@RequestBody MuSong muSong){return iMuSongService.add(muSong);}//编辑@PostMapping("edit")public R edit(@RequestBody MuSong muSong){return iMuSongService.edit(muSong);}//删除@GetMapping("del")public R del(Integer id){return iMuSongService.del(id);}
}

歌曲表实现类

package com.music.base.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.music.base.entities.MuAlbum;
import com.music.base.entities.MuAuthor;
import com.music.base.entities.MuSong;
import com.music.base.mapper.MuSongMapper;
import com.music.base.out.R;
import com.music.base.request.MuSongRequest;
import com.music.base.service.inteface.IMuAlbumService;
import com.music.base.service.inteface.IMuAuthorService;
import com.music.base.service.inteface.IMuSongService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;/*** <p>* 歌曲表 服务实现类* </p>** @author Json* @since 2024-12-22*/
@Service
public class MuSongServiceImpl extends ServiceImpl<MuSongMapper, MuSong> implements IMuSongService {@AutowiredIMuAlbumService iMuAlbumService;@AutowiredIMuAuthorService iMuAuthorService;@Overridepublic R pageList(MuSongRequest request) {Page<MuSong> page = new Page<>(request.getPage() == null ? 1 : request.getPage(), request.getPageSize() == null ? 10 : request.getPageSize());QueryWrapper<MuSong> queryWrapper = new QueryWrapper<>();if(!StringUtils.isEmpty(request.getSearch())){queryWrapper.lambda().like(MuSong::getSongName, request.getSearch());}if(request.getAlbumId()!=null){queryWrapper.lambda().eq(MuSong::getAlbumId, request.getAlbumId());}if(request.getAuthorId()!=null){queryWrapper.lambda().eq(MuSong::getAuthorId, request.getAuthorId());}page(page, queryWrapper.lambda().orderByDesc(MuSong::getId));return R.data(page);}@Overridepublic R add(MuSong muSong) {if(StringUtils.isEmpty(muSong.getSongName())){return R.fail("歌曲名称不能为空!");}if(StringUtils.isEmpty(muSong.getSongUrl())){return R.fail("歌曲不能为空!");}MuAlbum muAlbum = iMuAlbumService.getOne(new QueryWrapper<MuAlbum>().lambda().eq(MuAlbum::getAlbumName, muSong.getAlbumName()));if(!ObjectUtils.isEmpty(muAlbum)){muSong.setAlbumId(muAlbum.getId());}MuAuthor muAuthor = iMuAuthorService.getOne(new QueryWrapper<MuAuthor>().lambda().eq(MuAuthor::getAuthorName, muSong.getAuthorName()));if(!ObjectUtils.isEmpty(muAuthor)){muSong.setAuthorId(muAuthor.getId());}save(muSong);return R.success();}@Overridepublic R del(Integer id) {removeById(id);return R.success();}@Overridepublic R edit(MuSong muSong) {if(StringUtils.isEmpty(muSong.getId())){return R.fail("id不能为空!");}if(StringUtils.isEmpty(muSong.getSongName())){return R.fail("歌曲名称不能为空!");}if(StringUtils.isEmpty(muSong.getSongUrl())){return R.fail("歌曲不能为空!");}MuAlbum muAlbum = iMuAlbumService.getOne(new QueryWrapper<MuAlbum>().lambda().eq(MuAlbum::getAlbumName, muSong.getAlbumName()));if(!ObjectUtils.isEmpty(muAlbum)){muSong.setAlbumId(muAlbum.getId());}MuAuthor muAuthor = iMuAuthorService.getOne(new QueryWrapper<MuAuthor>().lambda().eq(MuAuthor::getAuthorName, muSong.getAuthorName()));if(!ObjectUtils.isEmpty(muAuthor)){muSong.setAuthorId(muAuthor.getId());}updateById(muSong);return R.success();}
}

最后 再分享一下 文件上传的 控制器。
因为我们 后台是可以上传封面和歌曲的 所以 需要 一个文件上传的控制器。

package com.music.base.controller;import com.music.base.aop.noLogin.NoLogin;
import com.music.base.out.R;
import com.music.base.utils.UploadHelper;
import lombok.extern.slf4j.Slf4j;
import org.dromara.x.file.storage.core.Downloader;
import org.dromara.x.file.storage.core.FileInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;/*** <p>* 文件记录表 前端控制器* </p>** @author Json* @since 2024-12-22*/
@RestController
@RequestMapping("/file")
@Slf4j
public class FileDetailController extends BaseController {@AutowiredUploadHelper uploadHelper;@PostMapping("upload")public R upload(@RequestBody MultipartFile file){FileInfo fileInfo = uploadHelper.uploadFile(file, "link_music");return R.data(fileInfo);}@GetMapping("view")@NoLoginpublic void view(String id, HttpServletResponse response) {try {response.setContentType("application/force-download");// 设置强制下载不打开response.addHeader("Content-Disposition", "attachment;fileName=" + new String(id.getBytes("UTF-8"), "iso-8859-1"));Downloader downloader=uploadHelper.downLoadFile(id);downloader.outputStream(response.getOutputStream());response.flushBuffer();} catch (Exception e) {log.error("文件下载失败: " + e.getMessage());}}}

最后 首页 我简单的做了一个 报表统计
在这里插入图片描述

这样我们的音乐播放器的管理后台基本上就开发完整了。

说明:
因核心分享 的是java编程。后续文章中 基本分享的都是java语言的代码。
对于前端的代码,在文章中就不分享了。只会分享一下页面效果。
当然项目完结后,我会把前后端项目源码打包好放到最后一篇文章中。

如果有小伙伴有兴趣可以订阅此专栏,后续会持续更新直到音乐播放器这个软件完成。
我会尽可能详细的以文字的形式分享出来 从0到1 写出来一个音乐播放器项目。

相关文章:

5. 使用springboot做一个音乐播放器软件项目【业务逻辑开发】

#万物oop 上一章文章 我们做了音乐播放器 数据表的创建。参加地址&#xff1a; https://blog.csdn.net/Drug_/article/details/145093705 今天分享的这篇文章就是根据数据表 来写 业务逻辑 。 今天我们主要是实现管理后台的功能。 对于这篇文章 的理解 需要小伙伴有 springbo…...

配置正确spring-boot工程启动的时候报错dynamic-datasource Please check the setting of primary

一个两年没有碰的spring-boot工程&#xff0c;启动时报错。因为用了baomidou的多源数据库配置&#xff0c;因此启动时报错primary没有正确配置。经过检查&#xff0c;确定配置文件配置正确。 报错原因是没有读到正确的配置文件。pom文件里的resources标签重定义&#xff0c;把…...

Freeswitch使用media_bug能力实现回铃音检测

利用freeswitch的media bug能力来在智能外呼时通过websocket对接智能中心的声音检测接口&#xff0c;来实现回铃音检测&#xff0c;来判断用户当前是否已响应&#xff0c;拒接&#xff0c;关机等。 1.回铃音处理流程 2.模块源码目录结构 首先新建一个freeswitch的源码的src/a…...

Kubernetes(k8s)和Docker Compose本质区别

Kubernetes&#xff08;简称 k8s&#xff09;和 Docker Compose 是容器编排领域的两大重要工具&#xff0c;虽然它们都用于管理和编排容器化应用&#xff0c;但在设计目标、功能特性、使用场景和复杂度上存在显著差异。以下将从多个方面详细探讨 Kubernetes 和 Docker Compose …...

OSI七层协议——分层网络协议

OSI七层协议&#xff0c;顾名思义&#xff0c;分为七层&#xff0c;实际上七层是不存在的&#xff0c;是人为的进行划分,让人更好的理解 七层协议包括&#xff0c;物理层(我),数据链路层(据),网络层(网),传输层(传输),会话层(会),表示层(表),应用层(用)(记忆口诀->我会用表…...

RabbitMQ 客户端 连接、发送、接收处理消息

RabbitMQ 客户端 连接、发送、接收处理消息 一. RabbitMQ 的机制跟 Tcp、Udp、Http 这种还不太一样 RabbitMQ 服务&#xff0c;不是像其他服务器一样&#xff0c;负责逻辑处理&#xff0c;然后转发给客户端 而是所有客户端想要向 RabbitMQ服务发送消息&#xff0c; 第一步&a…...

SQL ON与WHERE区别

在 MySQL 中&#xff0c;ON 和 WHERE 都用于过滤数据&#xff0c;但它们的使用场景和作用有所不同&#xff0c;尤其是在涉及 JOIN 操作时。下面通过具体的例子来说明它们的区别。 1. ON 的作用 ON 用于指定表之间的连接条件&#xff0c;决定哪些行应该被连接在一起。它在 JOI…...

[创业之路-254]:《华为数字化转型之道》-1-华为是一个由客户需求牵引、高度数字化、高度智能化、由无数个闭环流程组成的价值创造、评估、分配系统。

前言&#xff1a; 华为是一个由客户需求牵引、高度数字化、高度智能化、由无数个闭环流程组成的价值创造、评估、分配系统。华为的流程大到战略&#xff0c;小到日常工作&#xff0c;是由无数个自我调节自我优化的数字化闭环控制流程组成&#xff0c;大闭环套小闭环&#xff0…...

免费为企业IT规划WSUS:Windows Server 更新服务 (WSUS) 之快速入门教程(一)

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;&#xff0c;收不到通知请将我点击星标&#xff01;“ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…...

异步任务与定时任务

一、异步任务 基于TaskExecutionAutoConfiguration配置类中&#xff0c;注册的ThreadPoolTaskExecutor线程池对象进行异步任务执行。 (一)手动执行异步任务 在yml中配置线程池参数 spring: task:execution:pool:core-size: 5 # 核心线程数max-size: 20 # 最大线…...

大模型WebUI:Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(5)

大模型WebUI&#xff1a;Gradio全解11——Chatbot&#xff1a;融合大模型的多模态聊天机器人&#xff08;5&#xff09; 前言本篇摘要11. Chatbot&#xff1a;融合大模型的多模态聊天机器人11.5 Chatbot的特殊Events11.5.1 各事件总演示11.5.2 详解.undo、.retry、.like和.edit…...

32单片机综合应用案例——基于GPS的车辆追踪器(三)(内附详细代码讲解!!!)

困难不会永远存在&#xff0c;只要你勇于面对&#xff0c;坚持努力&#xff0c;就一定能够战胜一切困难。每一次挑战都是一次成长的机会&#xff0c;不要害怕失败&#xff0c;失败是成功之母。只有经历过失败&#xff0c;你才能更加明白自己的不足&#xff0c;并不断改进自己&a…...

扣除价格因素与剔除季节性因素:统计数据中的“真实”增长(中英双语)

扣除价格因素与剔除季节性因素&#xff1a;统计数据中的“真实”增长 在经济统计分析中&#xff0c;我们经常会听到“扣除价格因素”和“剔除季节性因素”这两个概念。这两者都是为了排除外部干扰因素&#xff0c;真实反映经济活动的增长情况。它们分别针对价格波动和季节性波…...

网卡接收报文的过程

网卡接收报文的过程通常包括以下几个关键步骤&#xff1a; 1. 硬件接收&#xff1a; • 网卡硬件首先接收到从网络传输过来的数据包。网络接口卡&#xff08;NIC&#xff09;负责将接收到的电信号转换为数字信号&#xff0c;并存储到一个硬件缓冲区中。 2. DMA传输&#xff…...

Windows图形界面(GUI)-QT-C/C++ - QT 对话窗口

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 模态对话框 非模态对话框 文件对话框 基本概念 静态函数 常见属性 颜色对话框 基本概念 静态函数 常见属性 字体对话框 基本概念 静态函数 常见属性 输入对话框 基本概念 …...

bypass--2025春秋杯冬季赛

漏洞点 题目不难&#xff0c;这个循环赋值的结束条件是s[i]0&#xff0c;并且s和key再栈上的位置是挨着的 那么很容易想到&#xff0c;第二次循环赋值的时候&#xff0c;有一个溢出&#xff0c;溢出部分的值是第一次写入的key的值。 那么基本思路就是&#xff0c;利用这段溢出…...

学习微信小程序的下拉列表控件-picker

1、创建一个空白工程 2、index.wxml中写上picker布局&#xff1a; <!--index.wxml--> <view class"container"><picker mode"selector" range"{{array}}" bindchange"bindPickerChange"><view class"pick…...

【17】Word:林楚楠-供应链❗

目录 题目 NO1.2 NO3 NO4 NO5 NO6 NO7 NO89 题目 NO1.2 另存为&#xff1a;文件→另存为→文档→文件名/考生文件夹F12/FnF12→文件名/考生文件夹 插入→分节符→文本框→输入文件→排版_居中对齐→间距/回车去掉文本框的边框→选中文本框→格式&#xff1a;形状轮廓…...

父子盒子滑动事件穿透问题

问题描述 当父子盒子都有滚动条时&#xff0c;在子盒子内滚动时&#xff0c;父盒子滚动子盒子无法滚动&#xff0c;直到父盒子滚动到底部&#xff0c;子盒子才滚动 解决 如果是vue的项目&#xff0c;直接在子盒子上添加 wheel.stop""...

vue-amap、leaflet、融汇 离线地图瓦片使用情况分析

vue-amap&#xff1a; vue3写的&#xff0c;使用文档 -> 文档地址 <-的离线jsApi里的demo&#xff0c;发现 tile-url不能读取本地项目文件夹里的瓦片&#xff0c;文档里写的其实还是要互联网读取的高德瓦片......... 作者在git库回复tile-url要么放项目里使用绝对路…...

leetcode - 1055. Shortest Way to Form String

Description A subsequence of a string is a new string that is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (i.e., “ace” is a subsequence of “abcd…...

【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发三

目录 1 -> 绘制图形 1.1 -> 绘制基本几何图形 1.2 -> 绘制自定义几何图形 2 -> 添加动画效果 2.1 -> animateTo实现闪屏动画 2.2 -> 页面转场动画 3 -> 常见组件说明 1 -> 绘制图形 绘制能力主要是通过框架提供的绘制组件来支撑&#xff0c;支…...

RabbitMQ 进阶

文章目录 一、发送者的可靠性 1.1 生产者重试机制&#xff1a;1.2 生产者确认机制&#xff1a; 1.2.1 开启生产者确认&#xff1a;1.2.2 定义 ReturnCallback&#xff1a;1.2.3 定义 ConfirmCallback&#xff1a; 二、MQ 的可靠性 2.1 数据持久化&#xff1a; 2.1.1 交换机持…...

RabbitMQ---TTL与死信

&#xff08;一&#xff09;TTL 1.TTL概念 TTL又叫过期时间 RabbitMQ可以对队列和消息设置TTL&#xff0c;当消息到达过期时间还没有被消费时就会自动删除 注&#xff1a;这里我们说的对队列设置TTL,是对队列上的消息设置TTL并不是对队列本身&#xff0c;不是说队列过期时间…...

uniapp(小程序、app、微信公众号、H5)预览下载文件(pdf)

1. 小程序、app 在uniapp开发小程序环境或者app环境中,都可以使用以下方式预览文件 之前其实写过一篇,就是使用uniapp官网提供文件下载、文件保存、文件打开的API, uniapp文件下载 感兴趣也可以去看下 uni.downloadFile({// baseURL 是...

Spring Boot经典面试题及答案

一、Spring Boot基础知识 什么是Spring Boot&#xff1f; 答案&#xff1a; Spring Boot是Spring开源组织下的子项目&#xff0c;是Spring组件一站式解决方案。它简化了Spring应用程序的初始化和开发过程&#xff0c;通过“约定大于配置”的原则&#xff0c;减少了手动配置的繁…...

usb通过hdc连接鸿蒙next的常用指令

参考官方 注册报名https://www.hiascend.com/developer/activities/details/44de441ef599450596131c8cb52f7f8c/signup?channelCodeS1&recommended496144 hdc-调试命令-调测调优-系统 - 华为HarmonyOS开发者https://developer.huawei.com/consumer/cn/doc/harmonyos-guid…...

FPGA:Quartus软件与操作系统版本对照表

文章目录 1.软件概述2.软件版本3.设计流程4.支持的设备5.新特性6.版本对照 1.软件概述 Quartus软件是由英特尔&#xff08;Intel&#xff09;公司开发的一款功能强大的FPGA&#xff08;现场可编程逻辑门阵列&#xff09;设计工具&#xff0c;广泛应用于数字电路设计、仿真、综…...

RustDesk ID更新脚本

RustDesk ID更新脚本 此PowerShell脚本自动更新RustDesk ID和密码&#xff0c;并将信息安全地存储在Bitwarden中。 特点 使用以下选项更新RustDesk ID&#xff1a; 使用系统主机名生成一个随机的9位数输入自定义值 为RustDesk生成新的随机密码将RustDesk ID和密码安全地存储…...

[C语言]字符串分离

题目 从标准输入流&#xff08;控制台&#xff09;中获取一行字符串 str&#xff0c;字符串中可能会存在空格&#xff0c;现在需要将字符串进行分离&#xff0c;规则如下&#xff1a; (1)将 str 中位于 偶数下标 的元素放置在字符串 str1 之中 (2)将 str 中位于 奇数下标 的…...

-bash: /java: cannot execute binary file

在linux安装jdk报错 -bash: /java: cannot execute binary file 原因是jdk安装包和linux的不一致 程序员的面试宝典&#xff0c;一个免费的刷题平台...

Python绘制数据地图-GeoPandas入门

使用GeoPandas绘制数据地图是一种非常直观且强大的数据可视化方法。GeoPandas是一个Python库&#xff0c;专门用于处理地理空间数据&#xff0c;它建立在Pandas和Shapely库之上&#xff0c;并集成了matplotlib、seaborn等绘图库的功能。 下面是一个简单的入门教程&#xff0c;…...

CVPR 2024 图像处理方向总汇(图像去噪、图像增强、图像分割和图像恢复等)

1、Image Progress(图像处理) 去鬼影 Generating Content for HDR Deghosting from Frequency View去阴影 HomoFormer: Homogenized Transformer for Image Shadow Removal去模糊 Unsupervised Blind Image Deblurring Based on Self-EnhancementLatency Correction for E…...

c++ string

1 sting 基本概念 string 基本概念 本质&#xff1a;string是c风格的字符串&#xff0c;而string 本质上是一个类string 和char* 的区别&#xff1a; char * 是一个指针 string 是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char* 数组…...

tomcat文件目录讲解

目录的用处 bin&#xff1a;tomcat的可执行命令&#xff0c;比如&#xff1a;tomcat的启动停止命令&#xff0c;也包含其他命令以及.bat&#xff08;Windows执行的命令&#xff09;和.sh&#xff08;Linux操作系统执行的命令&#xff09;文件config:关于tomcat的配置&#xff0…...

博客搭建 — GitHub Pages 部署

关于 GitHub Pages GitHub Pages 是一项静态站点托管服务&#xff0c;它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件&#xff0c;通过构建过程运行文件&#xff0c;然后发布网站。 本文最终效果是搭建出一个域名为 https://<user>.github.io 的网站 创建…...

【0x0052】HCI_Write_Extended_Inquiry_Response命令详解

目录 一、命令概述 二、命令格式及参数 2.1. HCI_Write_Extended_Inquiry_Response命令格式 2.2. FEC_Required 2.3. Extended_Inquiry_Response 三、生成事件及参数 3.1. HCI_Command_Complete 事件 3.2. Status 四、命令执行流程 4.1. 命令准备阶段(主机端) 4.2…...

Kotlin Bytedeco OpenCV 图像图像55 图像透视变换

Kotlin Bytedeco OpenCV 图像图像53 图像透视变换 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apa…...

flutter Get GetMiddleware 中间件不起作用问题

当使用 get: ^5.0.0-release-candidate-9.2.1最新版本时&#xff0c;中间件GetMiddleware各种教程都是让我们在redirect中实现&#xff0c;比如&#xff1a; overrideRouteSettings? redirect(String? route) {return RouteSettings(name: "/companyAuthIndexPage"…...

npm介绍

npm&#xff08;Node Package Manager&#xff09;是 Node.js 的默认包管理工具&#xff0c;用于管理 JavaScript 和 Node.js 项目的依赖关系。它既是一个包管理工具&#xff0c;又是一个在线仓库&#xff0c;开发者可以通过它分享和下载开源的 JavaScript 库和工具。npm 是世界…...

Ruby语言的数据结构

Ruby语言的数据结构详解 Ruby是一种动态、面向对象的编程语言&#xff0c;因其简洁优雅的语法而受到开发者的喜爱。在Ruby中&#xff0c;数据结构是构建和管理数据的一种方式&#xff0c;不同的数据结构适用于不同的场景。本文将详细探讨Ruby中的几种主要数据结构&#xff0c;…...

web开发工具之:一、UUID的介绍,java如何产生UUID,作为数据库的主键和加密算法的盐

文章目录 前言一、UUID是什么二、java如何产生UUID1. 生成随机 UUID&#xff08;Version 4&#xff09;2. 通过指定的字符串生成 UUID 三、UUID作为数据库主键1. 优点2. 缺点 四、UUID作为加密的盐总结 前言 现在web开发中&#xff0c;很多使用UUID作为主键和加密的盐的&#…...

精度论文:【Focaler-IoU: More Focused Intersection over Union Loss】

Focaler-IoU: 更聚焦的交并比损失 Focaler-IoU: More Focused Intersection over Union Loss Focaler-IoU: 更聚焦的交并比损失I. 引言II. 相关工作III. 方法IV. 实验V. 结论 原文地址&#xff1a;官方论文地址 代码地址&#xff1a;官方代码地址 摘要——边界框回归在目标检…...

Android-目前最稳定和高效的UI适配方案

谈到适配&#xff0c;首先需要介绍几个基本单位&#xff1a; 1、密度无关像素&#xff08;dp&#xff09;&#xff1a; 含义&#xff1a;density-independent pixel&#xff0c;叫dp或dip&#xff0c;与终端上的实际物理像素点无关 单位&#xff1a;dp&#xff0c;可以保证在…...

Realsense相机驱动安装及其ROS通讯配置——机器人抓取系统基础系列(四)

文章目录 概要1 Realsense相机驱动安装Method1: 使用Intel服务器预编译包Method2: 使用ROS服务器预编译包Method3: 使用SDK源代码方法对比总结 2 Realsense-ROS通讯配置与使用2.1 Realsense-ROS包安装2.2 ROS节点启动 小结Reference 概要 本文首先阐述了Realsense相机驱动安装…...

docker安装Nginx UI

开源地址&#xff1a;nginx-ui/README-zh_CN.md at dev 0xJacky/nginx-ui GitHub docker run -dit \ --namenginx-ui \ --restartalways \ -e TZAsia/Shanghai \ -v /Users/xiaoping/docker/appdata/nginx:/etc/nginx \ -v /Users/xiaoping/docker/appdata/nginx-ui:/etc/ng…...

【AI】【RAG】使用WebUI部署RAG:数据优化与设置技巧详解

RAG(Retrieval-Augmented Generation)是一种通过知识库构建的高效问答系统。然而,在使用WebUI部署和优化RAG时,数据源管理和参数设置直接决定了系统的回答质量。本文将结合具体问题和优化方法,为您详细解读如何最大化RAG的性能和准确性。 数据源相关问题及解决方案 在实际…...

如何在vue中渲染markdown内容?

文章目录 引言什么是 markdown-it&#xff1f;安装 markdown-it基本用法样式失效&#xff1f;解决方法 高级配置语法高亮 效果展示 引言 在现代 Web 开发中&#xff0c;Markdown 作为一种轻量级的标记语言&#xff0c;广泛用于文档编写、内容管理以及富文本编辑器中。markdown…...

nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)

一、安装nvm 1. 下载nvm nvm-windows官网地址https://github.com/coreybutler/nvm-windows/releases ​ 如果打不开也可以到这里下载 2.双击 nvm-setup.exe 开始安装 ​ 3.选择nvm安装路径&#xff0c;路径名称不要有空格&#xff0c;然后点击next 4.node.js安装…...

机器学习-归一化

文章目录 一. 归一化二. 归一化的常见方法1. 最小-最大归一化 (Min-Max Normalization)2. Z-Score 归一化&#xff08;标准化&#xff09;3. MaxAbs 归一化 三. 归一化的选择四. 为什么要进行归一化1. 消除量纲差异2. 提高模型训练速度3. 增强模型的稳定性4. 保证正则化项的有效…...