今天心血来潮,有点好奇mybaits的分页组件PageHelper是如何实现分页功能的,因为在我日常的使用中,需要分页的地方只需要在查询语句前加一行代码

<span style="background-color:#f6f6f6"><span style="color:#333333"><span style="color:rgba(140, 140, 140, 0.8)">复制代码</span></span></span>
  1. //增加此行代码开启分页,pageNum为第几页,pageSize为一页多少条
  2. Page<ArticleVO> page = PageHelper.startPage(pageNum, pageSize);
  3. //执行正常的sql查询
  4. articleMapper.selectAll(query);

即可实现分页功能。于是我很好奇PageHelper是如何实现的,使用了aop?还是其他什么办法。

备注

因为我是在springboot中使用的PageHelper,所以PageHelper的版本为

<span style="background-color:#f6f6f6"><span style="color:#333333"><span style="color:rgba(140, 140, 140, 0.8)">复制代码</span></span></span>
  1. <dependency>
  2. <groupId>com.github.pagehelper</groupId>
  3. <artifactId>pagehelper-spring-boot-starter</artifactId>
  4. <version>1.2.12</version>
  5. </dependency>

本文的源码分析主要是分析主要的流程,一些细节以及mybaits的部分不深入分析(因为分析深了不知不觉就晕了,忘记了我一开始是要干啥)

开启PageHelper是调用了startPage这个方法,所以我直接从这个方法入手,查看这个方法的内部实现,该方法有多个重载,但都只是为了方便使用设置了一些默认参数,最终的实现都是:

<span style="background-color:#f6f6f6"><span style="color:#333333"><span style="color:rgba(140, 140, 140, 0.8)">复制代码</span></span></span>
  1. /**
  2. * 开始分页
  3. *
  4. * @param pageNum 页码
  5. * @param pageSize 每页显示数量
  6. * @param count 是否进行count查询
  7. * @param reasonable 分页合理化,null时用默认配置
  8. * @param pageSizeZero true且pageSize=0时返回全部结果,false时分页,null时用默认配置
  9. */
  10. public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {
  11. Page<E> page = new Page<E>(pageNum, pageSize, count);
  12. page.setReasonable(reasonable);
  13. page.setPageSizeZero(pageSizeZero);
  14. //当已经执行过orderBy的时候
  15. Page<E> oldPage = getLocalPage();
  16. if (oldPage != null && oldPage.isOrderByOnly()) {
  17. page.setOrderBy(oldPage.getOrderBy());
  18. }
  19. setLocalPage(page);
  20. return page;
  21. }

可以看到,方法实例化了一个Page对象,这个对象用来存放分页相关的数据。其中getLocalPage和setLocalPage这两个方法是对ThreadLocal<Page>线程中存储的Page对象的设置和获取。也就是说startPage方法的作用就是:确保在当前线程中存在一个Page对象(往下看可以看到,代码中会根据是否存在Page对象来决定是否开启分页功能)

至此开启分页的方法已经结束了,我们没有看到任何跟分页有关的操作,那么PageHelper到底是在哪里实现分页功能的呢?因为我们使用的是SpringBoot,所以我猜测应该会有相关的AutoConfiguration类来对PageHelper进行相关的初始化配置等。于是我们使用idea打开pagehelper-spring-boot-starter这个jar包,发现真的找到了PageHelperAutoConfiguration这个类,那我们就继续从这个类着手看看PageHelper在启动的时候做了些什么操作。

