SpringBootWeb案例-1(下: 来源黑马程序员)

3. 员工管理

完成了部门管理的功能开发之后,我们进入到下一环节员工管理功能的开发。

在这里插入图片描述

基于以上原型,我们可以把员工管理功能分为:

  1. 分页查询
  2. 带条件的分页查询
  3. 删除员工
  4. 新增员工
  5. 修改员工

3.1 分页查询

3.1.1 基础分页

3.1.1.1 需求分析

我们之前做的查询功能,是将数据库中所有的数据查询出来并展示到页面上,试想如果数据库中的数据有很多(假设有十几万条)的时候,将数据全部展示出来肯定不现实,那如何解决这个问题呢?

使用分页解决这个问题。每次只展示一页的数据,比如:一页展示10条数据,如果还想看其他的数据,可以通过点击页码进行查询。

在这里插入图片描述

要想从数据库中进行分页查询,我们要使用LIMIT关键字,格式为:limit 开始索引 每页显示的条数

查询第1页数据的SQL语句是:

select * from emp  limit 0,10;

查询第2页数据的SQL语句是:

select * from emp  limit 10,10;

查询第3页的数据的SQL语句是:

select * from emp  limit 20,10;

观察以上SQL语句,发现: 开始索引一直在改变 , 每页显示条数是固定的

开始索引的计算公式: 开始索引 = (当前页码 - 1) * 每页显示条数

我们继续基于页面原型,继续分析,得出以下结论:

  1. 前端在请求服务端时,传递的参数
    • 当前页码 page
    • 每页显示条数 pageSize
  2. 后端需要响应什么数据给前端
    • 所查询到的数据列表(存储到List 集合中)
    • 总记录数

在这里插入图片描述

后台给前端返回的数据包含:List集合(数据列表)、total(总记录数)

而这两部分我们通常封装到PageBean对象中,并将该对象转换为json格式的数据响应回给浏览器。

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
private Long total; //总记录数
private List rows; //当前页数据列表
}
3.1.1.2 接口文档

员工列表查询

  • 基本信息

    请求路径:/emps请求方式:GET接口描述:该接口用于员工列表数据的条件分页查询
    
  • 请求参数

    参数格式:queryString

    参数说明:

    参数名称是否必须示例备注
    name姓名
    gender1性别 , 1 男 , 2 女
    begin2010-01-01范围匹配的开始时间(入职日期)
    end2020-01-01范围匹配的结束时间(入职日期)
    page1分页查询的页码,如果未指定,默认为1
    pageSize10分页查询的每页记录数,如果未指定,默认为10

    请求数据样例:

    /emps?name=&gender=1&begin=2007-09-01&end=2022-09-01&page=1&pageSize=10
    
  • 响应数据

    参数格式:application/json

    参数说明:

    名称类型是否必须默认值备注其他信息
    codenumber必须响应码, 1 成功 , 0 失败
    msgstring非必须提示信息
    dataobject必须返回的数据
    |- totalnumber必须总记录数
    |- rowsobject []必须数据列表item 类型: object
    |- idnumber非必须id
    |- usernamestring非必须用户名
    |- namestring非必须姓名
    |- passwordstring非必须密码
    |- entrydatestring非必须入职日期
    |- gendernumber非必须性别 , 1 男 ; 2 女
    |- imagestring非必须图像
    |- jobnumber非必须职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师
    |- deptIdnumber非必须部门id
    |- createTimestring非必须创建时间
    |- updateTimestring非必须更新时间

    响应数据样例:

    {"code": 1,"msg": "success","data": {"total": 2,"rows": [{"id": 1,"username": "jinyong","password": "123456","name": "金庸","gender": 1,"image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-53B.jpg","job": 2,"entrydate": "2015-01-01","deptId": 2,"createTime": "2022-09-01T23:06:30","updateTime": "2022-09-02T00:29:04"},{"id": 2,"username": "zhangwuji","password": "123456","name": "张无忌","gender": 1,"image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/2022-09-02-00-27-53B.jpg","job": 2,"entrydate": "2015-01-01","deptId": 2,"createTime": "2022-09-01T23:06:30","updateTime": "2022-09-02T00:29:04"}]}
    }
    
