更新

HiSql数据更新

HiSql 提供了好几种数据更新的方式下面一一介绍一下

如果你的表中增加了这四个字段

字段 描述 类型
CreateTime 创建时间 DateTime
CreateName 创建人 nvarchar
ModiTime 修改时间 DateTime
ModiName 修改人 nvarchar

那么在向表插入数据时HiSql自动会对CreateTimeModiTime 赋上当前日期,给CreateNameModiName 赋上连接创建时指定的User的值 (可以将登陆的用户名赋全它),不需要开发人员去赋值。

当更新该表时会自动更新ModiTimeModiName

指定主键更新

匿名类数据更新

用匿名类的方式用一个特别好的地方就是你要更新哪些字段就写上哪些字段的值,

但要注意的是匿名内中如果要更新的表有主键那么必须包含主键否则无法更新。

::: tip

实体类的字段列名称要与数据库中对应至少要一个字段要对应不然HiSql将会抛出异常

HiSql允许更新对象列集合大于数据库中的列集合(只取有效的字段)

字段名称忽略大小写

:::

特别注意:以下方式更新不需要带更新条件,因为HiSql会自动识别主键条件

sqlClient.Update("HTest01", new { sid = 123456, UName = "tansar", Age = 25, Salary = 1999.9, Descript = "hello world" }).ExecCommand();

HTest01 中有上面讲到的四个标准字段,虽然没有设置修改日期和修改人 但HiSql底层会自动生成,请看以下生成的SQL代码(SQLSERVER为例)

update [dbo].[HTest01] set [SID]=123456,[UName]='tansar',[Age]=25,[Salary]=1999.9,[Descript]='hello world',[ModiTime]='2022-01-11 20:04:51.725',[ModiName]='Hone' where [SID]=123456

也许一看以上生成的SQL就明白了HiSql的解析原理了字段SID是主键,ModiTimeModiName 是自动加上去的

匿名类批量更新

通过该方式更新时是生成多条更新语句执行

特别注意:以下方式更新不需要带更新条件,因为HiSql会自动识别主键条件


List<object> lstdata = new List<object>()
{
new{ sid =123456, UName ="tansar", Age =25, Salary =1999.9, Descript ="hello world"},
new{ sid =123457, UName ="tansar2", Age =25, Salary =1999.9, Descript ="hello world"}
}; int v=sqlClient.Update("HTest01", lstdata).ExecCommand();

更新指定字段

指定更新字段可以用方法Only(params string[] fields) 如果有多个字估请参数Only("UName","Descript")

sqlClient.Update("HTest01", new { sid = 123456, UName = "tansar", Age = 25, Salary = 1999.9, Descript = "测试只更新此字段" }).Only("Descript").ExecCommand();

根据以上代码只会更新字段 Descript 但该表有标准字段同时也会更新ModiTimeModiName

生成的SQL如下(sqlserver为例)

update [dbo].[HTest01] set [Descript]='测试只更新此字段',[ModiTime]='2022-01-12 14:13:40.438',[ModiName]='Hone' where [SID]=123456

排除更新字段

指定排除更新字段可以用方法Exclude(params string[] fields) 如果有多个字估请参数Exclude("UName","Descript")

sqlClient.Update("HTest01", new { sid = 123456, UName = "tansar", Age = 25, Salary = 1999.9, Descript = "测试只不更新此字段" }).Exclude("Descript").ExecCommand();

根据以上代码除了字段 Descript 其它的值都会更新, 该表有标准字段同时也会更新ModiTimeModiName

生成的SQL如下(sqlserver为例)

update [dbo].[HTest01] set [UName]='tansar',[Age]=25,[Salary]=1999.9,[ModiTime]='2022-01-12 14:24:08.624',[ModiName]='Hone' where [SID]=123456

字典更新

字典可以是new Dictionary<string, object> 也可以是new Dictionary<string, string>

var dicobj = new Dictionary<string, object> { { "SID", 123456 }, { "UName", "tansar" }, { "Age", 25 }, { "Salary", 1999.9 }, { "descript", "hello world" } };
sqlClient.Update("HTest01", dicobj).ExecCommand();

生成的SQL如下(sqlserver为例)

update [dbo].[HTest01] set [SID]=123456,[UName]='tansar',[Age]=25,[Salary]=1999.9 where [SID]=123456

批量字典更新

批量字典更新其实与批量匿名类更新使用方式基本一致的

List<Dictionary<string, object>> lstdata = new List<Dictionary<string, object>> {
new Dictionary<string, object> { { "SID", 123456 }, { "UName", "tansar" }, { "Age", 25 }, { "Salary", 1999.9 }, { "descript", "hello world" } },
new Dictionary<string, object> { { "SID", 123457 }, { "UName", "tansar" }, { "Age", 25 }, { "Salary", 1999.9 }, { "descript", "hello world" } }
}; sqlClient.Update("HTest01", lstdata).ExecCommand();

::: tip

实体类的更新与匿名类基本是一致的,这里就不重复写了,排除更新和指定更新与匿名类的写法是一模一样也不再重复写样例

:::

按条件更新

通过结构化WHERE更新

关于where 的写法更多的样例请参照hisql ORM 查询语句使用教程文档

int v= sqlClient.Update("HTest01").Set(new { UName = "TEST" }).Where(new Filter { { "SID", OperType.EQ, 123456 } }).ExecCommand();

生的成SQL语句如下(sqlserver为例)

update [dbo].[HTest01] set [UName]='TEST',[ModiTime]='2022-01-12 15:10:28.184',[ModiName]='tansar' where [HTest01].[SID] = 123456