<span style="background-color:#f6f6f6"><span style="color:#333333"><span style="color:rgba(140, 140, 140, 0.8)">复制代码</span></span></span>
  1. /**
  2. * 自定注入分页插件
  3. *
  4. * @author liuzh
  5. */
  6. @Configuration
  7. @ConditionalOnBean(SqlSessionFactory.class)
  8. @EnableConfigurationProperties(PageHelperProperties.class)
  9. @AutoConfigureAfter(MybatisAutoConfiguration.class)
  10. public class PageHelperAutoConfiguration {
  11. @Autowired
  12. private List<SqlSessionFactory> sqlSessionFactoryList;
  13. @Autowired
  14. private PageHelperProperties properties;
  15. /**
  16. * 接受分页插件额外的属性
  17. *
  18. * @return
  19. */
  20. @Bean
  21. @ConfigurationProperties(prefix = PageHelperProperties.PAGEHELPER_PREFIX)
  22. public Properties pageHelperProperties() {
  23. return new Properties();
  24. }
  25. @PostConstruct
  26. public void addPageInterceptor() {
  27. PageInterceptor interceptor = new PageInterceptor();
  28. Properties properties = new Properties();
  29. //先把一般方式配置的属性放进去
  30. properties.putAll(pageHelperProperties());
  31. //在把特殊配置放进去,由于close-conn 利用上面方式时,属性名就是 close-conn 而不是 closeConn,所以需要额外的一步
  32. properties.putAll(this.properties.getProperties());
  33. interceptor.setProperties(properties);
  34. for (SqlSessionFactory sqlSessionFactory : sqlSessionFactoryList) {
  35. sqlSessionFactory.getConfiguration().addInterceptor(interceptor);
  36. }
  37. }
  38. }

对这个类分析我们可以发现,该类做了2件事。

1、实例化了一个带有默认配置的Properties配置对象放到spring上下文中

2、在addPageInterceptor方法中实例化PageInterceptor对象(实例化后的配置操作我们不深究),并添加到mybatis中的SqlSessionFactory中

那么我们上面的疑问就解开了,PageHelper会给mybatis增加一个PageInterceptor拦截器,这样在我们使用mybatis进行数据库操作时,PageHelper就能实现对应的分页操作。这里的Interceptor以及SqlSessionFactory的相关知识属于mybaits的范畴,跟PageHelper关系不是很大,我们只要知道他是在这里对数据库操作进行切入就可以了。那么我们继续看PageInterceptor这个类中都干了些什么事。

<span style="background-color:#f6f6f6"><span style="color:#333333"><span style="color:rgba(140, 140, 140, 0.8)">复制代码</span></span></span>
  1. @Intercepts(
  2. {
  3. @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),
  4. @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}),
  5. }
  6. )
  7. public class PageInterceptor implements Interceptor {
  8. private volatile Dialect dialect;
  9. private String countSuffix = "_COUNT";
  10. protected Cache<String, MappedStatement> msCountMap = null;
  11. private String default_dialect_class = "com.github.pagehelper.PageHelper";
  12. @Override
  13. public Object intercept(Invocation invocation) throws Throwable {
  14. try {
  15. List resultList;
  16. //调用方法判断是否需要进行分页,如果不需要,直接返回结果
  17. if (!dialect.skip(ms, parameter, rowBounds)) {
  18. //判断是否需要进行 count 查询
  19. if (dialect.beforeCount(ms, parameter, rowBounds)) {
  20. //查询总数
  21. Long count = count(executor, ms, parameter, rowBounds, resultHandler, boundSql);
  22. //处理查询总数,返回 true 时继续分页查询,false 时直接返回
  23. if (!dialect.afterCount(count, parameter, rowBounds)) {
  24. //当查询总数为 0 时,直接返回空的结果
  25. return dialect.afterPage(new ArrayList(), parameter, rowBounds);
  26. }
  27. }
  28. resultList = ExecutorUtil.pageQuery(dialect, executor,
  29. ms, parameter, rowBounds, resultHandler, boundSql, cacheKey);
  30. } else {
  31. //rowBounds用参数值,不使用分页插件处理时,仍然支持默认的内存分页
  32. resultList = executor.query(ms, parameter, rowBounds, resultHandler, cacheKey, boundSql);
  33. }
  34. return dialect.afterPage(resultList, parameter, rowBounds);
  35. } finally {
  36. if(dialect != null){
  37. dialect.afterAll();
  38. }
  39. }
  40. }
  41. }
