hisql orm update表数据更新文档
更新
HiSql数据更新
HiSql 提供了好几种数据更新的方式下面一一介绍一下
如果你的表中增加了这四个字段
字段 | 描述 | 类型 |
---|---|---|
CreateTime |
创建时间 |
DateTime |
CreateName |
创建人 |
nvarchar |
ModiTime |
修改时间 |
DateTime |
ModiName |
修改人 |
nvarchar |
那么在向表插入数据时HiSql自动会对CreateTime
和ModiTime
赋上当前日期,给CreateName
和ModiName
赋上连接创建时指定的User
的值 (可以将登陆的用户名赋全它),不需要开发人员去赋值。
当更新该表时会自动更新ModiTime
和 ModiName
。
指定主键更新
匿名类数据更新
用匿名类的方式用一个特别好的地方就是你要更新哪些字段就写上哪些字段的值,
但要注意的是匿名内中如果要更新的表有主键那么必须包含主键否则无法更新。
::: 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
是主键,ModiTime
和ModiName
是自动加上去的
匿名类批量更新
通过该方式更新时是生成多条更新语句执行
特别注意:以下方式更新不需要带更新条件,因为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
但该表有标准字段同时也会更新ModiTime
和ModiName
生成的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
其它的值都会更新, 该表有标准字段同时也会更新ModiTime
和ModiName
生成的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表数据更新文档的更多相关文章
- 利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
- arclistsg独立单表模型文档列表
arclistsg独立单表模型文档列表 (DedeCMS > 5.3) 名称:arclistsg 功能:类似arclist标签,获取指定单表模型(例如:分类信息),指定栏目,指定排序及呈现样式的 ...
- 【工具篇】利用DBExportDoc V1.0 For MySQL自动生成数据库表结构文档
对于DBA或开发来说,如何规范化你的数据库表结构文档是灰常之重要的一件事情.但是当你的库,你的表排山倒海滴多的时候,你就会很头疼了. 推荐一款工具DBExportDoc V1.0 For MySQL( ...
- 数据库表结构文档查看器 基于netcore
前言 日常开发业务代码,新接手一块不熟悉的业务时需要频繁的查看对应业务的数据库表设计文档.相比于直接翻看业务代码,有必要提供一个数据库表结构文档查看器来解决这些繁琐的问题. CML.SqlDoc CM ...
- [ovs] 编写openflow流表的文档指引
首先,openflow流表都是使用ovs-ofctl命令进行添加的. 1. 看 ovs-ofctl 的man手册 man ovs-ofctl 或者,这个地方也有:http://www.openvswi ...
- sqlserver生成表结构文档的方法
只说原理了,具体 可以自己使用程序去生成htm或word文档. 1.首先获取所有的表 SELECT name, id From sysobjects WHERE xtype = 'u' ORDER B ...
- 读取数据库信息并生成表设计文档Word版本
1.参考C#代码 using Help.DBAccessLayer.Business; using Help.DBAccessLayer.Model.SqlGenerator; using Newto ...
- MongoDB小结12 - update【多文档更新】
当一次更新一个文档无法满足我们的脚步时,我们可以选择一次更新多个文档,及在update的第四个参数的位置添上true,及做多文档更新,建议就算不做多文档更新也显式的在第四个参数上置false,这样明确 ...
- ES 26 - 通过partial update局部更新索引文档 (partial update增量修改原理)
目录 1 什么是partial update 1.1 全量修改文档的原理 1.2 修改指定field的思路 1.3 partial update的优势 1.4 partial update的使用 2 ...
随机推荐
- 『学了就忘』Linux系统管理 — 82、Linux中进程的查看(ps命令)
目录 1.ps命令介绍 2.ps aux命令示例 3.ps -le命令示例 4.pstree命令 1.ps命令介绍 ps命令是用来静态显示系统中进程的命令. 不过这个命令有些特殊,它部分命令的选项前不 ...
- 当是class com.cosl.po.Pc$$EnhancerByCGLIB$$38c58f03时,反射属性都他妈不好用了
当是class com.cosl.po.Pc$$EnhancerByCGLIB$$38c58f03时,反射属性都他妈不好用了 搞不懂为什么?
- c++之一个方便的日志库
概述 本文演示环境: win10 + vs2017 日志,我用的很少,通常是用作动态库调试使用. 日志记录下来,基本就没看过,除非模块出现了问题. 使用cmake管理的项目 使用C++封装了C语言读写 ...
- cmake命令行生成32位和64位项目
概述 本文演示环境: win10 + VS2017 1.指定变量值 咱们常用命令[cmake ..]在build目录下配置生成项目和解决方案. 其实,这个命令还有其他用法. 指定CMakeLists. ...
- 【九度OJ】题目1431:Sort 解题报告
[九度OJ]题目1431:Sort 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1431 题目描述: 给你n个 ...
- 3942 - Remember the Word
3942 - Remember the Word 思路:字典树+dp dp[i]前i个字符,能由给的字串组成的方案数,那么dp[i] = sum(dp[i-k]);那么只要只要在字典树中查看是否有字串 ...
- 1065 - Number Sequence &&1070 - Algebraic Problem
1065 - Number Sequence PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB ...
- 手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏01游戏窗口
项目源码 项目源码 游戏配置信息类 Config.java 没什么解释的. package config; public class Config { public final static Stri ...
- libecc:一个可移植的椭圆曲线密码学库
libecc:一个可移植的椭圆曲线密码学库 这段时间要写毕设关于椭圆曲线的部分,就参考了一个椭圆曲线库的代码来编写.这个库中的代码的结构.风格和封装在我看来是十分完善的.用起来也比较方便,当作一个密码 ...
- Causal Inference
目录 Standardization 非参数情况 Censoring 参数模型 Time-varying 静态 IP weighting 无参数 Censoring 参数模型 censoring 条件 ...