系列文章目录

第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增删改操作相关推荐

  1. dom对html增删改操作,6.DOM对HTML元素的增删改操作

    节点的增删改操作 function createNode(){ //创建一个li元素 var li = document.createElement("li"); li.inner ...

  2. MySQL——数据库的增删改操作

    数据库的增删改操作 数据库的增操作 数据库的增操作主要涉及数据库的增加.数据表的增加.表记录增加以及表字段增加等.数据库的增加非常简单,就是新创建一个数据库:表记录的增加指的就是新增表的数据行,可以是 ...

  3. Oracle 原理: 视图,对视图进行增删改操作

    Oracle的视图和SQLServer的视图基本一样. 视图,是一个虚拟的表,不会给视图分配存储空间.视图的建立需要依赖于单个或多个普通表,被依赖的普通表就成为"基表".可以就像 ...

  4. PHP操作MySQL数据库(连接、增删改操作)

    MySQL 是跟 PHP 配套使用的最流行的开源数据库系统,我们知道MySQL是PHP的最佳搭档,下面是系统的总结PHP与MySQL联合使用的方法.主要是使用MySQL扩展,下面就通过归纳总结来提升. ...

  5. 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式

    一. 背景 说起EF的增删改操作,相信很多人都会说,有两种方式:① 通过方法操作  和  ② 通过状态控制. 相信你在使用EF进行删除或修改操作的时候,可能会遇到以下错误:" The obj ...

  6. Oracle数据库的增删改操作介绍

    前面的博文介绍了Oracle的简单查询操作,博客地址:http://blog.csdn.net/weixin_36380516/article/details/65935879 这里再对Oracle的 ...

  7. mysql 编辑数据库内容_详解mysql数据库增删改操作

    插入数据 insert into 表名(列名1,列名2,列名3) values(值1,值2,值3); insert into user(user_id,name,age) values(1,'nice ...

  8. 20190602:JDBC的增删改操作实践

    实现JDBC的增删改操作 JDBC的增删改操作 测试 JDBC的增删改操作 首先紧接昨天的JDBC的第一个程序,进行简单的修改即可做到增删改操作: public void insert_test() ...

  9. Java连接数据库通用的增删改操作

    通用增删改的写法: ①获取数据库的连接 ②预编译sql语句,返回PreparedStatement的实例 ③填充占位符 ④执行 ⑤资源的关闭 注:这里的数据库连接以及资源的关闭的方法封装到了Utils ...

最新文章

  1. 生成打印条码_条码打印软件如何生成跳号条形码
  2. 在DataGireView中加筛选条件
  3. MATLAB-数据类型
  4. nacos 本地测试_一文详解 Nacos 高可用特性
  5. python xpath爬虫_Python爬虫(2):XPath语法
  6. 设定自动获得DNS服务器地址
  7. android 图片传递,如何使用包在Android活动之间传递图像(位图)?
  8. 深入理解RocketMQ是如何做到高性能的?
  9. 【Guava】对Guava类库的注释类型 VisibleForTesting的理解
  10. openCV实现车牌号识别
  11. 安卓调试工具 adb 命令大全
  12. java写的国有资产管理系统
  13. java爬虫爬取京东_java爬虫练习|爬取京东上的手机商品数据
  14. 经验分享 | STM32CubeMX + STM32F1系列开发时遇到的四个问题及解决方案分享
  15. 常见鸟的种类及特点_鸟的分类
  16. java学习笔记——springmvc 之 数据自定义转换器 数据格式化 JSR303数据校验返回与接收JSON(@RequestBody 和 @ResponseBody)
  17. abb机器人负载配置设定_ABB机器人【-配置设定】大全---人手一份-建议永久收藏!...
  18. Mongodb的可视化工具 Robomongo 的操作使用
  19. 【校招】面试_字节跳动_客户端开发工程师_二面
  20. C++ 模板类的继承

热门文章

  1. [QT]2022.4.30 信号和槽的小玩意儿
  2. Pulsar简介及Pulsar部署、原理和使用介绍
  3. python 泰森多边形边界_泰森多边形voronoi以及delaunay基本知识,python实现代码待补充...
  4. Python经典书籍有哪些?这份书单送给你_黑马程序员
  5. protell99se DRC检查提示Short Circuit Constraint问题
  6. Instagram 为什么不用redis
  7. 5个月的ui设计培训,都学习什么内容?
  8. Android Git 拉取代码报错:error: cannot pull with rebase: Your index contains uncommitted changes.
  9. It从业人员的“职业道德”问题
  10. ping网络延时大怎么解决?