PageInterceptor实现了mybaits中的Interceptor接口,并且在PageHelperAutoConfiguration中,在SqlSessionFactory中添加了该拦截器,所以在使用mybaits进行数据库操作时,都会进入PageInterceptor的intercept方法(注意到了类上方的注解没有@Intercepts,这个注解指定了仅在特定情况如query操作的时候才会进入到该拦截器,很容易理解,分页操作仅在query查询操作才需要)。分页的整体操作流程全部在intercept方法中(上述代码仅保留部分代码,一些细节我删掉了),可以看到主要使用了一个Dialect对象来实现分页的各个操作。Dialect其实是一个接口,定义了分页的各个流程。方法如下:
<span style="background-color:#f6f6f6"><span style="color:#333333"><span style="color:rgba(140, 140, 140, 0.8)">复制代码</span></span></span>
  1. public interface Dialect {
  2. /**
  3. * 跳过 count 和 分页查询
  4. *
  5. * @param ms MappedStatement
  6. * @param parameterObject 方法参数
  7. * @param rowBounds 分页参数
  8. * @return true 跳过,返回默认查询结果,false 执行分页查询
  9. */
  10. boolean skip(MappedStatement ms, Object parameterObject, RowBounds rowBounds);
  11. /**
  12. * 执行分页前,返回 true 会进行 count 查询,false 会继续下面的 beforePage 判断
  13. *
  14. * @param ms MappedStatement
  15. * @param parameterObject 方法参数
  16. * @param rowBounds 分页参数
  17. * @return
  18. */
  19. boolean beforeCount(MappedStatement ms, Object parameterObject, RowBounds rowBounds);
  20. /**
  21. * 生成 count 查询 sql
  22. *
  23. * @param ms MappedStatement
  24. * @param boundSql 绑定 SQL 对象
  25. * @param parameterObject 方法参数
  26. * @param rowBounds 分页参数
  27. * @param countKey count 缓存 key
  28. * @return
  29. */
  30. String getCountSql(MappedStatement ms, BoundSql boundSql, Object parameterObject, RowBounds rowBounds, CacheKey countKey);
  31. /**
  32. * 执行完 count 查询后
  33. *
  34. * @param count 查询结果总数
  35. * @param parameterObject 接口参数
  36. * @param rowBounds 分页参数
  37. * @return true 继续分页查询,false 直接返回
  38. */
  39. boolean afterCount(long count, Object parameterObject, RowBounds rowBounds);
  40. /**
  41. * 处理查询参数对象
  42. *
  43. * @param ms MappedStatement
  44. * @param parameterObject
  45. * @param boundSql
  46. * @param pageKey
  47. * @return
  48. */
  49. Object processParameterObject(MappedStatement ms, Object parameterObject, BoundSql boundSql, CacheKey pageKey);
  50. /**
  51. * 执行分页前,返回 true 会进行分页查询,false 会返回默认查询结果
  52. *
  53. * @param ms MappedStatement
  54. * @param parameterObject 方法参数
  55. * @param rowBounds 分页参数
  56. * @return
  57. */
  58. boolean beforePage(MappedStatement ms, Object parameterObject, RowBounds rowBounds);
  59. /**
  60. * 生成分页查询 sql
  61. *
  62. * @param ms MappedStatement
  63. * @param boundSql 绑定 SQL 对象
  64. * @param parameterObject 方法参数
  65. * @param rowBounds 分页参数
  66. * @param pageKey 分页缓存 key
  67. * @return
  68. */
  69. String getPageSql(MappedStatement ms, BoundSql boundSql, Object parameterObject, RowBounds rowBounds, CacheKey pageKey);
  70. /**
  71. * 分页查询后,处理分页结果,拦截器中直接 return 该方法的返回值
  72. *
  73. * @param pageList 分页查询结果
  74. * @param parameterObject 方法参数
  75. * @param rowBounds 分页参数
  76. * @return
  77. */
  78. Object afterPage(List pageList, Object parameterObject, RowBounds rowBounds);
  79. /**
  80. * 完成所有任务后
  81. */
  82. void afterAll();
  83. /**
  84. * 设置参数
  85. *
  86. * @param properties 插件属性
  87. */
  88. void setProperties(Properties properties);
  89. }

具体的接口方法的作用参考注释大致都能看的明白。Dialect针对不同的数据库有多种不同的实现类