3.1.1.3 思路分析

在这里插入图片描述

分页查询需要的数据,封装在PageBean对象中:

在这里插入图片描述

3.1.1.4 功能开发

通过查看接口文档:员工列表查询

请求路径:/emps

请求方式:GET

请求参数:跟随在请求路径后的参数字符串。 例:/emps?page=1&pageSize=10

响应数据:json格式

EmpController

import com.itheima.pojo.PageBean;
import com.itheima.pojo.Result;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {@Autowiredprivate EmpService empService;//条件分页查询@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize) {//记录日志log.info("分页查询,参数:{},{}", page, pageSize);//调用业务层分页查询功能PageBean pageBean = empService.page(page, pageSize);//响应return Result.success(pageBean);}
}

@RequestParam(defaultValue=“默认值”) //设置请求参数默认值

EmpService

public interface EmpService {/*** 条件分页查询* @param page 页码* @param pageSize 每页展示记录数* @return*/PageBean page(Integer page, Integer pageSize);
}

EmpServiceImpl

import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import com.itheima.pojo.PageBean;
import com.itheima.service.EmpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.List;@Slf4j
@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic PageBean page(Integer page, Integer pageSize) {//1、获取总记录数Long count = empMapper.count();//2、获取分页查询结果列表Integer start = (page - 1) * pageSize; //计算起始索引 , 公式: (页码-1)*页大小List<Emp> empList = empMapper.list(start, pageSize);//3、封装PageBean对象PageBean pageBean = new PageBean(count , empList);return pageBean;}
}

EmpMapper

@Mapper
public interface EmpMapper {//获取总记录数@Select("select count(*) from emp")public Long count();//获取当前页的结果列表@Select("select * from emp limit #{start}, #{pageSize}")public List<Emp> list(Integer start, Integer pageSize);
}
3.1.1.5 功能测试

功能开发完成后,重新启动项目,使用postman,发起POST请求:

在这里插入图片描述

3.1.1.6 前后端联调

打开浏览器,测试后端功能接口:

在这里插入图片描述

3.1.2 分页插件

3.1.2.1 介绍

前面我们已经完了基础的分页查询,大家会发现:分页查询功能编写起来比较繁琐。

在这里插入图片描述

在Mapper接口中定义两个方法执行两条不同的SQL语句:

  1. 查询总记录数
  2. 指定页码的数据列表

在Service当中,调用Mapper接口的两个方法,分别获取:总记录数、查询结果列表,然后在将获取的数据结果封装到PageBean对象中。

大家思考下:在未来开发其他项目,只要涉及到分页查询功能(例:订单、用户、支付、商品),都必须按照以上操作完成功能开发

结论:原始方式的分页查询,存在着"步骤固定"、"代码频繁"的问题

解决方案:可以使用一些现成的分页插件完成。对于Mybatis来讲现在最主流的就是PageHelper。

PageHelper是Mybatis的一款功能强大、方便易用的分页插件,支持任何形式的单标、多表的分页查询。

官网:https://pagehelper.github.io/

在这里插入图片描述

在执行empMapper.list()方法时,就是执行:select * from emp 语句,怎么能够实现分页操作呢?

分页插件帮我们完成了以下操作:

  1. 先获取到要执行的SQL语句:select * from emp
  2. 把SQL语句中的字段列表,变为:count(*)
  3. 执行SQL语句:select count(*) from emp //获取到总记录数
  4. 再对要执行的SQL语句:select * from emp 进行改造,在末尾添加 limit ? , ?
  5. 执行改造后的SQL语句:select * from emp limit ? , ?
3.1.2.2 代码实现

