C# 数据操作系列 - 19 FreeSql 入坑介绍
0. 前言
前几天FreeSql的作者向我推荐了FreeSql框架,想让我帮忙写个文章介绍一下。嗯,想不到我也能带个货了。哈哈,开个玩笑~看了下觉得设计的挺有意思的,所以就谢了这篇文章。
简单介绍一下,FreeSql 是NCC组织的沙盒级项目,是一款功能强大的 ORM 组件,支持 .NET Core、.NET Framework 和 Xamarin。目前 FreeSql 支持以下数据库:MySQL、PostgreSQL、SqlServer、Oracle、Sqlite、Odbc、微软 Access 以及国产数据库达梦。
也就是说也是一个由国内优秀开发者维护的优秀项目,初步看了下功能很齐全。小伙伴们有时间可以取瞅瞅。下图是我从它GitHub仓库里复制过来的。可以看见支持的功能还是相当多的。
关于NCC社区,是.net core的一个开源社区,也是国内最大的.net core开源社区
1. 初步使用
照例,没安装就没有调用。所以,在创建项目之后,安装一下吧:
dotnet add package FreeSql
然后创建一个IFreeSql对象:
public class FreeSqlContext
{public static IFreeSql FreeSqlConnect { get; } =new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=document.db").UseAutoSyncStructure(true) //自动同步实体结构到数据库.Build();
}
因为官方要求将IFreeSql对象声明为单例模式,所以我在这里使用了静态属性。
这种写法是C#的一种语法糖,只有get表示该属性是一个只能读的属性(与只读属性有个微妙的差距),等号后面表示该属性第一次赋值的内容。
创建一个普通的Model类:
public class Model
{public int Id { get; set; }public int StringLength { get; set; }public string Name { get; set; }
}
1.1 简单插入
然后试一下插入数据:
var row = FreeSqlContext.FreeSqlConnect.Insert(new Model
{Name = "测试",StringLength = 10
}).ExecuteAffrows();
提示如图内容,需要我们手动安装一下FreeSql的SQLite驱动,安装之后:
dotnet add packages FreeSql.Provider.Sqlite
FreeSql针对各种受支持的数据库都单独开发了驱动包,统一命名为:
FreeSql.Provider.<数据库类型>
安装完成后,重新运行后顺利完成执行,顺便帮你把数据库也生成好了(这一点我感觉挺好的),同时生成了一个主键为Id的Model表:
create table Model
(Id INTEGERprimary key,StringLength INTEGER not null,Name NVARCHAR(255)
);
1.2 简单查询
接下来简单的查询一下刚刚插入的数据:
var list = FreeSqlContext.FreeSqlConnect.Queryable<Model>().ToList();
可以发现,查询使用还是非常方便的。
1.3 简单更新
FreeSql的更新与其他框架相比略显复杂,这里先展示一种更新方式:
list[0].Name = "修改测试";
row = FreeSqlContext.FreeSqlConnect.Update<Model>().SetSource(list[0]).ExecuteAffrows();
先声明要更新的类型是Model,然后设置更新源。
1.4 简单删除
row = FreeSqlContext.FreeSqlConnect.Delete<Model>(new[] { list[0] }).ExecuteAffrows();
删除之前获取的数据。
简单的看,FreeSql设计的增删改查都是以命令的形式进行的,在实际调用ExcuteXXX之前数据并不会保存到数据库中。
2. 增删改查详解
在上一节中我们简单的使用了一下增删改查, 这一节将为大家详细分析一下FreeSql的增删改查。
2.1 新增
IInsert<T1> Insert<T1>() where T1 : class;
IInsert<T1> Insert<T1>(T1 source) where T1 : class;
IInsert<T1> Insert<T1>(IEnumerable<T1> source) where T1 : class;
IInsert<T1> Insert<T1>(List<T1> source) where T1 : class;
IInsert<T1> Insert<T1>(T1[] source) where T1 : class;
这是IFreeSql接口里声明的Insert方法,通过方法我们可以看到插入单数据插入以及多数据插入,并且返回一个IInsert<T1>的接口。当然也可以不传入数据直接获取一个IInsert接口实例。这几个方法很简单,我们就不在这多费时间了,然后跳进IInsert里,看一看里面有哪些方法吧。
先来这样一组方法:
IInsert<T1> AppendData(T1 source);
IInsert<T1> AppendData(T1[] source);
IInsert<T1> AppendData(IEnumerable<T1> source);
这些方法可以后续为IInsert继续添加数据,以便执行更多的插入。
IInsert<T1> IgnoreColumns(string[] columns);
IInsert<T1> IgnoreColumns(Expression<Func<T1, object>> columns);
设置在插入过程中忽略的列,设置之后这些列将不会插入到数据库中。其中 Expression<Func<T1, object>>
表示一个包含列名属性的匿名对象。
IInsert<T1> InsertColumns(string[] columns);
IInsert<T1> InsertColumns(Expression<Func<T1, object>> columns);
设置只插入这些列,其他的列将不会被插入。
通过调用以下方法将执行插入:
int ExecuteAffrows();// 返回受影响的列
long ExecuteIdentity();// 返回自增主键值
这个方法需要实体类的主键标记为自增(这部分内容见下一节)。如果启用了批量插入模式,该值将返回最后一个数据的主键值。
List<T1> ExecuteInserted();// 返回插入后的数据
这个方法官方标注只在Postgresql/SqlServer有效果。
这是插入基本内容,相对而言插入比较简单。
2.2 删除
这次换个顺序,因为删除的方法在这里相对简单一些。FreeSql对于单表的数据删除相对克制而谨慎。那么就让我们简单看一下如何进行删除吧。
IDelete<T1> Delete<T1>() where T1 : class;
设置泛型类型,创建一个删除器(我给起的名,官方没给起名,也就是一个IDelete接口实例)。
IDelete<T1> Delete<T1>(object dywhere) where T1 : class;
这个方法很有意思,支持的相当广泛。
以下是官方给的注释:
主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} |new{id=1}
根据实际表现来看,会删除对应主键的数据。如果传入的是实体的话,会自动分析对应实体的主键,然后把这个数据标记为待删除。
记住这种方式,因为在后续的Update中会用到。
IFreeSql中的删除都不会立即删除,都会返回一个IDelete实例,与IInsert一样需要手动调用ExcuteXXX方法。
那么我们来看一下IDelete里的方法:
IDelete<T1> Where(Expression<Func<T1, bool>> exp);
IDelete<T1> Where(string sql, object parms = null);
IDelete<T1> Where(T1 item);
IDelete<T1> Where(IEnumerable<T1> items);
简单看一下方法,可以通过方法和参数就能知道其中含义。
需要注意的是,如果使用exp 做批量删除的话,只能用实体类的属性作为条件,不能使用导航属性。
使用sql语句的话,可以使用参数化写法如下:Where("id = ?id", new { id = 1 })
,如果有多个条件的话sql里用and拼接。
IDelete<T1> WhereDynamic(object dywhere, bool not = false);
这里的dywhere与Delete的dywhere一样,not 如果设置为true,则表示删除除此之外的对象。
FreeSql在设计删除模式时,如果在IFreeSql.Delete中传入参数,后续继续调用Where或者WhereDynamic的话,两次是以and 的形式拼接的条件:
list = FreeSqlContext.FreeSqlConnect.Queryable<Model>().ToList();
FreeSqlContext.FreeSqlConnect.Delete<Model>(list[0]).WhereDynamic(list[2]).ExecuteAffrows();
FreeSqlContext.FreeSqlConnect.Delete<Model>(list[0]).Where(t=>t.Id > 10).ExecuteAffrows();
分别生成了如下SQL语句:
DELETE FROM "Model" WHERE ("Id" = 1) AND ("Id" = 11)
----------------------------
DELETE FROM "Model" WHERE ("Id" = 1) AND ("Id" > 10)
额,所以调用删除的时候最好注意一下,因为条件冲突的话,可能数据不会发生任何变化。
执行删除:
int ExecuteAffrows();//返回被影响的行数
List<T1> ExecuteDeleted();// 返回被删除的数据,一样只有 Postgresql/SqlServer 有效果
2.3 更新
IUpdate<T1> Update<T1>() where T1 : class;
IUpdate<T1> Update<T1>(object dywhere) where T1 : class;
同样,开启一个更新器(获取一个IUpdate示例),这里dywhere与删除支持的内容是一样的。不过,有一点不同的是:
row = FreeSqlContext.FreeSqlConnect.Update<Model>(list[0]).ExecuteAffrows();
不会有任何数据发生更改。嗯,这点与Delete完全不一样。简单理解一下,在这里FreeSql只是解析了数据里的实体,但并没有从传入的实体解析出更新SQL语句。
接下来,进入IUpdate:
IUpdate<T1> UpdateColumns(string[] columns);
IUpdate<T1> UpdateColumns(Expression<Func<T1, object>> columns);
IUpdate<T1> IgnoreColumns(Expression<Func<T1, object>> columns);
IUpdate<T1> IgnoreColumns(string[] columns);
设置要更新的列和要忽略的列,两者互相冲突。
示例:
row = FreeSqlContext.FreeSqlConnect.Update<Model>(list[0]).UpdateColumns(new[] { "Name" }).ExecuteAffrows();
是不是觉得欢天喜地的觉得会更新了,答案很残酷,没有。依旧返回0。说到这里了,FreeSql在更新上,需要额外指定更新的数据来源:
IUpdate<T1> SetSource(T1 source);
IUpdate<T1> SetSource(IEnumerable<T1> source);
也就是,FreeSql会从source解析出需要更新的字段,然后使用Update/Ignore来设置只更新或忽略哪些列。
最终示例:
row = FreeSqlContext.FreeSqlConnect.Update<Model>(list[0]).SetSource(list[0]).UpdateColumns(new[] { "Name" }).ExecuteAffrows();
row = FreeSqlContext.FreeSqlConnect.Update<Model>(list[0]).SetSource(list).UpdateColumns(new[] { "Name" }).ExecuteAffrows();
row = FreeSqlContext.FreeSqlConnect.Update<Model>(new[] { list[0] ,list[1]}).SetSource(list[0]).UpdateColumns(new[] { "Name" }).ExecuteAffrows();
row = FreeSqlContext.FreeSqlConnect.Update<Model>(new[] { list[0], list[1] }).SetSource(list).UpdateColumns(new[] { "Name" }).ExecuteAffrows();
然后生成如下SQL:
UPDATE "Model" SET "Name" = @p_0 WHERE ("Id" = 1) AND ("Id" = 1)
--------------------------
UPDATE "Model" SET "Name" = CASE "Id"
WHEN 1 THEN @p_0
WHEN 10 THEN @p_1
WHEN 11 THEN @p_2
WHEN 12 THEN @p_3
WHEN 13 THEN @p_4
WHEN 14 THEN @p_5
WHEN 15 THEN @p_6
WHEN 16 THEN @p_7
WHEN 17 THEN @p_8
WHEN 18 THEN @p_9
WHEN 19 THEN @p_10
WHEN 20 THEN @p_11
WHEN 21 THEN @p_12
WHEN 22 THEN @p_13
WHEN 23 THEN @p_14
WHEN 24 THEN @p_15 END
WHERE ("Id" IN (1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)) AND ("Id" = 1)
--------------------
UPDATE "Model" SET "Name" = @p_0 WHERE ("Id" = 1) AND ("Id" = 1 OR "Id" = 10)
--------------------
UPDATE "Model" SET "Name" = CASE "Id"
WHEN 1 THEN @p_0
WHEN 10 THEN @p_1
WHEN 11 THEN @p_2
WHEN 12 THEN @p_3
WHEN 13 THEN @p_4
WHEN 14 THEN @p_5
WHEN 15 THEN @p_6
WHEN 16 THEN @p_7
WHEN 17 THEN @p_8
WHEN 18 THEN @p_9
WHEN 19 THEN @p_10
WHEN 20 THEN @p_11
WHEN 21 THEN @p_12
WHEN 22 THEN @p_13
WHEN 23 THEN @p_14
WHEN 24 THEN @p_15 END
WHERE ("Id" IN (1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)) AND ("Id" = 1 OR "Id" = 10)
可以看出,如果在生成IUpdate实例的时候,传入数据再使用SetSource进行更新会比较诡异。所以SetSource的正常使用方式是,获取IUpdate实例的时候,不传dywhere,直接获取一个空IUpdate。
那么dywhere该在什么时候使用呢?
row = FreeSqlContext.FreeSqlConnect.Update<Model>(list[0]).Set(t => t.StringLength + 1).ExecuteAffrows();
通过调用Set/SetDto/SetIf三种方法进行更新,当然了这三种方法并不局限于使用了dywhere参数。
IUpdate<T1> Set<TMember>(Expression<Func<T1, TMember>> exp);
IUpdate<T1> Set<TMember>(Expression<Func<T1, TMember>> column, TMember value);
IUpdate<T1> SetDto(object dto);
IUpdate<T1> SetIf<TMember>(bool condition, Expression<Func<T1, TMember>> exp);
IUpdate<T1> SetIf<TMember>(bool condition, Expression<Func<T1, TMember>> column, TMember value);
其中:
- Expression<Func<T1, TMember>> exp 表示在字段本身值的基础上进行操作
- Expression<Func<T1, TMember>> column, TMember value 表示将 column设置 value
- object dto 一个包含要更新属性和值的匿名类,或者一个字典类型(键为要更新的列,值为对应列的值)
- bool condition 表示满足条件则更新,否则将不进行更新
IUpdate也提供了Where模式:
IUpdate<T1> Where(Expression<Func<T1, bool>> exp);
IUpdate<T1> Where(string sql, object parms = null);
IUpdate<T1> Where(T1 item);
IUpdate<T1> Where(IEnumerable<T1> items);
IUpdate<T1> WhereDynamic(object dywhere, bool not = false);
最终更新应该如下:
FreeSqlContext.FreeSqlConnect.Update<Model>(list[0]).Set(t => t.StringLength + 1).ExecuteAffrows();
FreeSqlContext.FreeSqlConnect.Update<Model>(list[0]).SetDto(new { Name="测试2" }).ExecuteAffrows();
FreeSqlContext.FreeSqlConnect.Update<Model>(list[0]).SetIf(true, t => t.Name + 1).ExecuteAffrows();
// 或者以下模式
FreeSqlContext.FreeSqlConnect.Update<Model>().Where(t => true).Set(t => t.StringLength + 1).ExecuteAffrows();
// 或者
FreeSqlContext.FreeSqlConnect.Update<Model>(1).Set(t => t.StringLength + 1).ExecuteAffrows();
执行更新:
int ExecuteAffrows();// 返回受影响的行数
List<T1> ExecuteUpdated();// 嗯, 只有 Postgresql/SqlServer 有效果
2.4 查询
FreeSql的查询有两种方式,一种是使用FreeSql的ISelect方法,一种是使用扩展出来的Queryable方法,两者最终返回是一样的,均返回了一个ISelect实例。
那先来悄悄看一下两个方法的声明吧:
ISelect<T1> Select<T1>() where T1 : class;
ISelect<T1> Select<T1>(object dywhere) where T1 : class;
// 扩展方法在 FreeSqlGlobalExtensions 类
public static ISelect<T> Queryable<T>(this IFreeSql freesql) where T : class;
其中有一个闪闪放光的 dywhere,与Update/Delete一样,也是通过传入的属性解析到主键值获取对应的数据。
那么进入ISelect一探究竟吧:
暂且忽略多个泛型支持的方法:
T1 First()
TDto First<TDto>();
TReturn First<TReturn>(Expression<Func<T1, TReturn>> select);
T1 ToOne();
TDto ToOne<TDto>();
TReturn ToOne<TReturn>(Expression<Func<T1, TReturn>> select);
- First和ToOne都是返回第一条数据
- TDto 表示要查询出来的字段合集,列名与数据表中一一对应
- Expression<Func<T1, TReturn>> select 类型投影,通过lambda语句建立T1到TReturn之间的关系
返回多个:
List<T1> ToList(bool includeNestedMembers = false);
List<TDto> ToList<TDto>();
List<TReturn> ToList<TReturn>(Expression<Func<T1, TReturn>> select);
- includeNestedMembers : false: 返回 2级 LeftJoin/InnerJoin/RightJoin 对象;true: 返回所有 LeftJoin/InnerJoin/RightJoin的导航数据
其他方法:
long Count();// 返回数目
ISelect<T1> Distinct();//去重
ISelect<T1> Skip(int offset);// 忽略几个
ISelect<T1> Take(int limit);// 获取前几个
ISelect<T1> OrderBy<TMember>(Expression<Func<T1, TMember>> column);// 排序
ISelect<T1> OrderBy<TMember>(bool condition, Expression<Func<T1, TMember>> column);// 排序
ISelect<T1> OrderByDescending<TMember>(Expression<Func<T1, TMember>> column); // 降序
ISelect<T1> OrderByDescending<TMember>(bool condition, Expression<Func<T1, TMember>> column);// 降序
decimal Sum<TMember>(Expression<Func<T1, TMember>> column);// 求和
double Avg<TMember>(Expression<Func<T1, TMember>> column);// 求平均数
设置查询条件:
ISelect<T1> Where(Expression<Func<T1, bool>> exp);
ISelect<T1> WhereIf(bool condition, Expression<Func<T1, bool>> exp);
ISelect<T1> Where(string sql, object parms = null);
注意与dywhere之间是并列关系。
关于查询FreeSql做了很多优化,更多内容可以查阅官方文档。到目前为止,这些方法已经可以满足一个项目的使用了。
3. 总结
FreeSql可以说结合了很多优秀的ORM框架内容,而且针对不同的方式分成了不同的插件形式,使主干可以轻装上阵。
这是官方文档中关于不同使用习惯的介绍。
关于FreeSql的基础内容就到这里了,如果对FreeSql有更多的需求的话,可以踊跃吐槽哦~~如果有小伙伴还想看的话,我将会继续为大家讲解的。
至此,2020-5-28 《C# 数据操作系列》暂时 完结(如果后续有其他好的ORM的话,还会继续更新的)。
更多内容烦请关注我的博客《高先生小屋》
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Sentry搭建+钉钉告警+Django接入
上下文:部门很多项目,基本自测,测试覆盖率很低,即便有测试老师的加入,测试覆盖率也很难100%;用户肯定不会按照我们的预期来操作,但我们又不能让用户给我们试错,毕竟每一个错误/bug对用户,公司都可能是切切实实的伤害;而且我们的项目打印日志太多,基本没啥用,就导致…...
2024/4/24 8:56:43 - java编译和执行过程
1,java跨平台原理java之所以具有跨平台性,是因为它对外提供了统一的java Api;对内实现了针对不同操作系统的jvm虚拟机;它首先将java文件编译成字节码文件,再编译成机器码,再由jvm虚拟机进行调用native方法进行执行。2,执行顺序3,编译器编译器分为前端编译器、JIT编译器、A…...
2024/5/3 5:59:44 - Android 应用接入Firebase
...
2024/5/3 19:19:17 - Activity 各种情景的生命周期
Activity 各种情景的生命周期一.官网生命周期二.常见一些情景1.直接启动一个MainActivity2.在MainActivity中启动TwoActivity3.TwoActivity中点击back返回3.MainActivity中点击home或者锁屏按键4.重新进入MainActivity5.MainActivity 点击弹窗dialog6.MainActivity 点击跳转透明…...
2024/4/24 8:56:45 - 诺禾|Python编程第2课
先说说第1课作业的答案。 1、Python编写的源程序扩展名为( A)。 A. py B. cpp C. doc D. mp4 2、阅读程序写结果。 print(“1+1”) 打开UC浏览器 查看更多精彩图片 图2.1 第1题选A,这个没问题,可是第2题,有初学者掉“坑”里了,如图2.1所示,这就说明对于print打印输出函数…...
2024/5/9 6:47:52 - 【华为云技术分享】STM32L476移植华为LiteOS系列教程---Kconfig 6
摘要:Kconfig是一款基于python优秀的配置软件,之前没有做过Linux开发的同学们可能不知道这是啥,所以这篇文章想向大家说明Kconfig在IoT Studio中的重要性,以及一些相关的简单的知识。这是Kconfig的github仓库地址:https://github.com/ulfalizer/Kconfiglib,感兴趣的同学可…...
2024/4/19 13:11:44 - 若依框架后台开发文档
# 后台手册 # 分页实现 前端基于Element封装的分页组件 Pagination 后端分页组件使用Mybatis分页插件 PageHelper # 前端调用实现 1、前端定义分页流程 // 一般在查询参数中定义分页变量 queryParams: {pageNum: 1,pageSize: 10 },// 页面添加分页组件,传入分页变量 <pagin…...
2024/4/16 13:20:04 - IOS学习日记一
今天学习一下ios的布局插件Snapkit的使用首先在podfile配置# Uncomment this line to define a global platform for your project platform :ios, 12.4.6 # Comment this line if youre not using Swift and dont want to use dynamic frameworks use_frameworks!target Beaut…...
2024/4/19 9:58:19 - 秋招,校招应该注意什么
0.方向 1.秋招时间 七八月 你有什么建议给我 2.怎么投递 学校官网投递 简历求职日历 时间 地点 状态 3.简历官网填简历区分简历方向看看能不能设计简历信息真实可靠4.简历名称姓名 + 毕业院校 + 求职的岗位简历保存格式为PDF版本 多找人修改一下笔试行色题https://www.nowc…...
2024/4/26 3:57:40 - Spring创建容器时就存在的5个Bean?
Spring Boot创建容器之后就存在的5个Bean // 创建容器 context = createApplicationContext();首先这个5个Bean是如何添加到beanDefinitionMap中去的呢?查看 判断容器类型 createApplicationContext的源码如下,从代码逻辑来看:根据webApplicationType(这个值在SpringApplic…...
2024/4/16 13:20:45 - springboot+shiro+vue实现权限管理
springboot+shiro+vue实现权限管理一 功能简介:1 介绍:二 开始接入:1 数据库设计2 导入依赖3 ShiroConfiguration : 设置拦截4 MyShiroRealm: 用户权限认证5 LoginService: 用户登录/退出6 权限使用7 权限permission编码 一 功能简介: 1 介绍: Apache Shiro是Java的一个安全…...
2024/4/19 14:14:03 - 使用gulp命令执行文件时结尾是The following tasks did not complete: copy [11:33:00] Did you forget to signal async
按照提示,需要一个信号来确认你的命令已经执行完毕了;所以可以返回一个回调函数,gulp会自动将这个回调函数作为一个参数返回到任务中,在完成的时候一定要调用这个函数。如下: gulp.task(default, gulp.series(server, (done) => done()));若该方法还解决不了你的问题,…...
2024/4/28 18:56:57 - 三总线原则
数据总线,地址总线,控制总线,这是学单片机时讲的。...
2024/4/28 18:12:42 - 使用jackson把json转List或Map
简单封装jackson, 把字符串json转换为list或Map. 代码如下: package com.xxxx.utils.json;import com.fasterxml.jackson.databind.ObjectMapper;import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util…...
2024/5/3 20:26:33 - git 基本操作链接
链接https://www.cnblogs.com/tugenhua0707/p/4050072.html...
2024/4/24 8:56:37 - selenium+py2app 将爬虫打包成程序
0.背景用selenium写了一个爬虫,为了方便他人使用打包成mac使用的app程序。第一次在mac上打包生成程序,遇到了一堆问题。发现selenium和py2app问题相关的博文好少啊,解答都是跑去stackflow上找到的。本文是在这个过程中的踩坑&解决记录。1.写一个GUI界面没有GUI程序不会显…...
2024/4/24 8:56:38 - 利用Google浏览器调试js代码
1.js有两种引入方式,外链和内嵌; 内嵌在浏览中直接调试,外链要在断点处写debugger; 示例代码:1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF-8">5 <title>js简单调试</title>6 </…...
2024/4/24 8:56:35 - 机器学习笔记2:神经网络
神经网络即神经网络学习,是机器学习与神经网学习两个学科领域的交叉部分. 神经网络在1988年被T.Kohonen 定义为:神经网络是由具有适应性的简单单元组成的广泛并行互联网络,它的组织能够模拟生物神经系统对真实世界物体做出的交互反应. neuron(神经元)模型是神经网络…...
2024/5/3 21:03:26 - 标星 7.2w+!GitHub 上这个教人从零开始造轮子的项目又强势登上热榜!
(只要是)我不能创造的,我就(还)没有理解 - Feynman大家好,我是 Rocky0429,一个在划水界鼎鼎有名的蒟蒻…我在之前介绍过一个项目 - 墙裂推荐:GitHub 上这个开源项目可以让你在短短几分钟之内了解一门技术,它包括了很多的简短教程,可以在短时间内让我们了解一门未知的技术…...
2024/4/24 8:56:38 - 阿里云_云计算_基础框架_Punrain
1.云计算相关架构:SaaS (Software as a Service-软件即服务)PaaS (Platform as a Service-平台及服务)IaaS(Infrastructure as a Service-基础架构即服务)阿里云中最多的是基础设施IaaS平台,也是企业用途最多的一种企业上云最优也是选择IaaS2.地域(Region)不同地域之间是隔…...
2024/4/24 8:56:33
最新文章
- 【工具推荐定制开发】一款轻量的批量web请求命令行工具支持全平台:hey,基本安装、配置、使用
背景 在开发 Web 应用的过程中,作为开发人员,为了确认接口的性能能够达到要求,我们往往需要一个接口压测工具,帮助我们快速地对我们所提供的 Web 服务发起批量请求。在接口联调的过程中,我们通常会用 Postman 等图形化…...
2024/5/9 10:46:53 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - Go语言map、slice、channel底层实现(go面试)
slice 切片是一个引用类型,其底层实现是一个结构体,包含以下字段: ptr:一个指向底层数组的指针,指针指向数组的第一个元素。 len:切片当前包含的元素数量。 cap:切片的容量,即底层…...
2024/5/5 1:45:06 - Kafka架构概述
Kafka的体系结构 Kafka是由Apache软件基金会管理的一个开源的分布式数据流处理平台。Kafka具有支持消息的发布/订阅模式、高吞吐量与低延迟、持久化、支持水平扩展、高可用性等特点。可以将Kafka应用于大数据实时处理、高性能数据管道、流分析、数据集成和关键任务应用等场景。…...
2024/5/6 22:36:40 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/7 9:45:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/9 4:20:59 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/9 7:32:17 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) 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 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在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