通过HiSql语法更新

关于HiSql 的写法更多的样例请参照 hisql ORM 查询语句使用教程文档

int v = sqlClient.Update("HTest01").Set(new { UName = "TEST" }).Where("SID=123456").ExecCommand();

生的成SQL语句如下(sqlserver为例)

update [dbo].[HTest01] set [UName]='TEST',[ModiTime]='2022-01-12 15:15:04.695',[ModiName]='tansar' where [HTest01].[SID] = 123456

字段表达式

平常业务可能会有这种场景将数据库中的某一个字段自长1或加一个指定的值如下例所示

int v = sqlClient.Update("HTest01", new { SID = 123456, Salary = "`Salary`+1" }).ExecCommand();

生的成SQL语句如下(sqlserver为例)

update [dbo].[HTest01] set [SID]=123456,[Salary]=[Salary]+1,[ModiTime]='2022-01-12 15:23:48.626',[ModiName]='Hone' where [SID]=123456

hisql orm update表数据更新文档的更多相关文章

  1. 利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

  2. arclistsg独立单表模型文档列表

    arclistsg独立单表模型文档列表 (DedeCMS > 5.3) 名称:arclistsg 功能:类似arclist标签,获取指定单表模型(例如:分类信息),指定栏目,指定排序及呈现样式的 ...

  3. 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档

    对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...

  4. 数据库表结构文档查看器 基于netcore

    前言 日常开发业务代码,新接手一块不熟悉的业务时需要频繁的查看对应业务的数据库表设计文档.相比于直接翻看业务代码,有必要提供一个数据库表结构文档查看器来解决这些繁琐的问题. CML.SqlDoc CM ...

  5. [ovs] 编写openflow流表的文档指引

    首先,openflow流表都是使用ovs-ofctl命令进行添加的. 1. 看 ovs-ofctl 的man手册 man ovs-ofctl 或者,这个地方也有:http://www.openvswi ...

  6. sqlserver生成表结构文档的方法

    只说原理了,具体 可以自己使用程序去生成htm或word文档. 1.首先获取所有的表 SELECT name, id From sysobjects WHERE xtype = 'u' ORDER B ...

  7. 读取数据库信息并生成表设计文档Word版本

    1.参考C#代码 using Help.DBAccessLayer.Business; using Help.DBAccessLayer.Model.SqlGenerator; using Newto ...

  8. MongoDB小结12 - update【多文档更新】

    当一次更新一个文档无法满足我们的脚步时,我们可以选择一次更新多个文档,及在update的第四个参数的位置添上true,及做多文档更新,建议就算不做多文档更新也显式的在第四个参数上置false,这样明确 ...

  9. ES 26 - 通过partial update局部更新索引文档 (partial update增量修改原理)

    目录 1 什么是partial update 1.1 全量修改文档的原理 1.2 修改指定field的思路 1.3 partial update的优势 1.4 partial update的使用 2 ...

随机推荐

  1. 丈量你的代码,从cloc开始

    如果我想统计我当前的项目有多少代码量?行数最高的代码文件有哪些?并且排除某些目录,怎么统计?要统计出注释多少行,和代码多少行?使用cloc就行. cloc是一款使用Perl语言开发的开源代码统计工具, ...

  2. Blazor Webassembly多标签页实现非iframe的实现

    前面用iframe实现了多标签页,这次是不用iframe实现的多标签页.参考了一下Ant Design Blazor. 基本功能已经都实现了不论是标签滚动.激活.左移.右移.关闭其他,还是在内容页跳转 ...

  3. 解决iwrite无法粘贴问题

    使用iwrite写作的时候,会遇到系统禁止粘贴的障碍 按F12键,再按F1键,在Disable JavaScrip前面的方框里打上勾就可以愉快的粘贴了

  4. java 数据类型:集合接口Collection之常用ArrayList;lambda表达式遍历;iterator遍历;forEachRemaining遍历;增强for遍历;removeIf批量操作集合元素(Predicate);

    java.util.Collection接口 Java的集合主要由两个接口派生出来,一个是Collection一个是Map,本章只记录Collection常用集合 集合只能存储引用类型数据,不能存储基 ...

  5. 【进阶】uniapp复现微信相册功能之【图视频编辑 + 压缩】

    基于uniapp + vue实现微信相册,在实现了微信相册的基础上增加以下功能 1: 图片编辑 2: 视频编辑 3: 文件压缩 技术实现 开发环境:HbuilderX + nodejs 技术框架:un ...

  6. UEditor富文本判断是否输入内容

    <textarea name="CONTENT" id="CONTENT" maxlength="4000" style=" ...

  7. UDP&串口调试助手用法(2)

    通道的是创建.删除.编辑.链接.断开 通道创建 通道删除 先选择要删除的通道,再点击删除通道即可 通道参数编辑 双击创建的通道 即可编辑通道 通道链接 通道创建成功,提示 点击链接即可链接通道 通道断 ...

  8. CMAKE为项目输出名添加后缀

    概述 本文将介绍cmake配置动态库和可执行程序两种,使用cmake为其添加Debug和Release配置下的后缀 动态库 下面将介绍使用CMAKE_DEBUG_POSTFIX和CMAKE_RELEA ...

  9. 【LeetCode】 Binary Tree Zigzag Level Order Traversal 解题报告

    Binary Tree Zigzag Level Order Traversal [LeetCode] https://leetcode.com/problems/binary-tree-zigzag ...

  10. 写在LeetCode刷题600题

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 从2015年9月刷题至今,我终于在LeetCode刷够600道题了.从刚开始的Java语 ...