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 ).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會自動識別主鍵條件
listlstdata = new list()
, new
};int v=sqlclient.update("htest01", lstdata).execcommand();
指定更新字段可以用方法only(params string fields)
如果有多個字估請引數only("uname","descript")
sqlclient.update("htest01", new ).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 ).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
也可以是new dictionary
var dicobj = new dictionary, , , , };
sqlclient.update("htest01", dicobj).execcommand();
生成的sql如下(sqlserver為例)
update [dbo].[htest01] set [sid]=123456,[uname]='tansar',[age]=25,[salary]=1999.9 where [sid]=123456
批量字典更新其實與批量匿名類更新使用方式基本一致的
list> lstdata = new list> , , , , },
new dictionary, , , , }
};sqlclient.update("htest01", lstdata).execcommand();
::: tip
實體類的更新與匿名類基本是一致的,這裡就不重複寫了,排除更新和指定更新與匿名類的寫法是一模一樣也不再重複寫樣例
:::關於where 的寫法更多的樣例請參照hisql orm 查詢語句使用教程文件
int v= sqlclient.update("htest01").set(new ).where(new filter }).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 orm 查詢語句使用教程文件
int v = sqlclient.update("htest01").set(new ).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 ).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
MySql 表 建立表 刪除表 修改表
一 建立表 建立表語法 create table table name field1 datatype,field2 datatype,field3 datatype character set 字符集 collate 校驗規則 engine 儲存引擎 預設儲存引擎 mysql create tab...
Hash表(雜湊表 雜湊表)
雜湊函式 乙個把查詢表中的關鍵字對映成該關鍵字對應的位址的函式,記為hash key addr。位址可以是陣列下標,索引,或記憶體位址等 衝突 雜湊函式可能會把兩個和兩個以上的不同關鍵字對映到同一位址。衝突不可避免,所以要設計好的處理衝突的方法。同義詞 發生碰撞的不同關鍵字為同義詞。雜湊表 根據關鍵...
oracle 建立表,刪除表,修改表,查詢表
1,獲取當前使用者下的所有表資訊 select from user tables 1.1,查詢某一張表的字段資訊 select from user tab columns where table name 表名 1.2,查詢某一張表的注釋 select from user tab comments ...