PageInterceptor中使用的Dialect默认实现类是PageHelper,PageHelper虽然实现了Dialect接口,但是他对接口中的实现方法除skip方法以外其他方法基本都转发交给了PageAutoDialect这个类进行处理。而skip方法也只是简单的判断线程变量中page对象是否存在来决定是否跳过分页。
<span style="background-color:#f6f6f6"><span style="color:#333333"><span style="color:rgba(140, 140, 140, 0.8)">复制代码</span></span></span>
  1. public class PageHelper extends PageMethod implements Dialect {
  2. private PageParams pageParams;
  3. private PageAutoDialect autoDialect;
  4. @Override
  5. public boolean skip(MappedStatement ms, Object parameterObject, RowBounds rowBounds) {
  6. if (ms.getId().endsWith(MSUtils.COUNT)) {
  7. throw new RuntimeException("在系统中发现了多个分页插件,请检查系统配置!");
  8. }
  9. Page page = pageParams.getPage(parameterObject, rowBounds);
  10. if (page == null) {
  11. return true;
  12. } else {
  13. //设置默认的 count 列
  14. if (StringUtil.isEmpty(page.getCountColumn())) {
  15. page.setCountColumn(pageParams.getCountColumn());
  16. }
  17. autoDialect.initDelegateDialect(ms);
  18. return false;
  19. }
  20. }
  21. }

继续看看PageAutoDialect这个类的作用。因为这个类的代码比较多我就不贴代码了,简单说下这个类干啥的。因为多种数据库的分页方式可能存在差异,所以在分页的时候需要根据数据库的类型选择对应的数据库方言,即上文提到的Dialect的多种实现类。这一块可以手动配置指定也可以让pagehelper自己根据数据库连接的url啊等一些因素来判断。PageAutoDialect类在初始化的时候会实例化对应的Dialect存在自己的属性中(多数据源的情况是存在线程变量中)。所以在PageHelper这个类中,针对分页的操作方法他都通过PageAutoDialect来获取dialect进而将操作转交给获取到的Dialect。

<span style="background-color:#f6f6f6"><span style="color:#333333"><span style="color:rgba(140, 140, 140, 0.8)">复制代码</span></span></span>
  1. @Override
  2. public boolean beforeCount(MappedStatement ms, Object parameterObject, RowBounds rowBounds) {
  3. return autoDialect.getDelegate().beforeCount(ms, parameterObject, rowBounds);
  4. }

回到PageInterceptor中的intercept方法,具体的分页流程可以详细去看具体的代码。我这里简单说说分页的过程:

1、在query类型的数据库查询进来时,会通过skip方法判断是否需要分页,不需要分页直接进行正常的查询操作并返回。

2、需要分页的情况下,通过beforeCount方法判断是否需要进行count总数的查询,如果需要则调用count方法查询总数并在查询总数结束后调用afterCount,这里多了一个操作。即判断查出来的数据总条数是否为0(为0相当于没数据,直接返回一个空数据的分页对象,节省一次查询操作)

3、在上述操作结束之后,开始进行数据的查询,调用ExecutorUtil.pageQuery方法。该方法会通过beforePage来判断需不需要在sql语句中中添加分页的操作(limit x,x)

4、查询结束之后调用afterPage进行一些分页对象page的处理(数据添加到page对象以及页数总页数等的处理)

至此分页的操作完成。

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

