SqlSugar简单使用之Nuget包封装-Easy.SqlSugar.Core
SqlSugar官方文档
Nuget包开源地址
Nuget包是为了简化SqlSugar的使用步骤,增加一些基础的使用封装
引入分为两个版本,一个Ioc模式,另一个是注入模式,如果不想影响原本的仓储代码推荐使用Ioc模式,两者区别不到,方法通用
线上nuget引入 版本号随时更新
<PackageReference Include="Easy.SqlSugar.Core" Version="2025.02.06.6" />
3.1.1 SqlSugar配置文件
/*对应下边的 DBTypeMySql = 0,SqlServer = 1,Sqlite = 2,Oracle = 3,PostgreSQL = 4,Dm = 5,//达梦Kdbndp = 6,//人大金仓*/"DBS": [{"ConfigId": "journal","DBType": 0,"IsAutoCloseConnection": true,"ConnectionString": "server=localhost;Database=journal;Uid=root;Pwd=123456;allowPublicKeyRetrieval=true;"}]
3.1.2 或者使用自定义的配置只要转换为对应的List配置集合就行,Ioc需要转换为List,普通模式需要转换为List
根据字符串获取DbType
DataBaseTypeExtensions.GetDatabaseType("sql连接字符串")
自定义的配置文件示例
public static class SqlSugarSetup{public static void AddSqlSugarSetup(this IServiceCollection services, IConfiguration configuration){var dblist = new List<IocConfig>();var conn = configuration.GetConnectionString("连接字符串");if (string.IsNullOrWhiteSpace(conn)){continue;}dblist.Add(new IocConfig(){ConfigId = "TestConfig",ConnectionString = conn,DbType = DataBaseTypeExtensions.GetDatabaseType(conn),IsAutoCloseConnection = true});bool aopLogging = false;Action<SqlSugarClient> aopConfigAction = null;//开发环境打印实际sql语句
#if DEBUGaopLogging = true;aopConfigAction = sqlSugarClient =>{foreach (var config in dblist){sqlSugarClient.GetConnection(config.ConfigId).Aop.OnLogExecuting = (Action<string, SugarParameter[]>)((sql, p) =>{Console.WriteLine($"----------------{Environment.NewLine}{DateTime.Now},ConfigId:{config.ConfigId},Sql:{Environment.NewLine}{UtilMethods.GetSqlString((SqlSugar.DbType)config.DbType, sql, p)}{Environment.NewLine}----------------");});}};
#endifservices.AddSqlSugarIocSetup(dblist, aopLogging, aopConfigAction);}}
3.2 SqlSugar配置
3.2.1 使用Ioc模式的配置
//使用SqlSugar
//参数含义
//1.配置文件
//2.是否启用AOP日志
//3.ConfigurationSugar自定义配置
builder.Services.AddSqlSugarIocSetup(configuration.GetSection("DBS").Get<List<IocConfig>>(), true, config =>
{config.Aop.OnLogExecuting = (sql, pars) =>{Console.WriteLine("这是自定义事件{0}", sql);};
});
3.2.2 使用普通模式的配置
//使用SqlSugar
var list = configuration.GetSection("DBS").Get<List<ConnectionConfig>>();
foreach (var item in list)
{//调试模式日志输出
#if DEBUGitem.AopEvents = new AopEvents(){OnLogExecuting = (sql, pars) =>{Console.WriteLine($"{DateTime.Now},ConfigId:{item.ConfigId},Sql:{UtilMethods.GetSqlString(DbType.MySql, sql, pars)}");}};
}
#endif
builder.Services.AddSqlSugarSetup(list);//注入3.2.1.1中的仓储(如果使用其他方式注入,可以忽略这里)
builder.Services.AddSingleton<IUserRepository, UserRepository>();
3.3 实体类、仓储
/// <summary>/// 用户表///</summary>[SugarTable("J_User")]//表别名[Tenant("journal")]//数据库标识 需要与配置文件中的ConfigId对应public class User{/// <summary>///用户id///</summary>[Key][SugarColumn(ColumnName = "ID", IsPrimaryKey = true, IsIdentity = true)]public int Id { get; set; }}//可以直接不使用接口模式,直接使用仓储(如果名称Service、Repository、Dao结尾的类,ISingletony也可以省略,前提是必须使用autofac包)public class UserRepository : BaseSqlSugarIocRepository<User>, ISingleton{//在这里直接用base. 也可以直接调用仓储的方法}public class UserRepository : BaseSqlSugarRepository<User>, ISingleton{public UserRepository(ISqlSugarClient db) : base(db){}}/// <summary>/// 用户仓储(使用SqlsugarIoc模式)/// </summary>public class UserRepository : BaseSqlSugarIocRepository<User>, IUserRepository{//在这里直接用base. 也可以直接调用仓储的方法}/// <summary>/// 用户仓储接口层(使用SqlsugarIoc模式)/// </summary>public interface IUserRepository : IBaseRepository<User>, ISingleton{}//另一个仓储需要注入dbpublic class UserRepository : BaseSqlSugarRepository<User>, ISingleton{public UserRepository(ISqlSugarClient db) : base(db){}}/// <summary>/// 用户仓储接口层(使用SqlsugarIoc模式)/// </summary>public interface IUserRepository : IBaseRepository<User>, ISingleton{}//注入private readonly IUserRepository _userRepository;public SqlSugarController(IUserRepository userRepository){_userRepository = userRepository;}//方法中使用public object Get(){var user = _userRepository.GetSingle(p => p.Id == 1);return user;}
3.4 使用示例
//所有操作都有异步方法,增加Async即可//直接使用DbContext上下文
_userRepository.SqlSugarDbContext
//使用上下文Ado
_userRepository.SqlSugarDbContextAdo
3.4.1 Ioc仓储模式
//查询单个
var obj = _userRepository.GetSingle(p => p.Id == 1);
//查询列表
var list = _userRepository.GetList(p => p.Id > 0);
//分页查询 (条件,排序,页码,每页条数)
var page = _userRepository.QueryPage(p => p.Id > 0, "", 1, 10);
//分页查询 (条件,排序,排序方式,页码,每页条数)
var page2 = _userRepository.QueryPage(p => p.Id > 0, o => o.Id, SqlSugar.OrderByType.Desc, 1, 10);
//分页排序
// 设置排序参数
// Dictionary<string, QueryOrderBy> orderBy = new Dictionary<string, QueryOrderBy>
// {
// { "CreateTime", QueryOrderBy.Desc }, // 按 CreateTime 降序排序
// { "Name", QueryOrderBy.Asc } // 按 Name 升序排序
// };
// var page3 = _userRepository.IQueryablePage(p => p.Id > 0, 1, out int rowcount, orderBy, true);
//判断数据是否存在
var isAny = _userRepository.Exists(p => p.Id == 1);
//获取数据总数
var count = _userRepository.GetCount(p => p.Id > 0);
//添加
var userId = _userRepository.Insert(new User() { Id = 1 });
//添加指定列
var userId2 = _userRepository.Insert(new User() { Id = 1 }, p => new { p.Id });
//批量添加
var userIds = _userRepository.Insert(new List<User>() { new User() { Id = 1 }, new User() { Id = 2 } });//修改
var isUpdate = _userRepository.Update(obj);
//修改指定列
var isUpdate7 = _userRepository.Update(obj, x => new { x.Name });
//修改指定条件数据
var isUpdate2 = _userRepository.Update(p => new User() { Name = "2" }, p => new { p.Id });
//根据条件更新 (实体,要修改的列,条件)
var isUpdate3 = _userRepository.Update(obj, x => new { x.Name }, x => new { x.Id });
//批量修改
var isUpdate4 = _userRepository.Update(new List<User>() { new User() { Id = 1 }, new User() { Id = 2 } });
//无实体更新
Dictionary<string, object> updateColumns = new Dictionary<string, object>
{{ "name", "2" }
};
var isUpdate5 = _userRepository.Update(updateColumns, x => new { x.Id });
//无实体更新2,先将值放在实体中,只更新要更新的值(实体内字段如果全部更新就不要带where条件,避免误传导致数值问题,有where必须由更新字段指定)
var user = new User() { Name = "2" };
var isUpdate6 = _userRepository.Update(user, x => new { x.Name }, x => new { x.Id });//添加或更新 单条或list集合
//根据主键添加或更新
var inserOrUpdate = _userRepository.InsertOrUpdate(new User() { Id = 1, Name ="admin" });
//根据条件添加或更新
var inserOrUpdate2 = _userRepository.InsertOrUpdate(new User() { Id = 1, Name= "admin" }, x => new { x.Id, x.Name });
//根据条件添加并更新指定列
var isInsertOrUpdate = _userRepository.InsertOrUpdate(user, x => new { xName }, x => new { x.Id, x.Name });//删除
var isDelete = _userRepository.Delete(obj);
//批量删除 有问题
var isDelete2 = _userRepository.Delete(new List<User>() { new User() { Id = 1 }, new User() { Id = 2 } });
//根据主键删除
var isDelete3 = _userRepository.DeleteByIds([1, 2]);//执行自定义sql
//查询
var list2 = _userRepository.SqlQuery("select * from test_user", null);
//查询到指定实体
var list3 = _userRepository.SqlQuery<User>("select * from test_user", null);
//执行增删改
var count2 = _userRepository.ExecuteSql("update test_user set name='a' where id=1", null);
//查询分页到指定实体
var page4 = _userRepository.SqlPageQuery<User>("select * from test_user", null, 1, 1);
var page4Count = page4.TotalCount;//执行事务 return true表示提交,return false表示回滚
var BeginTranRes = _userRepository.DbContextBeginTransaction(() =>
{_userRepository.Insert(new User() { Id = 1 });_userRepository.Insert(new User() { Id = 2 });return true;
});
3.4.2 原生使用方法
//也可以用原生方法var list = _userRepository.GetList(p => p.Id > 0);
//分页查询 (条件,排序,页码,每页条数)
int pgae = 1;
int pageSize = 10;
int totalCount = 0;
var page = _userRepository.AsQueryable().Where(p => p.Id > 0).OrderBy(o => o.d).ToPageList(pgae, pageSize, ref totalCount);
//分页查询 (条件,排序,排序方式,页码,每页条数)
var page2 = _userRepository.AsQueryable().Where(p => p.Id > 0).OrderBy(o => o.d, SqlSugar.OrderByType.Desc).ToPageList(pgae, pageSize, ref totalCount);
//分页排序
// 设置排序参数
List<OrderByModel> orderByModels = new List<OrderByModel>
{new OrderByModel() { FieldName = "CreateTime", OrderByType = OrderByType.Desc }, // 按 CreateTime 降序排序new OrderByModel() { FieldName = "Name", OrderByType = OrderByType.Asc } // 按 Name 升序排序
};
var page3 = _userRepository.AsQueryable().Where(p => p.Id > 0).OrderByorderByModels).ToPageList(pgae, pageSize, ref totalCount);
//判断数据是否存在
var isAny = _userRepository.AsQueryable().Any(p => p.Id == 1);
//获取数据总数
var count = _userRepository.AsQueryable().Count(p => p.Id > 0);
//添加
var user = new User() { Id = 1 };
var userId = _userRepository.InsertReturnIdentity(user);
//添加指定列
var userId2 = _userRepository.AsInsertable(user).InsertColumns(p => new { p.d }).ExecuteReturnIdentity();
//批量添加
_userRepository.AsInsertable(new List<User>() { new() { Id = 1 }, new() { Id = } });
//修改
var isUpdate = _userRepository.Update(user);
//修改指定列
var isUpdate2 = _userRepository.AsUpdateable(user).UpdateColumns(p => new User) { Name = "2" }).Where(p => p.Name == "test").ExecuteCommand();
//根据条件更新 (实体,要修改的列,条件)
var isUpdate3 = _userRepository.AsUpdateable(user).UpdateColumns(p => new User) { Name = "2" }).Where(p => p.Id == 1).ExecuteCommand();
//批量修改
_userRepository.AsUpdateable(new List<User>() { new() { Id = 1 }, new() { Id = } });
//删除
var isDelete = _userRepository.Delete(user);
//批量删除
_userRepository.Delete(new List<User>() { new() { Id = 1 }, new() { Id = } });
//根据主键删除
_userRepository.DeleteByIds(new dynamic[] { 1, 2 });
//执行自定义sql
//查询
var list2 = _userRepository.SqlSugarDbContext.SqlQueryable<User>("select * rom test_user");
//查询到指定实体
var list3 = _userRepository.SqlSugarDbContext.SqlQueryable<User>("select * rom test_user").ToList();
//执行增删改
var count2 = _userRepository.SqlSugarDbContextAdo.ExecuteCommand("update est_user set name='a' where id=1");
//事务
var tran = _userRepository.SqlSugarDbContext.AsTenant();
tran.BeginTran();
try
{_userRepository.Insert(new User() { Id = 1 });_userRepository.Insert(new User() { Id = 2 });tran.CommitTran();
}
catch (Exception)
{tran.RollbackTran();
}
相关文章:
SqlSugar简单使用之Nuget包封装-Easy.SqlSugar.Core
SqlSugar官方文档 Nuget包开源地址 Nuget包是为了简化SqlSugar的使用步骤,增加一些基础的使用封装 引入分为两个版本,一个Ioc模式,另一个是注入模式,如果不想影响原本的仓储代码推荐使用Ioc模式,两者区别不到,方法通…...
论文解读 | NeurIPS'24 Spotlight ChronoMagic-Bench 评估文本到视频生成的质变幅度评估基准...
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 袁盛海,北京大学硕士一年级学生 内容简介 本文提出了一种新颖的文本到视频(T2V)生成基准ChronoMagic-Bench࿰…...
12.1 LangChain数据处理流Data Connection深度解析:构建高效数据管道的五大核心组件
LangChain数据处理流Data Connection深度解析:构建高效数据管道的五大核心组件 一、Data Connection模块的战略定位 LangChain的Data Connection模块是大模型应用的数据中枢,其核心价值在于将非结构化数据转化为大模型可理解的语义知识。传统数据处理的三大痛点在此得到完美…...
文件基础IO
理解"文件" 1-1 狭义理解 文件在磁盘里磁盘是永久性存储介质,因此文件在磁盘上的存储是永久性的磁盘是外设(即是输出设备也是输入设备)磁盘上的文件 本质是对文件的所有操作,都是对外设的输入和输出简称IO 1-2 广义理…...
ASP.NET Core筛选器Filter
目录 什么是Filter? Exception Filter 实现 注意 ActionFilter 注意 案例:自动启用事务的筛选器 事务的使用 TransactionScopeFilter的使用 什么是Filter? 切面编程机制,在ASP.NET Core特定的位置执行我们自定义的代码。…...
Java 中的 Spring 框架,以及 Spring Boot 和 Spring Cloud 的区别?
Spring框架是一个开源的Java平台,主要用于简化企业级应用程序的开发。 它通过提供一系列的功能模块,帮助开发者解决常见的编程难题,从而提高开发效率和代码质量。 Spring框架的核心思想是“控制反转”(IoC)和“面向切…...
Rplayer:手机上的本地音乐播放智能之选
在众多本地音乐播放器中,Rplayer凭借其卓越的功能脱颖而出。它不仅能够精准识别本地下载的音乐文件,更以其智能化的设计为用户带来极致的便捷体验。 Rplayer的真正亮点在于其强大的自动扫描功能。与市面上其他播放器不同,Rplayer无需用户手动…...
vue2-插槽slot
文章目录 vue2-插槽slot1. 什么是slot2. slot分类2.1 默认插槽2.2 具名插槽2.3 作用域插槽 vue2-插槽slot 1. 什么是slot 在vue中,slot翻译为插槽,简单点说,就是在子组件内放置一个插槽,等待父组件在使用子组件的时候决定放什么…...
二级C语言题解:整数序列奇偶个数、拼接数字字符、数组取偶数并加小数点
目录 一、程序填空📝 --- 整数序列奇偶个数 题目📃 分析🧐 二、程序修改🛠️ --- 拼接数字字符 题目📃 分析🧐 三、程序设计 💻 --- 数组取偶数并加小数点 题目📃 分析&…...
VUE之组件通信(三)
1、$refs与$parent 1)概述: $refs用于:父——>子。$parent用于:子——>父。 2)原理如下: 属性说明$refs值为对象,包含所有被ref属性标识的DOM元素或组件实例。$parent值为对象&#x…...
Airflow:深入理解Apache Airflow Task
Apache Airflow是一个开源工作流管理平台,支持以编程方式编写、调度和监控工作流。由于其灵活性、可扩展性和强大的社区支持,它已迅速成为编排复杂数据管道的首选工具。在这篇博文中,我们将深入研究Apache Airflow 中的任务概念,探…...
【号码分离】从Excel表格、文本、word文档混乱文字中提取分离11位手机号出来,基于WPF的实现方案
应用场景 在市场调研过程中,可能会收集到大量的 Excel 表格、文本报告或 Word 文档,其中包含客户的联系方式。通过提取手机号,可以方便后续的市场推广和客户跟进。 当从不同渠道收集到的数据中包含混乱的文字信息时,需要从中提取…...
【分布式架构理论2】分布式架构要处理的问题及解决方案
文章目录 1. 应用服务拆分2. 分布式调用3. 分布式协同4. 分布式计算5. 分布式存储6. 分布式资源管理与调度7. 高性能与可用性优化8. 指标与监控 将分布式架构需要解决的问题按照顺序列举为如下几步 问题分类具体内容应用服务拆分分布式是用分散的服务和资源代替集中的服务和资…...
WPS计算机二级•幻灯片的输出、打印与分享
听说这是目录哦 打印界面讲解⭐所有页面 一键添加公司LOGO🌟将多张幻灯片 打印在一张纸🌠将PPT内容 以讲义形式打印出来☄️打印 黑白色的幻灯片🪐协作编辑模式🌈将PPT输出为图片💖能量站😚 打印界面讲解⭐…...
Java数据结构与算法之“树”
目录 一、什么是树 编辑 二、树的相关组成 1. 常用名词 2.需要了解的名词 三、树的分类 (一)初级树 1.普通树 2.二叉树 (二)中级树 1.哈夫曼树HuffmanTree 2.二叉搜索树BST 3.平衡二叉树AVL (三&#x…...
嵌入式八股文面试题(一)C语言部分
1. 变量/函数的声明和定义的区别? (1)变量 定义不仅告知编译器变量的类型和名字,还会分配内存空间。 int x 10; // 定义并初始化x int x; //同样是定义 声明只是告诉编译器变量的名字和类型,但并不为它分配内存空间…...
FPGA的IP核接口引脚含义-快解
疑问 手册繁琐,怎样快速了解IP核各输入输出接口引脚的含义。 答疑 不慌不慌,手册确实比较详细但繁琐,如何快速知晓该部分信息,涛tao道长给你们说,简单得很,一般新入门的道友有所不知,往往后面…...
Web3技术详解
Web3技术代表着互联网技术的最新进展,它致力于打造一个去中心化的互联网生态系统。以下是对Web3技术的详细解析: 一、Web3技术的核心概念 Web3是第三代互联网技术的代名词,代表着去中心化、区块链驱动和用户自有控制的理念。在Web3的世界中…...
计算机网络之物理层通信基础(电路交换、报文交换与分组交换)
一、电路交换 工作原理: 电路交换是在数据传输期间,源结点与目的结点之间建立一条由中间结点构成的专用物理连接线路,并在数据传输结束之前保持这条线路。整个报文的比特流连续地从源点直达终点,好像在一个管道中传送。 特点&am…...
Linux firewalld开启日志审计功能(2)
在Firewalld防火墙中启用和配置logdenied选项,记录被拒绝的数据包(等同于开启日志功能) 效果展示: 1.开启日志记录功能 firewall-cmd --set-log-deniedunicast #重新加载生效配置 firewall-cmd --reload 2.配置rsyslog捕获日志…...
线程池如何知道一个线程的任务已经执行完成
一、线程池内部任务执行状态监控 在线程池内部,当我们提交一个任务后,线程池会调度一个工作线程来执行该任务的run方法。确实,当run方法正常结束时,意味着任务已经完成。线程池中的工作线程是同步调用任务的run方法,并…...
09网络深入连贯篇(D1_彻底理解长连接 短连接(一))
目录 讲解一:长连接 & 短连接 一、初次见证长连接和短连接 1. 长连接 2. 短连接 二、如何区分当前连接是长连接还是短连接? 三、如何查询长连接和短连接? 四、那么长连接与短连接操作过程又是如何呢? 五、各自优缺点 …...
ElasticSearch学习笔记-解析JSON格式的内容
如果需要屏蔽其他项目对Elasticsearch的直接访问操作,统一由一个入口访问操作Elasticsearch,可以考虑直接传入JSON格式语句解析执行。 相关依赖包 <properties><elasticsearch.version>7.9.3</elasticsearch.version><elasticsea…...
网络计算机的五个组成部分
单个计算机是无法进行通信的。所以需要借助网络。 下面介绍一些在网络里常见的设备。 一、服务器 服务器是在网络环境中提供计算能力并运行软件应用程序的特定IT设备 它在网络中为其他客户机(如个人计算机、智能手机、ATM机等终端设备)提供计算或者应用…...
责任链模式(Chain Responsibility)
一、定义:属于行为型设计模式,包含传递的数据、创建处理的抽象和实现、创建链条、将数据传递给顶端节点; 二、UML图 三、实现 1、需要传递处理的数据类 import java.util.Date;/*** 需要处理的数据信息*/ public class RequestData {priva…...
在游戏本(6G显存)上本地部署Deepseek,运行一个14B大语言模型,并使用API访问
在游戏本6G显存上本地部署Deepseek,运行一个14B大语言模型,并使用API访问 环境说明环境准备下载lmstudio运行lmstudio 下载模型从huggingface.co下载模型 配置模型加载模型测试模型API启动API服务代码测试 deepseek在大语言模型上的进步确实不错…...
web-JSON Web Token-CTFHub
前言 在众多的CTF平台当中,作者认为CTFHub对于初学者来说,是入门平台的不二之选。CTFHub通过自己独特的技能树模块,可以帮助初学者来快速入门。具体请看官方介绍:CTFHub。 作者更新了CTFHub系列,希望小伙伴们多多支持…...
CTF-web: fs.readFileSync特殊利用
URL类 URL 类是 JavaScript 的内置类(或对象),它用于处理和解析 URL(统一资源定位符)。URL 是 Web API 的一部分,广泛应用于浏览器环境和 Node.js 中。 特性 构造函数: URL 类的构造函数可以接受一个 URL…...
深入探索 C++17 特征变量模板 (xxx_v)
文章目录 一、C++类型特征的前世今生二、C++17特征变量模板闪亮登场三、常见特征变量模板的实际应用(一)基本类型判断(二)指针与引用判断四、在模板元编程中的关键作用五、总结与展望在C++的持续演进中,C++17带来了许多令人眼前一亮的特性,其中特征变量模板(xxx_v)以其…...
时间序列分析(一)——基础概念篇
一、时间序列的相关概念 定义:时间序列是按时间顺序排列的一系列观测值,通常以固定间隔(如秒、天、年)记录。而时间序列分析是一种研究按时间顺序排列的数据点的统计方法,发现趋势、季节性波动、周期性和异常等模式&a…...
贪心与单调栈的艺术:从三道 LeetCode 题看最小字典序问题(316/402/1081)
前言 欢迎来到我的算法探索博客,在这里,我将通过解析精选的LeetCode题目,与您分享深刻的解题思路、多元化的解决方案以及宝贵的实战经验,旨在帮助每一位读者提升编程技能,领略算法之美。 👉更多高频有趣Lee…...
rabbitMQ消息转换器
消息转换器 Spring的消息发送代码接收的消息体是一个Object: 而在数据传输时,它会把你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象。 只不过,默认情况下Spring采用的序列化方式是J…...
力扣-字符串-541 反转字符串Ⅱ
思路 和《反转字符串》的代码类似,只是每次处理2k个 代码 class Solution { public:string reverseStr(string s, int k) {int length s.length();int reverse 0;while(reverse < length){int left, right;if(reverse k < length){left reverse, right…...
CSS(三)less一篇搞定
目录 一、less 1.1什么是less 1.2Less编译 1.3变量 1.4混合 1.5嵌套 1.6运算 1.7函数 1.8作用域 1.9注释与导入 一、less 1.1什么是less 我们写了这么久的CSS,里面有很多重复代码,包括通配颜色值、容器大小。那我们能否通过js声明变量来解决这些问题&…...
GT 接口时钟
每个 GT 接口需要几个时钟,包括一些共享时钟,这些时钟在位于一个或多个 GT quad 中的绑定 GT*_CHANNEL 单元之间共享。 UltraScale 器件提供高达 128 个 GT*_CHANNEL site 位置,这可能导致在设计中使用几百个时钟。大多数 GT 时钟具…...
算法日记13:SC41树状数组(区间修改)
一、题目: 二、题解: 在单点修改中,我们用t[i]来维护原数组2.1:在区间修改中,我们将维护原数组的差分数组 接下来,让我们来回顾一些差分的性质 此时,假设我们需要求 a 1 a 2 a 3 a 4 a1a2a3a4 a1a2a3a…...
【STM32】串口原理
单片机有自己的RX(接收端),TX(发送端),有的需要再共同接一个底线,为了保证有相同的参考电势,数据如果是高电平的话,发送过去也是高电平 1.轮询方式 CPU需要时刻注意发送…...
libdrm移植到arm设备
一、环境资源要求 下载libdrm Index of /libdrm 这边使用的是2.4.114版本,版本太高对meson版本要求也很高,为了省事用apt安装meson就不用太高版本了,1.x版本虽然使用makefile编译方便但是太老,对应用支持不太好。 https://dri…...
【PyTorch】解决Boolean value of Tensor with more than one value is ambiguous报错
理解并避免 PyTorch 中的 “Boolean value of Tensor with more than one value is ambiguous” 错误 在深度学习和数据科学领域,PyTorch 是一个强大的工具,它允许我们以直观和灵活的方式处理张量(Tensor)。然而,即使…...
CS 与 BS 架构的差异
在数字化的今天,选择软件架构模式对系统的性能、维护、安全和成本都有很大影响。BS架构和CS架构是最常见的两种模式,了解它们的区别和特点对开发人员和企业决策者都很重要。 CS架构最早出现,当时用户直接从主机获取数据。随着客户端和服务端…...
一款由 .NET 官方团队开源的电子商务系统 - eShop
项目介绍 eShop是一款由.NET官方开源的,基于.NET Aspire构建的用于参考学习的服务架构电子商务系统,旨在展示如何利用.NET框架及其相关技术栈构建一个现代化的电子商务网站。该项目采用服务架构,将应用程序分解为多个独立的服务,…...
项目顺利交付,几个关键阶段
年前离放假还有10天的时候,来了一个应急项目, 需要在放假前一天完成一个演示版本的项目,过年期间给甲方领导看。 本想的最后几天摸摸鱼,这么一来,非但摸鱼不了,还得加班。 还在虽然累,但也是…...
springboot简单应用
快速开发Springboot项目实现简单的增删改查,前期需要准备:idea与postman安装 Maven,MySQL(8),JDK(21) 目录 前言 springboot 使用3.0版本,JDK使用21,MySQL使用8版本 开发环境IDEA使用2024版本 …...
lock 和 synchronized 区别
一、功能 Lock和Synchronized都是Java中用来解决线程安全问题的工具,它们能够确保多个线程在访问共享资源时的正确性和一致性。 二、特性 基本定义与实现: Synchronized是Java中的一个同步关键字,由JVM实现。Lock是Java中的一个接口&#x…...
inquirer介绍及配合lerna在Vue中使用示例
目录 安装基本用法使用多个提示框动态选择(动态选项)表单式输入配合lerna在Vue中使用示例 Inquirer 是一个用于创建交互式命令行工具的 Node.js 库,常用于收集用户输入。它提供了多种类型的提示框,可以用于创建交互式应用程序&…...
System类
作用:有标准输入、标准输出和错误输出流,对外部定义的属性和环境变量的访问,加载文件和库的方法,还有快速复制数组的一部分的实用方法 java.lang.Object继承者 java.lang.System字段摘要 主要常用的是方法 构造方法摘要 Syste…...
MySQL时间类型相关总结(DATETIME, TIMESTAMP, DATE, TIME, YEAR)
MySQL时间类型相关总结(DATETIME, TIMESTAMP, DATE, TIME, YEAR) MySQL官方文档: https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html 一. 对比: 在 MySQL 中,处理时间相关的数据类型主要有以下几种:DATE、TIME、…...
为什么会有函数调用参数带标签的写法?Swift函数调用的参数传递需要加前缀是否是冗余?函数调用?函数参数?
为什么会有函数调用参数带标签的写法? ObjC函数参数形式与众不同,实参前会加前缀,尤其参数很多的情况,可读性很强。例如: [person setAge: 29 setSex:1 setClass: 35]; 这种参数前面加前缀描述也被叫标签(Label). 注意࿰…...
Macos安装APOC拓展库
文章目录 说明错误提示原因分析解决方法 说明 Macos安装APOC核心库 错误提示 There is no procedure with the name apoc.generate.ba registered for this database instance. Please ensure youve spelled the procedure name correctly and that the procedure is prope…...
用NeuralProphet预测股价:AI金融新利器(附源码)
作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话:我用NeuralProphet模型预测了股票价格,发现其通过结合时间序列分析和神经网络算法,确实能提供比传统Last Value方法更精准的预测。经过一系列超参数调优…...