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

8 SpringBootWeb案例(上): 查询【分页功能(分页插件)】、删除、新增、修改

文章目录

  • 前言:SpringBootWeb案例
  • 1. 准备工作
    • 1.1 需求&环境搭建
      • 1.1.1 需求说明
      • 1.1.2 环境搭建
    • 1.2 开发规范
      • 1.2.1 开发规范-REST(不强求非要这种风格,传统风格有时候更方便)
      • 1.2.2 开发规范-统一响应结果和异常处理
      • 1.2.3 开发流程
  • 2. 部门管理
    • 2.1 查询部门
      • 2.1.1 原型和需求
      • 2.1.2 接口文档
      • 2.1.3 思路分析
      • 2.1.4 功能开发
      • 2.1.5 功能测试
      • 2.1.6 前后端联调(pass)
    • 2.3 删除部门
      • 2.3.1 需求
      • 2.3.2 接口文档
      • 2.3.3 思路分析
      • 2.3.4 功能开发
      • 2.3.5 功能测试
    • 2.4 新增部门
      • 2.4.1 需求
      • 2.4.2 接口文档
      • 2.4.3 思路分析
      • 2.4.4 功能开发
      • 2.4.5 功能测试
      • 2.4.6 请求路径优化
  • 3. 员工管理
    • 3.1 分页查询
      • 3.1.1 基础分页
        • 3.1.1.1 需求分析
        • 3.1.1.2 接口文档
        • 3.1.1.3 思路分析
        • 3.1.1.4 功能开发
        • 3.1.1.5 功能测试
        • 3.1.1.6 前后端联调
      • 3.1.2 分页插件
        • 3.1.2.1 介绍
        • 3.1.2.2 代码实现
        • 3.1.2.3 测试
    • 3.2 分页查询(带条件)
      • 3.2.1 需求
      • 3.2.2 思路分析
      • 3.2.3 功能开发
      • 3.2.4 功能测试
      • 3.2.5 前后端联调
    • 3.3 删除员工(批量删除)
      • 3.3.1 需求
      • 3.3.2 接口文档
      • 3.3.3 思路分析
      • 3.3.4 功能开发
      • 3.3.5 功能测试
    • 3.4 新增员工
      • 3.4.1 需求
      • 3.4.2 接口文档
      • 3.4.3 思路分析
      • 3.4.4 功能开发
      • 3.4.5 功能测试
      • 3.4.6 前后端联调


前言:SpringBootWeb案例

前面我们已经讲解了Web前端开发的基础知识,也讲解了Web后端开发的基础(HTTP协议、请求响应),并且也讲解了数据库MySQL,以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来,我们就通过一个案例,来将前端开发、后端开发、数据库整合起来。 而这个案例呢,就是我们前面提到的Tlias智能学习辅助系统。

在这里插入图片描述

在这个案例中,前端开发人员已经将前端工程开发完毕了。 我们需要做的,就是参考接口文档完成后端功能的开发,然后结合前端工程进行联调测试即可。

完成后的成品效果展示:

在这里插入图片描述

今天的主要内容如下:

  • 准备工作
  • 部门管理
  • 员工管理

本课程不涉及前端具体页面开发,只会涉及后端逻辑。本博客中出现大量前端页面原型只是为了更好理解需求是干什么。


1. 准备工作

准备工作的学习,我们先从"需求"和"环境搭建"开始入手。

1.1 需求&环境搭建

1.1.1 需求说明

1、部门管理

在这里插入图片描述

部门管理功能开发包括:

  • 查询部门列表
  • 删除部门
  • 新增部门
  • 修改部门

2、员工管理

在这里插入图片描述

员工管理功能开发包括:

  • 查询员工列表(分页、条件)
  • 删除员工
  • 新增员工
  • 修改员工

1.1.2 环境搭建

在这里插入图片描述

步骤:

  1. 准备数据库表(dept、emp)
  2. 创建springboot工程,引入对应的起步依赖(web、mybatis、mysql驱动、lombok)
  3. 配置文件application.properties中引入mybatis的配置信息,准备对应的实体类
  4. 准备对应的Mapper、Service(接口、实现类)、Controller基础结构

