SqlSugar增删改操作
系列文章目录
第1章 SqlSugar-表到实体、实体到表及库表操作
第2章 SqlSugar增删改操作
第3章 SqlSugar查询操作
文章目录
- 系列文章目录
- 一、环境准备
- 二、增
- 2.1、插入单条
- 2.2、字典插入
- 2.3、批量插入
- 三、删
- 3.1、单个实体删除
- 3.2、删除集合
- 3.3、根据字典集合删除
- 四、改
- 4.1、准备数据
- 4.2、单条更新
- 4.3、批量更新
- 4.4、条件更新
- 4.5、根据字典更新
- 五、增或改
- 5.1、不存在就插入,存在就修改
- 5.2、批量操作---存在更新 不存在插入
- 5.3、大数据量插入或更新
- 5.4、根据字典插入或更新
一、环境准备
ConnectionConfig connectionConfig = new ConnectionConfig()
{ConnectionString = CustomConnectionConfig.ConnectionString001,IsAutoCloseConnection = true,DbType = DbType.SqlServer
};Student student = new Student()
{Name = "返回自增列",SchoolId = 1,CreateTime = DateTime.Now
};using (SqlSugarClient db = new SqlSugarClient(connectionConfig))
{db.CodeFirst.InitTables(typeof(Snowflake));db.CodeFirst.InitTables(typeof(Student));
}
二、增
2.1、插入单条
//插入返回自增列 (实体除ORACLE外实体要配置自增,Oracle需要配置序列)
int idPk = db.Insertable(student).ExecuteReturnIdentity();
2.2、字典插入
Dictionary<string, object> dc = new Dictionary<string, object>();
dc.Add("StudentName", "字典插入"); //不能写实体中的属性名,必须和数据库保持一致
dc.Add("SchoolId", 23);
dc.Add("CreateTime", DateTime.Now);
db.Insertable(dc).AS("dbstudent").ExecuteCommand();
2.3、批量插入
db.Deleteable<Student>().ExecuteCommand();
List<Student> addlist = new List<Student>();
for (int i = 0; i < 100; i++)
{addlist.Add(new Student(){Name = $"Name_{i}",SchoolId = i,CreateTime = DateTime.Now});
}
//(1)、非参数化插入(防注入)
//优点:综合性能比较平均,列少1万条也不慢,属于万写法,不加事务情况下部分库有失败回滚机质
//缺点:数据量超过5万以上占用内存会比较大些,内存小可以用下面2种方式处理
db.Insertable(addlist).ExecuteCommand();//(2)、使用参数化内部分页插入
//优点:500条以下速度最快,兼容所有类型和emoji,10万以上的大数据也能跑,就是慢些,内部分批量处理过了。
//缺点:500以上就开始慢了,要加事务才能回滚
db.Insertable(addlist).UseParameter().ExecuteCommand();//5.0.3.8-Preview及以上版本支持(NUGET搜索勾上包括预览)//(3)、大数据写入(特色功能:大数据处理上比所有框架都要快30%)
//优点:1000条以上性能无敌手
//缺点:不支持数据库默认值, API功能简单, 小数据量并发执行不如普通插入,插入数据越大越适合用这个
//新功能 5.0.44
db.Fastest<Student>().PageSize(100000).BulkCopy(addlist);
三、删
3.1、单个实体删除
{db.Deleteable<StudentInfo>().Where(new StudentInfo() { Id = 1 }).ExecuteCommand();}
3.2、删除集合
List<StudentInfo> list = new List<StudentInfo>()
{new StudentInfo() { Id = 2 },new StudentInfo() { Id = 3 }
};
db.Deleteable<StudentInfo>(list).ExecuteCommandHasChange(); //批量删除
3.3、根据字典集合删除
Dictionary<string, object> parameter = new Dictionary<string, object>();
parameter.Add("Id", 15);
List<Dictionary<string, object>> dic = new List<Dictionary<string, object>>()
{parameter
};db.Deleteable<object>().AS("[StudentInfo]").WhereColumns(dic).ExecuteCommand();
四、改
4.1、准备数据
db.CodeFirst.InitTables(typeof(Student));//初始化一条数据测试使用db.Insertable<Student>(new Student(){CreateTime = DateTime.Now,Name = "测试数据",SchoolId = 1,}).ExecuteCommand();
{ //输出Sql语句db.Aop.OnLogExecuting = (s, p) =>{Console.WriteLine("----------------------------");Console.WriteLine($"Sql语句:{s}");};
}
4.2、单条更新
student.CreateTime = DateTime.Now;
db.Updateable<Student>(student).ExecuteCommand(); //右标题1 下面的所有菜单
4.3、批量更新
List<Student> list = db.Queryable<Student>().Take(20).ToList();
foreach (var item in list)
{item.Name = "New Name" + DateTime.Now;
}
db.Updateable(list).ExecuteCommand();
或:
db.Deleteable<Student>().ExecuteCommand();//删除所有数据
List<Student> addlist = new List<Student>();
for (int i = 0; i < 1000000; i++)
{addlist.Add(new Student(){CreateTime = DateTime.Now,Name = "Richard" + i,SchoolId = i});
}
初始化1000000条数据到数据库
db.Fastest<Student>().BulkCopy(addlist);//大数据量BulkUpdate操作--高性能,6s
{foreach (var item in addlist){item.Name = $"批量修改第二次=BulkUpdate方式";}Console.WriteLine("大数据量操作-BulkUpdate方式批量修改1000000条数据开始计时~~");Stopwatch stopwatch = new Stopwatch();stopwatch.Start();db.Fastest<Student>().BulkUpdate(addlist);stopwatch.Stop();Console.WriteLine($"批量修改1000000条数据共:{stopwatch.ElapsedMilliseconds} ms");
}
4.4、条件更新
{//如果是集合操作请更新到5.0.4版本之前版本禁止使用, 并且只有部分库支持Student studentUp = db.Queryable<Student>().First();studentUp.Name = "条件更新";var result = db.Updateable(studentUp).Where(it => it.Id == 5).ExecuteCommand();
}
4.5、根据字典更新
{//字典Dictionary<string, object> dt = new Dictionary<string, object>();dt.Add("id", 10);dt.Add("StudentName", "字典更新");dt.Add("createTime", DateTime.Now);var tResult = db.Updateable(dt).AS("dbstudent").WhereColumns("id").ExecuteCommand();//字典集合var dtList = new List<Dictionary<string, object>>();dtList.Add(dt);var t666 = db.Updateable(dtList).AS("dbstudent").WhereColumns("id").ExecuteCommand();
}
五、增或改
5.1、不存在就插入,存在就修改
StudentInfo studentInfo = new StudentInfo()
{Id = 31,Name = "新增的数据",CreateTime = DateTime.Now,Isdeleted = false,SchoolId = 0,
};
//新功能 5.0.6.2+
//存在更新 不存在插入 (默认是主键)
db.Storageable(studentInfo).ExecuteCommand();//新版才支持
studentInfo.Name = "数据已存在就修改";
db.Storageable(studentInfo).ExecuteCommand();//新版才支持
5.2、批量操作—存在更新 不存在插入
List<StudentInfo> addlist = new List<StudentInfo>();
for (int i = 0; i < 20; i++)
{addlist.Add(new StudentInfo(){Id = i + 1,CreateTime = DateTime.Now,Isdeleted = false,Name = $"名称_{i + 1}",SchoolId = i + 1,});
}
db.Storageable<StudentInfo>(addlist).ExecuteCommand();
foreach (var item in addlist)
{item.Name = $"批量修改";
}
db.Storageable<StudentInfo>(addlist).ExecuteCommand();
5.3、大数据量插入或更新
//对于性能要求高,数据量大的可以这么操作,适合1万以上数据处理
{db.Deleteable<StudentInfo>().ExecuteCommand(); //删除所有数据var addlist = new List<StudentInfo>();for (int i = 0; i < 100000; i++){addlist.Add(new StudentInfo(){Id = i + 1,CreateTime = DateTime.Now,Isdeleted = false,Name = $"名称_{i + 1}",SchoolId = i + 1,});}StorageableResult<StudentInfo> storageableResult = db.Storageable<StudentInfo>(addlist).ToStorage();storageableResult.BulkCopy();
}
5.4、根据字典插入或更新
{db.Deleteable<StudentInfo>().ExecuteCommand();List<Dictionary<string, object>> dictionaryList = new List<Dictionary<string, object>>();Dictionary<string, object> dic = new Dictionary<string, object>();dic.Add("Id", 2);dic.Add("SchoolId", 2);dic.Add("Name", "字典用法");dic.Add("CreateTime", DateTime.Now);dic.Add("Isdeleted", 1);dictionaryList.Add(dic);DataTableResult tableResult = db.Storageable(dictionaryList, "StudentInfo").WhereColumns("id").ToStorage();//id作为主键tableResult.AsInsertable.ExecuteCommand();//如果是自增要添加IgnoreColumnsdictionaryList[0]["Name"] = "修改名称了";DataTableResult tableResult1 = db.Storageable(dictionaryList, "StudentInfo").WhereColumns("id").ToStorage();//id作为主键tableResult1.AsUpdateable.ExecuteCommand();
}
SqlSugar增删改操作相关推荐
- dom对html增删改操作,6.DOM对HTML元素的增删改操作
节点的增删改操作 function createNode(){ //创建一个li元素 var li = document.createElement("li"); li.inner ...
- MySQL——数据库的增删改操作
数据库的增删改操作 数据库的增操作 数据库的增操作主要涉及数据库的增加.数据表的增加.表记录增加以及表字段增加等.数据库的增加非常简单,就是新创建一个数据库:表记录的增加指的就是新增表的数据行,可以是 ...
- Oracle 原理: 视图,对视图进行增删改操作
Oracle的视图和SQLServer的视图基本一样. 视图,是一个虚拟的表,不会给视图分配存储空间.视图的建立需要依赖于单个或多个普通表,被依赖的普通表就成为"基表".可以就像 ...
- PHP操作MySQL数据库(连接、增删改操作)
MySQL 是跟 PHP 配套使用的最流行的开源数据库系统,我们知道MySQL是PHP的最佳搭档,下面是系统的总结PHP与MySQL联合使用的方法.主要是使用MySQL扩展,下面就通过归纳总结来提升. ...
- 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式
一. 背景 说起EF的增删改操作,相信很多人都会说,有两种方式:① 通过方法操作 和 ② 通过状态控制. 相信你在使用EF进行删除或修改操作的时候,可能会遇到以下错误:" The obj ...
- Oracle数据库的增删改操作介绍
前面的博文介绍了Oracle的简单查询操作,博客地址:http://blog.csdn.net/weixin_36380516/article/details/65935879 这里再对Oracle的 ...
- mysql 编辑数据库内容_详解mysql数据库增删改操作
插入数据 insert into 表名(列名1,列名2,列名3) values(值1,值2,值3); insert into user(user_id,name,age) values(1,'nice ...
- 20190602:JDBC的增删改操作实践
实现JDBC的增删改操作 JDBC的增删改操作 测试 JDBC的增删改操作 首先紧接昨天的JDBC的第一个程序,进行简单的修改即可做到增删改操作: public void insert_test() ...
- Java连接数据库通用的增删改操作
通用增删改的写法: ①获取数据库的连接 ②预编译sql语句,返回PreparedStatement的实例 ③填充占位符 ④执行 ⑤资源的关闭 注:这里的数据库连接以及资源的关闭的方法封装到了Utils ...
最新文章
- 生成打印条码_条码打印软件如何生成跳号条形码
- 在DataGireView中加筛选条件
- MATLAB-数据类型
- nacos 本地测试_一文详解 Nacos 高可用特性
- python xpath爬虫_Python爬虫(2):XPath语法
- 设定自动获得DNS服务器地址
- android 图片传递,如何使用包在Android活动之间传递图像(位图)?
- 深入理解RocketMQ是如何做到高性能的?
- 【Guava】对Guava类库的注释类型 VisibleForTesting的理解
- openCV实现车牌号识别
- 安卓调试工具 adb 命令大全
- java写的国有资产管理系统
- java爬虫爬取京东_java爬虫练习|爬取京东上的手机商品数据
- 经验分享 | STM32CubeMX + STM32F1系列开发时遇到的四个问题及解决方案分享
- 常见鸟的种类及特点_鸟的分类
- java学习笔记——springmvc 之 数据自定义转换器 数据格式化 JSR303数据校验返回与接收JSON(@RequestBody 和 @ResponseBody)
- abb机器人负载配置设定_ABB机器人【-配置设定】大全---人手一份-建议永久收藏!...
- Mongodb的可视化工具 Robomongo 的操作使用
- 【校招】面试_字节跳动_客户端开发工程师_二面
- C++ 模板类的继承
热门文章
- [QT]2022.4.30 信号和槽的小玩意儿
- Pulsar简介及Pulsar部署、原理和使用介绍
- python 泰森多边形边界_泰森多边形voronoi以及delaunay基本知识,python实现代码待补充...
- Python经典书籍有哪些?这份书单送给你_黑马程序员
- protell99se DRC检查提示Short Circuit Constraint问题
- Instagram 为什么不用redis
- 5个月的ui设计培训,都学习什么内容?
- Android Git 拉取代码报错:error: cannot pull with rebase: Your index contains uncommitted changes.
- It从业人员的“职业道德”问题
- ping网络延时大怎么解决?