当使用了PageHelper分页插件进行分页,就无需再Mapper中进行手动分页了。 在Mapper中我们只需要进行正常的列表查询即可。在Service层中,调用Mapper的方法之前设置分页参数,在调用Mapper方法执行查询之后,解析分页结果,并将结果封装到PageBean对象中返回。

1、在pom.xml引入依赖

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.2</version>
</dependency>

2、EmpMapper

@Mapper
public interface EmpMapper {//获取当前页的结果列表@Select("select * from emp")public List<Emp> page(Integer start, Integer pageSize);
}

3、EmpServiceImpl

@Override
public PageBean page(Integer page, Integer pageSize) {// 设置分页参数PageHelper.startPage(page, pageSize); // 执行分页查询List<Emp> empList = empMapper.list(name,gender,begin,end); // 获取分页结果Page<Emp> p = (Page<Emp>) empList;   //封装PageBeanPageBean pageBean = new PageBean(p.getTotal(), p.getResult()); return pageBean;
}
3.1.2.3 测试

功能开发完成后,我们重启项目工程,打开postman,发起GET请求,访问 :http://localhost:8080/emps?page=1&pageSize=5

在这里插入图片描述

后端程序SQL输出:

在这里插入图片描述

3.2 分页查询(带条件)

完了分页查询后,下面我们需要在分页查询的基础上,添加条件。

3.2.1 需求

在这里插入图片描述

通过员工管理的页面原型我们可以看到,员工列表页面的查询,不仅仅需要考虑分页,还需要考虑查询条件。 分页查询我们已经实现了,接下来,我们需要考虑在分页查询的基础上,再加上查询条件。

我们看到页面原型及需求中描述,搜索栏的搜索条件有三个,分别是:

  • 姓名:模糊匹配
  • 性别:精确匹配
  • 入职日期:范围匹配
select * 
from emp
where name like concat('%','张','%')   -- 条件1:根据姓名模糊匹配and gender = 1                   -- 条件2:根据性别精确匹配and entrydate = between '2000-01-01' and '2010-01-01'  -- 条件3:根据入职日期范围匹配
order by update_time desc;

而且上述的三个条件,都是可以传递,也可以不传递的,也就是动态的。 我们需要使用前面学习的Mybatis中的动态SQL 。

3.2.2 思路分析

在这里插入图片描述

3.2.3 功能开发

通过查看接口文档:员工列表查询

请求路径:/emps

请求方式:GET

请求参数:

参数名称是否必须示例备注
name姓名
gender1性别 , 1 男 , 2 女
begin2010-01-01范围匹配的开始时间(入职日期)
end2020-01-01范围匹配的结束时间(入职日期)
page1分页查询的页码,如果未指定,默认为1
pageSize10分页查询的每页记录数,如果未指定,默认为10

在原有分页查询的代码基础上进行改造:

EmpController

@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {@Autowiredprivate EmpService empService;//条件分页查询@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,String name, Short gender,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {//记录日志log.info("分页查询,参数:{},{},{},{},{},{}", page, pageSize,name, gender, begin, end);//调用业务层分页查询功能PageBean pageBean = empService.page(page, pageSize, name, gender, begin, end);//响应return Result.success(pageBean);}
}

EmpService

public interface EmpService {/*** 条件分页查询* @param page     页码* @param pageSize 每页展示记录数* @param name     姓名* @param gender   性别* @param begin   开始时间* @param end     结束时间* @return*/PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end);
}

EmpServiceImpl

@Slf4j
@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {//设置分页参数PageHelper.startPage(page, pageSize);//执行条件分页查询List<Emp> empList = empMapper.list(name, gender, begin, end);//获取查询结果Page<Emp> p = (Page<Emp>) empList;//封装PageBeanPageBean pageBean = new PageBean(p.getTotal(), p.getResult());return pageBean;}
}

EmpMapper

@Mapper
public interface EmpMapper {//获取当前页的结果列表public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
}

EmpMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper"><!-- 条件分页查询 --><select id="list" resultType="com.itheima.pojo.Emp">select * from emp<where><if test="name != null and name != ''">name like concat('%',#{name},'%')</if><if test="gender != null">and gender = #{gender}</if><if test="begin != null and end != null">and entrydate between #{begin} and #{end}</if></where>order by update_time desc</select>
</mapper>

3.2.4 功能测试

功能开发完成后,重启项目工程,打开postman,发起GET请求:

在这里插入图片描述

控制台SQL语句:

在这里插入图片描述

3.2.5 前后端联调

打开浏览器,测试后端功能接口:

在这里插入图片描述

3.3 删除员工

查询员完成之后,我们继续开发新的功能:删除员工。

3.3.1 需求

在这里插入图片描述

当我们勾选列表前面的复选框,然后点击 “批量删除” 按钮,就可以将这一批次的员工信息删除掉了。也可以只勾选一个复选框,仅删除一个员工信息。

问题:我们需要开发两个功能接口吗?一个删除单个员工,一个删除多个员工

答案:不需要。 只需要开发一个功能接口即可(删除多个员工包含只删除一个员工)

3.3.2 接口文档

删除员工

  • 基本信息

    请求路径:/emps/{ids}请求方式:DELETE接口描述:该接口用于批量删除员工的数据信息
    
  • 请求参数

    参数格式:路径参数

    参数说明:

    参数名类型示例是否必须备注
    ids数组 array1,2,3必须员工的id数组

    请求参数样例:

    /emps/1,2,3
    
  • 响应数据

    参数格式:application/json

    参数说明:

    参数名类型是否必须备注
    codenumber必须响应码,1 代表成功,0 代表失败
    msgstring非必须提示信息
    dataobject非必须返回的数据

    响应数据样例:

    {"code":1,"msg":"success","data":null
    }
    

3.3.3 思路分析

在这里插入图片描述

接口文档规定:

  • 前端请求路径:/emps/{ids}
  • 前端请求方式:DELETE

问题1:怎么在controller中接收请求路径中的路径参数?

@PathVariable

问题2:如何限定请求方式是delete?

@DeleteMapping

问题3:在Mapper接口中,执行delete操作的SQL语句时,条件中的id值是不确定的是动态的,怎么实现呢?

Mybatis中的动态SQL:foreach

3.3.4 功能开发

通过查看接口文档:删除员工

请求路径:/emps/{ids}

请求方式:DELETE

请求参数:路径参数 {ids}

响应数据:json格式

EmpController

@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {@Autowiredprivate EmpService empService;//批量删除@DeleteMapping("/{ids}")public Result delete(@PathVariable List<Integer> ids){empService.delete(ids);return Result.success();}//条件分页查询@GetMappingpublic Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize,String name, Short gender,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {//记录日志log.info("分页查询,参数:{},{},{},{},{},{}", page, pageSize,name, gender, begin, end);//调用业务层分页查询功能PageBean pageBean = empService.page(page, pageSize, name, gender, begin, end);//响应return Result.success(pageBean);}
}

EmpService

public interface EmpService {/*** 批量删除操作* @param ids id集合*/void delete(List<Integer> ids);//省略...
}

EmpServiceImpl

@Slf4j
@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Overridepublic void delete(List<Integer> ids) {empMapper.delete(ids);}//省略...
}

EmpMapper

@Mapper
public interface EmpMapper {//批量删除void delete(List<Integer> ids);//省略...
}

EmpMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper"><!--批量删除员工--><select id="delete">delete from emp where id in<foreach collection="ids" item="id" open="(" close=")" separator=",">#{id}</foreach></select><!-- 省略... --></mapper>

3.3.5 功能测试

功能开发完成后,重启项目工程,打开postman,发起DELETE请求:

在这里插入图片描述

控制台SQL语句:

在这里插入图片描述

3.3.6 前后端联调