第1步:准备数据库表

-- 部门管理
create table dept(id int unsigned primary key auto_increment comment '主键ID',name varchar(10) not null unique comment '部门名称',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间'
) comment '部门表';
-- 部门表测试数据
insert into dept (id, name, create_time, update_time) values(1,'学工部',now(),now()),(2,'教研部',now(),now()),(3,'咨询部',now(),now()), (4,'就业部',now(),now()),(5,'人事部',now(),now());-- 员工管理(带约束)
create table emp (id int unsigned primary key auto_increment comment 'ID',username varchar(20) not null unique comment '用户名',password varchar(32) default '123456' comment '密码',name varchar(10) not null comment '姓名',gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',image varchar(300) comment '图像',job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',entrydate date comment '入职时间',dept_id int unsigned comment '部门ID',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间'
) comment '员工表';
-- 员工表测试数据
INSERT INTO emp(id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES(1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()),(2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,now(),now()),(3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,now(),now()),(4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()),(5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()),(6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()),(7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,now(),now()),(8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()),(9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()),(10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,now(),now()),(11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,now(),now()),(12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,now(),now()),(13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,now(),now()),(14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,now(),now()),(15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,now(),now()),(16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2007-01-01',2,now(),now()),(17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-21',NULL,now(),now());

这里我们创建了一个数据库tlias
在这里插入图片描述

第2步:创建一个SpringBoot工程,选择引入对应的起步依赖(web、mybatis、mysql驱动、lombok) (版本选择2.7.5版本,可以创建完毕之后,在pom.xml文件中更改版本号)
在这里插入图片描述

在这里插入图片描述
生成的pom有一个巨坑 @Slf4j注解找不到log
使用lombok 的 @Slf4j注解一定要手动加上下面这行,默认是没有的会导致运行时找不到log
<!-- 不知道为啥,这里必须要指定lombok的版本;否则lombok注解会失效–>
${lombok.version}

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.itheima</groupId><artifactId>tlias-web-management</artifactId><version>0.0.1-SNAPSHOT</version><name>tlias-web-management</name><description>tlias-web-management</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.4</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>3.0.4</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><!-- 不知道为啥,这里必须要指定lombok的版本;否则lombok注解会失效--><version>${lombok.version}</version></path></annotationProcessorPaths></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

创建项目工程目录结构:
在这里插入图片描述
第3步:配置文件application.properties中引入mybatis的配置信息,准备对应的实体类

  • application.properties (直接把之前项目中的复制过来)
#数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
spring.datasource.username=root
spring.datasource.password=1234#开启mybatis的日志输出
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl#开启数据库表字段 到 实体类属性的驼峰映射
mybatis.configuration.map-underscore-to-camel-case=true
  • 实体类
/*部门类*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {private Integer id;private String name;private LocalDateTime createTime;private LocalDateTime updateTime;
}
/*员工类*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {private Integer id;private String username;private String password;private String name;private Short gender;private String image;private Short job;private LocalDate entrydate;private Integer deptId;private LocalDateTime createTime;private LocalDateTime updateTime;
}

第4步:准备对应的Mapper、Service(接口、实现类)、Controller基础结构

数据访问层:

  • DeptMapper
package com.itheima.mapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface DeptMapper {
}
  • EmpMapper
package com.itheima.mapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface EmpMapper {
}

业务层:

  • DeptService
package com.itheima.service;//部门业务规则
public interface DeptService {
}
  • DeptServiceImpl
package com.itheima.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;//部门业务实现类
@Slf4j
@Service
public class DeptServiceImpl implements DeptService {
}
  • EmpService
package com.itheima.service;//员工业务规则
public interface EmpService {
}
  • EmpServiceImpl
package com.itheima.service.impl;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;//员工业务实现类
@Slf4j
@Service
public class EmpServiceImpl implements EmpService {}

控制层:

  • DeptController
package com.itheima.controller;
import org.springframework.web.bind.annotation.RestController;//部门管理控制器
@RestController
public class DeptController {
}
  • EmpController
package com.itheima.controller;
import org.springframework.web.bind.annotation.RestController;//员工管理控制器
@RestController
public class EmpController {
}

mapper的xml

项目工程结构:

在这里插入图片描述

1.2 开发规范

了解完需求也完成了环境搭建了,我们下面开始学习开发的一些规范。

开发规范我们主要从以下几方面介绍:

1.2.1 开发规范-REST(不强求非要这种风格,传统风格有时候更方便)

我们的案例是基于当前最为主流的前后端分离模式进行开发。

在这里插入图片描述

在前后端分离的开发模式中,前后端开发人员都需要根据提前定义好的接口文档,来进行前后端功能的开发。

后端开发人员:必须严格遵守提供的接口文档进行后端功能开发(保障开发的功能可以和前端对接)

在这里插入图片描述

而在前后端进行交互的时候,我们需要基于当前主流的REST风格的API接口进行交互。

什么是REST风格呢?

  • REST(Representational State Transfer),表述性状态转换,它是一种软件架构风格。

传统URL风格如下:

http://localhost:8080/user/getById?id=1     GET:查询id为1的用户
http://localhost:8080/user/saveUser         POST:新增用户
http://localhost:8080/user/updateUser       POST:修改用户
http://localhost:8080/user/deleteUser?id=1  GET:删除id为1的用户

我们看到,原始的传统URL呢,定义比较复杂,而且将资源的访问行为对外暴露出来了。

基于REST风格URL如下:

http://localhost:8080/users/1  GET:查询id为1的用户
http://localhost:8080/users    POST:新增用户
http://localhost:8080/users    PUT:修改用户
http://localhost:8080/users/1  DELETE:删除id为1的用户

其中总结起来,就一句话:通过URL定位要操作的资源,通过HTTP动词(请求方式)来描述具体的操作。

在REST风格的URL中,通过四种请求方式,来操作数据的增删改查。

  • GET : 查询
  • POST :新增
  • PUT :修改
  • DELETE :删除

我们看到如果是基于REST风格,定义URL,URL将会更加简洁、更加规范、更加优雅。

注意事项:

  • REST是风格,是约定方式,约定不是规定,可以打破
  • 描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。如:users、emps、books…

1.2.2 开发规范-统一响应结果和异常处理

前后端工程在进行交互时,使用统一响应结果 Result。

AjaxResult响应结果工具类

import java.util.HashMap;
import java.util.Objects;import cn.hjblogs.util.HttpStatus;/*** 操作消息提醒** @author E05937*/
public class AjaxResult extends HashMap<String, Object>
{private static final long serialVersionUID = 1L;/** 状态码 */public static final String CODE_TAG = "code";/** 返回内容 */public static final String MSG_TAG = "msg";/** 数据对象 */public static final String DATA_TAG = "data";/*** 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。*/public AjaxResult(){}/*** 初始化一个新创建的 AjaxResult 对象** @param code 状态码* @param msg 返回内容*/public AjaxResult(int code, String msg){super.put(CODE_TAG, code);super.put(MSG_TAG, msg);}/*** 初始化一个新创建的 AjaxResult 对象** @param code 状态码* @param msg 返回内容* @param data 数据对象*/public AjaxResult(int code, String msg, Object data){super.put(CODE_TAG, code);super.put(MSG_TAG, msg);if (Objects.nonNull(data)){super.put(DATA_TAG, data);}}/*** 返回成功消息** @return 成功消息*/public static AjaxResult success(){return AjaxResult.success("操作成功");}/*** 返回成功数据** @return 成功消息*/public static AjaxResult success(Object data){return AjaxResult.success("操作成功", data);}/*** 返回成功消息** @param msg 返回内容* @return 成功消息*/public static AjaxResult success(String msg){return AjaxResult.success(msg, null);}/*** 返回成功消息** @param msg 返回内容* @param data 数据对象* @return 成功消息*/public static AjaxResult success(String msg, Object data){return new AjaxResult(HttpStatus.SUCCESS, msg, data);}/*** 返回警告消息** @param msg 返回内容* @return 警告消息*/public static AjaxResult warn(String msg){return AjaxResult.warn(msg, null);}/*** 返回警告消息** @param msg 返回内容* @param data 数据对象* @return 警告消息*/public static AjaxResult warn(String msg, Object data){return new AjaxResult(HttpStatus.WARN, msg, data);}/*** 返回错误消息** @return 错误消息*/public static 

相关文章:

8 SpringBootWeb案例(上): 查询【分页功能(分页插件)】、删除、新增、修改

文章目录 前言:SpringBootWeb案例1. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建1.2 开发规范1.2.1 开发规范-REST(不强求非要这种风格,传统风格有时候更方便)1.2.2 开发规范-统一响应结果和异常处理1.2.3 开发流程2. 部门管理2.1 查询部门2.1.1 原型和需求…...

Docker 部署 Dify:轻松集成 Ollama 和 DeepSeek

1 Ollama的安装及使用 1.1 什么是Ollama&#xff1f; Ollama 是一个用于本地部署和运行大型语言模型的框架。 Ollama 的作用包括&#xff1a; 本地模型运行&#xff1a;Ollama 允许在本地机器上运行大型语言模型&#xff08;如 LLaMA、DeepSeek 等&#xff09;&#xff0c;无…...

深入解析MySQL索引:本质、分类、选择及使用原则

一、索引的本质 索引&#xff0c;作为数据库中的一种核心数据结构&#xff0c;其本质在于通过改变数据结构来加快查询效率。可以将索引理解为数据库中的一种“目录”或“路标”&#xff0c;它帮助数据库系统快速定位到需要查询的数据行&#xff0c;从而大大提高数据检索的速度…...

MYSQL的第一次

目录 前情提要 题目解析 连接并使用数据库 创建employees表 创建orders表? 创建invoices表?? ?查看建立的表 前情提要 需要下载mysql并进行配置&#xff0c;建议下载8.0.37&#xff0c;详情可见MySQL超详细安装配置教程(亲测有效)_mysql安装教程-CSDN博客 题目解析…...

机器学习笔记——常用损失函数

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本笔记介绍机器学习中常见的损失函数和代价函数&#xff0c;各函数的使用场景。 热门专栏 机器学习 机器学习笔记合集 深度学习 深度学习笔记合集 文章目录 热门…...

谷粒商城学习笔记-13-配置git-ssh-配置代码免密提交

安装配置 git 1 、下载 git &#xff1a; https://git-scm.com 下载git客户端&#xff0c;右键桌面Git GUI/bash Here。进入bash 2 、配置 git &#xff0c;进入 git bash # 配置用户名 git config --global user.name "username" //(名字&#xff0c;随意写)# …...

51单片机学习——静态数码管显示

1. 数码管介绍 LED数码管&#xff1a;数码管是一种简单、廉价的显示器&#xff0c;是由多个发光二极管封装在一起组成“8”字型的器件。 2. 数码管引脚定义 LED的阴极连接到一个端口上是共阴极连接&#xff0c;称为共阴极数码管。LED的阳极连接到一个端口上是共阳极连接&…...

Qt5 C++ TcpSocket 如何判断是服务主动断开tcp socket连接?

文章目录 实现思路示例代码代码解释主要功能和用法注意事项 在 Qt 5.9.9 的 C 开发中&#xff0c;使用 QTcpSocket 时&#xff0c;要判断是服务端主动断开 TCP Socket 连接&#xff0c;可以通过处理 QTcpSocket 的 disconnected 信号&#xff0c;结合 QTcpSocket 的状态以及…...

UEFI Spec 学习笔记---9 - Protocols — EFI Loaded Image

本节定义EFI_LOADED_IMAGE_PROTOCOL和 EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL。这些协议分别描述了已加载到内存中的映像&#xff0c;并指定了PE/COFF映像通过EFI引导服务LoadImage()加载 时使用的设备路径。这些描述包括 load image 的源、映像在内存中的当前位置、为image分…...

Deepseek 与 ChatGPT:AI 浪潮中的双子星较量

引言 在人工智能飞速发展的当下&#xff0c;AI 语言模型成为了人们关注的焦点。Deepseek 与 ChatGPT 作为其中的佼佼者&#xff0c;各自展现出独特的魅力&#xff0c;引领着 AI 技术的发展潮流。今天&#xff0c;就让我们深入探讨这两款模型&#xff0c;看看它们在 AI 领域中是…...

open-webui安装

docker安装openwebui 拉取镜像 docker pull ghcr.io/open-webui/open-webui:maindocker images启动 docker run -d -p 8346:8080 --name open-webui ghcr.io/open-webui/open-webui:maindocker ps查看端口占用 lsof -i:8346访问地址 http://ip:port http://127.0.0.1:8346...

docker 安装jenkins

使用docker 容器安装jenkins比较方便&#xff0c;但是细节比较重要&#xff0c;这里实战安装了一遍&#xff0c;可用&#xff1a; 拉取最新的jenkins镜像 docker pull jenkins/jenkins 如果没有翻墙的话&#xff0c;可以会有下面的报错&#xff1a; Error response from dae…...

前端利器:DateUtils 日期时间工具深度剖析

序言 在前端开发中&#xff0c;日期和时间的处理是一个常见且重要的任务。从格式化日期展示到复杂的日期计算&#xff0c;每一个环节都需要精确和高效的代码支持。今天&#xff0c;我们就来深入探讨一个精心打造的前端日期时间工具类 DateUtils&#xff0c;它涵盖了从基础的日…...

Denoising Diffusion Restoration Models论文解读

论文要点 恢复的线性逆问题可以使用预训练的DDPM完成&#xff1a;1. 将降质矩阵使用SVD&#xff0c;得到分解矩阵&#xff1b;2. 使用分解矩阵将图像投影到降质类型间共享的谱空间&#xff1b;3. 谱空间中执行DDPM。 评价 同Track的方法同样很多&#xff0c;比如后续的DDNM、…...

【Windows API】SetFilePointerEx函数用法介绍

目录 一、函数概述 二、函数原型与参数解析 1. hFile&#xff08;文件句柄&#xff09; 2. liDistanceToMove&#xff08;移动距离&#xff09; 3. lpNewFilePointer&#xff08;新指针位置&#xff09; 4. dwMoveMethod&#xff08;移动基准点&#xff09; 三、返回值与…...

uniapp uni.request重复请求处理

类似这种切换tab时&#xff0c;如果操作很快并且网络不太好&#xff0c;就出现数据错乱&#xff0c;在网上查了一圈&#xff0c;有一个使用uview拦截处理的&#xff0c;但是原生uni.requse没有找到详细的解决办法&#xff0c;就查到使用 abort 方法&#xff0c;我自己封装了一个…...

unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake

目录 1 寻路和导航对移动的不同 1.1 基础的移动功能 1.1.1 基础移动 1.1.2 智能导航寻路 1.1.3 智能导航寻路还可以 2 如何实现这个效果&#xff1f; 2.1 通过地图网格的形式 2.1.1 警告信息 the static value has been deprecated的对应搜索 2.1.2 新的navigation ba…...

Windows安装node.js详细教程

一、什么是node.js Node.js 是一个基于 Chrome V8 引擎的javascript运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。 Node 是一个让 JavaScript 运行在服务端的开发平台&#xff0c;它让javascript成为与PHP、Python等服务端语言平起平坐的脚步语言。 由 Rya…...

大模型领域常见的专业术语和关键词及简要解释

现在大语言模型非常火热,特别是deepseek,想要了解、学习、应用、设计开发大模型,则我们需要先知道大模型邻域都包含哪些方面,以及在大模型领域的各个方面,都有哪些常见的专业术语和关键词。 以下我们从大模型领域的模型架构、训练方法到优化技术、应用和伦理问题等多个方…...

单细胞转录组画小提琴VlnPlot只显示需要类型细胞

探序基因肿瘤研究院 整理 在R语言中&#xff0c;单细胞转录组数据画小提琴图中&#xff0c;我们如果想只展示出需要的特定细胞类型&#xff0c;可以把这需要展示的细胞类型单独构建成一个Seurat对象&#xff0c;再画图。 例如我们在Seurat对象中的meta.data表格中&#xff0c…...

UE 播放视频

一.UI播放视频 1.导入视频文件至工程文件夹 2.文件夹内右健选择Media -> File Meida Source创建testFileMeidaSource文件。 编辑FilePath为当前视频 3.右键->Media->Media Player 创建testMediaPlayer文件 4.右键创建testMediaTexture。编辑MediaPlayer设置testMedia…...

当pcie设备变化时centos是否会修改网络设备的名称(AI回答)

当pcie设备变化时centos是否会修改网络设备的名称 在CentOS&#xff08;以及其他基于Linux的操作系统&#xff09;中&#xff0c;网络接口的命名通常遵循特定的规则&#xff0c;尤其是在使用PCIe设备&#xff08;如网络适配器&#xff09;时。网络接口的命名通常基于设备的物理…...

SpringSecurity基于配置方法控制访问权限:MVC匹配器、Ant匹配器

Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。在 Spring Security 中&#xff0c;可以通过配置方法来控制访问权限。认证是实现授权的前提和基础&#xff0c;在执行授权操作前需要明确目标用户&#xff0c;只有明确目标用户才能明确它所具备的角色和权…...

《养生》(二)

一、基础生活调整 1‌.作息规律‌ 固定每天7-8小时睡眠&#xff0c;尽量22:30前入睡&#xff0c;晨起后拉开窗帘晒太阳5分钟&#xff0c;调节生物钟‌ ‌2.饮食优化‌ 三餐定时&#xff0c;每餐细嚼慢咽20次以上&#xff0c;优先吃蔬菜和蛋白质&#xff08;如鸡蛋、豆腐&#x…...

本地部署MindSearch(开源 AI 搜索引擎框架),然后上传到 hugging face的Spaces——L2G6

部署MindSearch到 hugging face Spaces上——L2G6 任务1 在 官方的MindSearch页面 复制Spaces应用到自己的Spaces下&#xff0c;Space 名称中需要包含 MindSearch 关键词&#xff0c;请在必要的步骤以及成功的对话测试结果当中 实现过程如下&#xff1a; 2.1 MindSearch 简…...

STM32 看门狗

目录 背景 独立看门狗&#xff08;IWDG&#xff09; 寄存器访问保护 窗口看门狗&#xff08;WWDG&#xff09; 程序 独立看门狗 设置独立看门狗程序 第一步、使能对独立看门狗寄存器的写操作 第二步、设置预分频和重装载值 第三步、喂狗 第四步、使能独立看门狗 喂狗…...

Ansys Motor-CAD:热分析

您好&#xff0c;汽车迷&#xff1a; 在这篇博客中&#xff0c;我将讨论如何使用 Ansys Motor-CAD 中的热物理模型对 IPM 电机进行热分析。我展示了可以应用的各种冷却系统&#xff0c;并演示了一些计算方法&#xff0c;包括稳态、简单瞬态和占空比。 热物理和设置 选择热物理…...

Swagger 转 Word 技术方案

项目概述 本项目旨在提供一种便捷的工具,将 Swagger API 文档转换为 Word 文档,方便开发人员和团队进行文档管理和分享。通过简单的配置和操作,用户可以快速生成包含 API 接口信息、请求参数、返回参数等内容的 Word 文档。 技术架构 本项目基于 Java 开发,采用 Spring …...

对CSS了解哪些?

CSS&#xff08;Cascading Style Sheets&#xff0c;层叠样式表&#xff09;是用来描述HTML文档外观和布局的语言。以下是对CSS的常见了解范围&#xff1a; 1. CSS 基础 选择器&#xff1a;如通用选择器 (*)、类型选择器、类选择器 (.class)、ID选择器 (#id)、后代选择器、伪类…...

使用 Docker-compose 部署 MySQL

使用 Docker Compose 部署 MySQL 本文将详细指导如何使用 docker-compose 部署 MySQL&#xff0c;包括基本配置、启动步骤、数据持久化以及一些高级选项。通过容器化部署 MySQL&#xff0c;你可以快速搭建一个隔离的数据库环境&#xff0c;适用于开发、测试或小型生产场景。 关…...

【C语言】指针(5)

前言&#xff1a;上篇文章的末尾我们使用了转移表来解决代码冗余的问题&#xff0c;那我们还有没有什么办法解决代码冗余呢&#xff1f;有的这就是接下来要说的回调函数。 往期文章: 指针1 指针2 指针3 指针4 文章目录 一&#xff0c;回调函数二&#xff0c;qsort实现快速排序1…...

go~为什么会有json.Number这种类型存在

解决 JSON 数值类型的不确定性 在 JSON 格式里&#xff0c;数值类型没有明确区分整数和浮点数&#xff0c;一个数值可能是整数&#xff08;如 123&#xff09;&#xff0c;也可能是浮点数&#xff08;如 123.45&#xff09;。而在 Go 语言中&#xff0c;整数&#xff08;如 in…...

Jmeter连接数据库、逻辑控制器、定时器

Jmeter直连数据库 直接数据库的使用场景 直连数据库的关键配置 添加MYSQL驱动Jar包 方式一&#xff1a;在测试计划面板点击“浏览”按钮&#xff0c;将你的JDBC驱动添加进来 方式二&#xff1a;将MySQL驱动jar包放入到lib/ext目录下&#xff0c;重启JMeter 配置数据库连接信…...

DeepSeek智能测试助手:分类+推理+导出一站式工具

前言 测试开发工程师在日常工作中需要处理大量测试文档&#xff0c;并且这些文档需要被高效分类、清洗和管理&#xff0c;同时结合强大的 AI 推理能力&#xff08;如 DeepSeek 模型&#xff09;进行智能化处理和分析。为此&#xff0c;我们开发了一款基于 PyQt5 的 GUI 工具&a…...

20250220找回Ubuntu22.04中丢失的文件管理器

20250220找回Ubuntu22.04中丢失的文件管理器 2025/2/20 18:05 在Ubuntu20.04.6中 生产服务器上 强制安装deb安装包的时候&#xff0c;把 桌面显示搞丢了。 Ubuntu的桌面用得少&#xff0c;但是没有还是挺不方便的&#xff0c;一通操作&#xff0c;桌面回来了。还是有很多/不少功…...

IMX6ULL的公板的以太网控制器(MAC)与物理层(PHY)芯片(KSZ8081RNB)连接的原理图分析(包含各引脚说明以及工作原理)

目录 什么叫以太网&#xff1f;它与因特网有何区别&#xff1f;公板实现以太网的原理介绍(MII/RMII协议介绍)公板的原理图下载地址公板中IMX6ULL处理器与MAC(以太网控制器)有关的原理图IMX6ULL处理器的MAC引脚说明1. **ENET1_TX_DATA0**2. **ENET1_TX_DATA1**3. **ENET1_TX_EN*…...

一周学会Flask3 Python Web开发-request请求对象与url传参

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili request请求对象封装了从客户端发来的请求报文信息&#xff0c;我们可以从中获取所有数据。 request对象包含的常用属性&…...

2024年国赛高教杯数学建模C题农作物的种植策略解题全过程文档及程序

2024年国赛高教杯数学建模 C题 农作物的种植策略 原题再现 根据乡村的实际情况&#xff0c;充分利用有限的耕地资源&#xff0c;因地制宜&#xff0c;发展有机种植产业&#xff0c;对乡村经济的可持续发展具有重要的现实意义。选择适宜的农作物&#xff0c;优化种植策略&…...

WEB前端将指定DOM生成图片并下载最佳实践(html2canvas)

前言&#xff1a; html2canvas 是一个 JavaScript 库&#xff0c;其主要作用是将 HTML 元素或其部分内容渲染为 Canvas 图像。通过它&#xff0c;开发者可以将网页中的任意 DOM 元素&#xff08;包括文本、图片、样式等&#xff09;转换为图片格式&#xff08;如 PNG 或 JPEG&…...

C# 十六进制字符串转换为十进制

在 C# 中&#xff0c;将十六进制&#xff08;Hexadecimal&#xff09;字符串转换为十进制&#xff08;Decimal&#xff09;整数非常简单。以下是几种常见的方法&#xff1a; 方法 1: 使用 Convert.ToInt32 Convert.ToInt32 方法可以直接将十六进制字符串转换为十进制整数。 示…...

第4章 信息系统架构(三)

4.3 应用架构 应用架构的主要内容是规划出目标应用分层分域架构&#xff0c;根据业务架构规划目标应用域、应用组和目标应用组件&#xff0c;形成目标应用架构逻辑视图和系统视图。从功能视角出发&#xff0c;阐述应用组件各自及应用架构整体上&#xff0c;如何实现组织的高阶…...

Qt 保留小数点 固定长度 QString 格式化

QString的arg()函数格式化输出double类型数值&#xff0c;包括fieldWidth、fmt、prec和fillChar参数的作用。示例代码展示了如何设置精度和填充字符&#xff0c;以及字段宽度的影响。文中提到&#xff0c;当fieldWidth小于实际长度时&#xff0c;前面的填充不会被截断。此外&am…...

亲测可用,IDEA中使用满血版DeepSeek R1!支持深度思考!免费!免配置!

作者&#xff1a;程序员 Hollis 之前介绍过在IDEA中使用DeepSeek的方案&#xff0c;但是很多人表示还是用的不够爽&#xff0c;比如用CodeChat的方案&#xff0c;只支持V3版本&#xff0c;不支持带推理的R1。想要配置R1的话有特别的麻烦。 那么&#xff0c;今天&#xff0c;给…...

AI训练中的常用指令

以下是一些常用于深度学习训练的 Linux 指令&#xff0c;可以帮助你高效管理和执行训练任务&#xff1a; 文件管理 查看当前目录内容&#xff1a;ls进入目录&#xff1a;cd 路径/到/目录创建新目录&#xff1a;mkdir 新目录名称删除文件或目录&#xff1a; 删除文件&#xff…...

汽车同轴供电(PoC)电感器市场报告:未来几年年复合增长率CAGR为14.3%

汽车同轴供电&#xff08;PoC&#xff09;系统旨在通过同轴电缆传输电力和数据。 该技术适用于各种汽车应用&#xff0c;如摄像头系统、传感器和其他需要通过单根电缆传输电力和数据的车载设备。 汽车 PoC 系统中的电感器有多种用途&#xff0c;包括能量存储&#xff1a;电感器…...

C++中间件DDS介绍

C DDS 库简介 DDS&#xff08;Data Distribution Service&#xff09; 是一种用于实时分布式系统通信的中间件标准&#xff0c;由 OMG&#xff08;Object Management Group&#xff09; 提出。它是一种发布/订阅&#xff08;Publish/Subscribe&#xff09;模式的数据通信框架&…...

强化学习笔记

强化学习的总体目标&#xff1a;寻找最优策略。 关键名词 智能体&#xff08;Agent&#xff09; 状态&#xff08;State&#xff09;&#xff1a;智能体相对于环境的状态 s ∈ S s∈S s∈S 状态空间&#xff08;State space&#xff09;&#xff1a;把所有状态放在一起&…...

【个人记录】openEuler安装K3S并配置为GPU节点

前言 国内网络环境特殊&#xff0c;在线安装比较麻烦&#xff0c;K3S采用离线安装方式进行部署。 安装整体思路是&#xff1a; 安装GPU驱动安装CUDA工具安装nvidia容器运行时安装K3S设置K3S使用GPU 基础环境 采用All In One方式&#xff08;其实只有一张GPU卡&#xff09;部…...

SpringAI系列 - ToolCalling篇(二) - 如何设置应用侧工具参数ToolContext(有坑)

目录 一、引言二、集成ToolContext示例步骤1: 在`@Tool`标注的工具方法中集成`ToolConext`参数步骤2:`ChatClient`运行时动态设置`ToolContext`参数三、填坑一、引言 在使用AI大模型的工具调用机制时,工具参数都是由大模型解析用户输入上下文获取的,由大模型提供参数给本地…...

Linux系统中常见的词GNU是什么意思?

GNU 是 “GNU’s Not Unix” 的递归缩写&#xff0c;它是一个自由软件项目&#xff0c;旨在创建一个完全自由的操作系统。这个名字反映了GNU项目的核心理念&#xff1a;它试图创建一个类Unix的系统&#xff0c;但不是Unix本身。 GNU 项目由 理查德斯托曼&#xff08;Richard S…...