相关文章

  1. 个人申请支付宝微信支付接口教程(无需营业执照)

    提示&#xff1a;以下教程只适用于自己申请的微信支付&#xff0c;如果您已成功申请微信支付的通过微信认证的服务号&#xff0c;您可以按照以下教程操作&#xff0c;如果您是未认证的服务号&#xff0c;或者还未成功申请微信支付服务号&#xff0c;您只能使用系统代收的方式。…...

    2024/4/30 18:39:04
  2. Go学习笔记

    Go开发 一、基本知识 1.1、基本结构 (1)go文件的后缀是.go (2)package main ​ 表示hello.go文件所在的包是main。在go中&#xff0c;每个文件都必须属于一个包。 (3)import “fmt” ​ 表示引入一个包&#xff0c;可以使用fmt包中的函数 (4)func main(){ } func 是一…...

    2024/4/21 17:49:17
  3. Android的布局管理器与java中的实现方式不同

    1. Android的布局管理器: 在Android中,提供了五种布局管理器,主要通过继承ViewGroup来实现。 LinearLayout 线性布局 TableLayout 表格布局 RelativeLayout 相对布局 FrameLayout 帧布局 AbsoluteLayout 绝对布局 他们的继承关系如下: java.lang.Objectandroid.view.Vie…...

    2024/4/30 19:36:08
  4. Python 3.10 版本号引发的 bug

    2021年10月&#xff0c;Python 的 3.10 版本正式发布。但之前的 Python 3.6、3.7、3.8、3.9 子版本都为个位数&#xff0c;程序员可能习惯了这种版本格式&#xff0c;因此编写涉及版本号的代码时&#xff0c;未曾考虑到 3.10 版本。 本位列举一些相关bug&#xff0c;已在笔者的…...

    2024/4/21 17:49:14
  5. Python文件的操作处理(一看就会)

    1.1使用open()函数打开文件夹 在读取一个文件的内容之前&#xff0c;需要先打开这个文件。在Python程序中可以通过内置函数open()来打开一个文件程序中&#xff0c;&#xff0c;并用相关的方法读或写文件文件中的内容以供程序的处理和使用&#xff0c;同时可以将文件看作Python…...

    2024/4/21 17:49:13
  6. 在数据库操作中通常有如下的插入语句:insert into user (id,name,age) values (‘1‘,‘张三‘,‘18‘),使用反射完成 SQL 的拼接。 Student stud

    题目&#xff1a;在数据库操作中通常有如下的插入语句&#xff1a;题目描述&#xff1a;核心代码如下&#xff1a;代码运行结果如下&#xff1a;题目描述&#xff1a; 在数据库操作中通常有如下的插入语句&#xff1a;insert into user (id,name,age) values (‘1’,‘张三’,‘…...

    2024/4/21 17:49:13
  7. 自定义Camera系列之:GLSurfaceView + Camera2

    一、前言 假如你要使用 OpenGL ES 来渲染相机的话,使用 GLSurfaceView 将是一个很常用的选择。 这里介绍 GLSurfaceView + Camera2 的组合。 如果你对 Camera2 的相关类和接口还不熟悉,可以先看看下面这些介绍:CameraManager详解 CameraDevice详解 CameraCharacteristics详解…...

    2024/4/21 17:49:11
  8. 任意输入一个正整数,求各位数字之和。例如:输入12690,输出:“12690各位数字之和为18”

    ...

    2024/4/21 17:49:10
  9. bomblab CSAPP(深入理解计算机系统)

    CSAPP_lab之bomblab 文章目录CSAPP_lab之bomblab前言一、phase_1二、phase_2三、phase_3四、phase_4五、phase_5六、phase_6总结前言 bomblab是这我最喜欢的lab之一&#xff0c;主要思路通过反汇编代码找到拆除炸弹的答案。 拆除炸弹总共需要连续输入6次&#xff08;phase_1、…...

    2024/4/30 19:31:36
  10. 10.14日总结

    初步学习概况&#xff1a; python&#xff1a;学习完第五章字典部分&#xff0c; stuff{gold coin:42,arrow:12,rope:1,dagger:1,torch:6} def addto(inventory,addeditems):for x in addeditems:inventory.setdefault(x,0)inventory[x] 1return inventorydef display(invent…...

    2024/4/21 17:49:08
  11. 20211027_配置中心服务功能梳理(@Service+@Contract/@Inject+ServiceLocator/@PostConstruct/静态内部类的使用)

    一、背景 今天在梳理模块代码功能一页纸的时候&#xff0c;发现了工程中的一个子模块功能&#xff0c;大概的功能描述是这样的&#xff1a;“app服务启动后&#xff0c;一个服务(ConfigChangeLintener)通过监听配置中心的变更消息&#xff08;是否开启某功能&#xff09;&#…...

    2024/4/21 17:49:08
  12. 硬件描述语言HDL和汇编语言、c语言的区别

    个人感觉&#xff1a; 硬件描述语言&#xff08;vhdl等&#xff09;&#xff1a;是为了制造cpu&#xff08;类似的芯片&#xff09;&#xff0c;设计人员使用hdl设计和安排寄存器和时序电路如何组合&#xff0c;然后最终会生成门级网表&#xff0c;然后通过相关软件等生成最终物…...

    2024/4/21 17:49:08
  13. 2016级移动应用开发在线测试13-Location、Sensor & Network

    有趣有内涵的文章第一时间送达!喝酒I创作I分享生活中总有些东西值得分享@醉翁猫咪 1. 充分利用智能手机的GPS定位信息,创造了O2O的商业模式,打通了线上与线下的信息流和商流,极大地推动了移动互联网的迅猛发展,下面关于GPS技术描述错误的是() 您的回答为:GPS需要地面基站…...

    2024/4/19 13:56:26
  14. 索引的使用

    1. 验证索引提升查询效率 注&#xff1a;以下的查询语句基于tb_item 表&#xff0c;由黑马提供。本文不提供具体的数据和数据链接。 1.1 根据 id 查询 select * from tb_item where id 1999\G; 上图是上述查询语句的查询结果信息&#xff0c;从执行的时间来看&#xff0c;该…...

    2024/4/20 13:45:35
  15. flume安装教程(欢迎指教)

    flume 安装1.下载并解压 apache-flume-1.6.0-bin.tar.gz2.进入conf3.修改环境变量4.重载环境变量5.检验flume 状态未完待续1.下载并解压 apache-flume-1.6.0-bin.tar.gz tar -zxvf apache-flume-1.6.0-bin.tar.gz2.进入conf cd apache-flume-1.6.0-bin/conf cp flume-env.sh.…...

    2024/4/20 13:45:34
  16. Arduino mega 2560 上传项目总是出错最全解决方案以及串口测试教程

    一&#xff1a;串口识别和驱动安装需要保证准确无误 1.运行arduino mega 2560 首先需要安装串口驱动&#xff0c;这样我们用USB将板子和我们计算机连接的时候&#xff0c;使得我们的计算机能够识别连接的串口并且能够连接上&#xff0c;以便实现程序下载、上传、串口通讯。 注…...

    2024/4/23 12:21:17
  17. 基本Dos操作

    D: #盘符切换 dir #查看当前目录所有文件 cd #切换目录 cd /d E:\目录名 cd .. #返回上一级目录 cls #清理屏幕(clean screen) exit #退出终端 ipconfig #查看电脑ip # 打开应用 calc #打开计算器 mspaint #打开画图工具 not…...

    2024/4/20 7:58:20
  18. Termux-api调用api后没没反应:

    今天玩弄安卓终端&#xff0c;通过f-droid安装的termux&#xff0c;遇到这个调用失败问题在各学习平台网站没有找见答案&#xff01;&#xff01;&#xff01;&#xff0c;在百度贴吧里找见的。。。多亏了这位大哥。&#xff08;写一篇兴许能帮助到感兴趣而遇到这个坑的小伙伴&…...

    2024/4/19 20:12:32
  19. 【优化求解】基于水循环算法WCA求解约束单目标matlab代码

    1 简介 水循环优化算 法 是 由 &#xff28;&#xff41;&#xff44;&#xff49;&#xff25;&#xff53;&#xff4b;&#xff41;&#xff4e;&#xff44;&#xff41;&#xff52;等 人 于&#xff12;&#xff10;&#xff11;&#xff12;年提出&#xff0c;其理论受…...

    2024/4/20 13:45:30
  20. java内部类

    这是我学习Java内部类的笔记 1.为什么使用内部类? 使用内部类最吸引人的原因是&#xff1a;每个内部类都能独立地继承一个&#xff08;接口的&#xff09;实现&#xff0c;所以无论外围类是否已经继承了某个&#xff08;接口的&#xff09;实现&#xff0c; 对于内部类都没有影…...

    2024/4/25 13:43:00

最新文章

  1. java对象和json对象互转

    在网上找了一大堆 没找到合适的 import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j;import java.io.IOException; im…...

    2024/4/30 22:18:26
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云

    8核32G云服务器租用优惠价格表&#xff0c;云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价&#xff0c;腾讯云和京东云是轻量应用服务器&#xff0c;阿里云是云服务器ECS&#xff1a; 阿里云8核32G服务器 阿里云8核32G服务器价格…...

    2024/4/29 23:31:45
  4. 汽车疲劳测试试验平台技术要求(北重厂家)

    汽车疲劳测试试验平台技术要求通常包括以下几个方面&#xff1a; 车辆加载能力&#xff1a;测试平台需要具备足够的承载能力&#xff0c;能够同时测试多种车型和不同重量的车辆。 动力系统&#xff1a;测试平台需要具备稳定可靠的动力系统&#xff0c;能够提供足够的力和速度来…...

    2024/4/30 1:45:03
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/29 23:16:47
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57