打开浏览器,测试后端功能接口:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Java开发手册中为什么要求三目运算符必须要注意类型对齐

场景 java开发手册中对于三目运算符的使用要求如下: 【强制】三目运算符 condition? 表达式 1 : 表达式 2 中&#xff0c;高度注意表达式 1 和 2 在类型对齐时&#xff0c; 可能抛出因自动拆箱导致的 NPE 异常。 说明&#xff1a;以下两种场景会触发类型对齐的拆箱操作&am…

【统计分析】Bland-Altman图:MedCalc操作指南与Python实现

之前有记录过一致性分析中的天选之子ICC&#xff08;传送&#xff09;&#xff0c;也提到过Bland-Altman图&#xff0c;Bland-Altman图在一致性分析中作为一种既定量又定性的方法&#xff0c;还有着高颜值的表达展现&#xff0c;受到了广泛地应用。   如下图所示&#xff0c;…

HTML截图

把网页存为一张长图: 操作方法: 1.打开编辑模式(按F12或在空白处右键&#xff0c;下拉菜单中点击“检查”。 2进入编辑模式后&#xff0c;再次快捷键: ctrlshiftp&#xff0c;出现输入框&#xff0c;键入: screenshot后回车&#xff0c;下载图片。

Linux Shell脚本攻略

一、echo命令 1、在echo中转义换行符 默认情况下&#xff0c;echo会在输出文本的尾部追加一个换行符。可以使用选项-n来禁止这种行为。 echo同样接受双包含转义序列的双引号字符串作为参数。在使用转义序列时&#xff0c;需要使用echo -e "包含转义序列的字符串"这…

银行业务相关

省联社&#xff0c;农商行、农村信用社之间的关系 一些知乎回答 省联社、农商行、农村信用社之间有什么联系&#xff1f; - mobye的回答 - 知乎 https://www.zhihu.com/question/24220844/answer/28276903 发源于空想社会主义&#xff0c;世界上第一个信用合作社诞生于1984年的…

转动的车轮-第14届蓝桥杯国赛Scratch真题初中级组第2题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第144讲。 转动的车轮&#xff0c;本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第2题…

2023下半年软考中级考试科目-2023年11月软考中级科目难度排行

软考中级资格考试科目分为基础知识和应用技术&#xff0c;基础知识在上午考试&#xff0c;应用技术在下午考试&#xff0c;两个科目的考试题型也有所不同。 基础知识考试题型为客观选择题&#xff0c;共计75道选择题&#xff0c;每小题1分&#xff1b;应用技术为主观问答题&am…

实战-基于Jenkins+K8s构建DevOps平台(九)

实验步骤如下&#xff1a; 第一部分&#xff1a;安装持久化存储nfs 1、在k8s-master和k8s-node1上安装nfs服务 [rootk8s-master ~]# yum install nfs-utils -y [rootk8s-master ~]# systemctl start nfs [rootk8s-master ~]# systemctl enable nfs [rootk8s-node1 ~]# yum …

SQL-DML、DQL查询数据

SQL-DML、DQL查询数据 1 DML DML主要是对数据进行增&#xff08;insert&#xff09;删&#xff08;delete&#xff09;改&#xff08;update&#xff09;操作。 1.1 添加数据 给指定列添加数据 INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);给全部列添加数据 INSERT…

员工激励:什么样的方法最合适?

经典畅销教材《人力资源管理必读12篇》曾探讨过一些不恰当的激励方式&#xff0c;那哪些激励方式实在又受人欢迎呢&#xff1f; 钱。 首先让我们回到“德普雷定理”的定义——“人们之所以需要工作&#xff0c;是因为希望得到自由发挥的机会。对于热爱工作的人来说&#xff0…

怎么搭建员工持股平台

转自&#xff1a;https://zhuanlan.zhihu.com/p/68564395 一、员工持股平台 概念 持股平台就是公司用来实施股权激励的一种操作模式&#xff0c;就是在母公司之外搭建一个有限合伙企业或者公司制的企业用来实现激励对象间接持有母公司股权的目的。 员工持股条件 在员工持股…

激励倍增法则:利用赞美激励员工 | 每天成就更大成功

激励倍增法则 激励倍增法则&#xff1a;美国管理学家彼得提出利用赞美激励员工&#xff0c;赞赏别人所付出的&#xff0c;要远远小于被赞赏者所得到的。 激励倍增法则的管理启示 员工从管理者的赞美中所得到的要远远大于管理者的付出。学会使用激励的杠杆&#xff0c;就会明白做…

员工激励的核心是人的满足感

http://cxo.cfw.cn/zhichang/v170463-1.htm 美国管理学家贝雷尔森&#xff08;Berelson&#xff09;和斯坦尼尔&#xff08;Steiner&#xff09;对激励的定义是&#xff1a;“一切内心要争取的条件、希望、愿望、动力都构成了对人的激励。——它是人类活动的一种内心状态”。在…

用Python构建大数据推荐系统:一个世界500强企业的成功案例

推荐系统是大数据时代的利器&#xff0c;它能够为企业提升用户体验、增加用户粘性、促进销售转化、提高营销效率等。但是&#xff0c;搭建一个成功的推荐系统并不容易&#xff0c;它需要综合考虑多方面的因素&#xff0c;并根据业务场景、用户需求、数据变化等不断地进行迭代和…

Windows 脚本批量打开文件

Windows 脚本批量打开文件 应用场景 对自己个人而言&#xff0c;每次学习某个内容&#xff0c;要打开一系列学习文档、代码和网页 可应用于执行某个任务需要一次性打开多个文件的场景。 方法 脚本内容 echo offstart "" "E:\Records\WebDesignLearning\la…

Vivado_除法器 IP核

本文介绍使用Vivado中除法器Divider Generator&#xff08;5.1&#xff09;的使用方法。 参考资料&#xff1a;pg151 文章目录 Divider Generator仿真测试 Divider Generator Channel Settings选项卡 #Common Options&#xff1a; Algorithm Type: 一共有三种类型&#xff0c;…

地震勘探基础(九)之地震速度分析

速度分析 在地震资料数字处理中&#xff0c;速度分析是动校正和水平叠加和地震偏移的基础。 在水平界面情况下&#xff0c;共中心点时距曲线方程是一条双曲线。在共中心点时距曲线中&#xff0c;炮检距 x x x 和时间 t 0 t_0 t0​ 都是已知的&#xff0c;只有速度 v v v 是…

C++算法:排序之二(归并、希尔、选择排序)

C算法&#xff1a;排序 排序之一&#xff08;插入、冒泡、快速排序&#xff09; 排序之二&#xff08;归并、希尔、选择排序&#xff09; 文章目录 C算法&#xff1a;排序二、比较排序算法实现4、归并排序5、希尔排序5、选择排序 原创文章&#xff0c;未经许可&#xff0c;严禁…

生活小技能

win10 屏幕亮度调节不了怎么办&#xff1f; 1、winr 输入&#xff1a;regedit &#xff0c;打开注册表 2、HKEY_LOCAL_MACHINE 3、SYSTEM 4、ControlSet001 5、Control 6、Class 7、{4d36e968-e325-11ce-bfc1-08002be10318} 8、右侧栏目添加 KMD_EnableBrightnesslnterface2 …

剑灵服务器延迟时间在哪看,《剑灵怎么看延迟》,剑灵怎么显示ping

在【环境设置】→【游戏】→【界面】里面。功能 下面的第一个就是了 剑灵怎么显示ping 答&#xff1a;剑灵内置并没有设置显示ping一项。如果你想看的话&#xff0c;可以通过打开任务管理器——性能——(位于下方的)资源监视器——网络选项卡——TCP连接 中就有延迟一栏可以...…