SQLSugar 支持 TDengine 超級表的使用指南
TDengine 是一款高性能、分布式的時序數(shù)據(jù)庫,廣泛應(yīng)用于物聯(lián)網(wǎng)、工業(yè)互聯(lián)網(wǎng)等領(lǐng)域。其核心概念之一是超級表(Super Table),它類似于傳統(tǒng)數(shù)據(jù)庫中的表結(jié)構(gòu)模板,允許用戶通過標(biāo)簽(Tag)動態(tài)創(chuàng)建和管理子表。SQLSugar 作為一款流行的 ORM 框架,提供了對 TDengine 超級表的支持,使得開發(fā)者能夠更方便地操作 TDengine 數(shù)據(jù)庫。
本文將介紹如何使用 SQLSugar 操作 TDengine 的超級表,包括創(chuàng)建超級表、查詢子表、插入數(shù)據(jù)等操作。
1. 創(chuàng)建超級表
在使用 TDengine 的超級表之前,首先需要在數(shù)據(jù)庫中創(chuàng)建超級表。SQLSugar 提供了 CodeFirst 模式,可以通過代碼自動創(chuàng)建表結(jié)構(gòu)。
NUGET安裝
SqlSugar.TDengineCore 最新
SqlSugarCore 最新
創(chuàng)建數(shù)據(jù)庫對象
//程序啟動時加入
InstanceFactory.CustomAssemblies =
new System.Reflection.Assembly[] { typeof(TDengineProvider).Assembly };
//創(chuàng)建 db對象
var db = new SqlSugarClient(new ConnectionConfig()
{
DbType = SqlSugar.DbType.TDengine,
ConnectionString = Config.ConnectionString,
IsAutoCloseConnection = true,
ConfigureExternalServices = new ConfigureExternalServices()
{
EntityService= (property, column) =>
{
if (column.SqlParameterDbType == null)
{
//需要給列加上通用轉(zhuǎn)換,這樣實(shí)體就不需要一個一個轉(zhuǎn)了
column.SqlParameterDbType = typeof(CommonPropertyConvert);
}
}
}
});
// 創(chuàng)建超級表
db.CodeFirst.InitTables<SUsingTagModel>();
在上述代碼中,SUsingTagModel 是一個實(shí)體類,它映射了 TDengine 中的超級表結(jié)構(gòu)。通過 CodeFirst.InitTables 方法,SQLSugar 會自動在 TDengine 中創(chuàng)建對應(yīng)的超級表。
2. 定義超級表實(shí)體類
在 SQLSugar 中,超級表的實(shí)體類需要使用 STableAttribute 來標(biāo)記,并通過 SugarColumn 來定義字段屬性。
[STableAttribute(STableName = "SUsingTagModel", Tag1 = nameof(Tag1))]
public class SUsingTagModel
{
[SqlSugar.SugarColumn(IsPrimaryKey = true)]
public DateTime Ts { get; set; }
public bool Boolean { get; set; }
public string Tag1 { get; set; }
}
-
STableAttribute用于標(biāo)記該類為超級表,STableName指定超級表的名稱,Tag1指定標(biāo)簽字段。 -
SugarColumn用于定義字段屬性,IsPrimaryKey表示該字段為主鍵。
3. 查詢超級表數(shù)據(jù)
SQLSugar 提供了 AsTDengineSTable 方法,用于將查詢操作映射到 TDengine 的超級表。
查詢所有數(shù)據(jù)
var list1 = db.Queryable<SUsingTagModel>().AsTDengineSTable().ToList();
查詢特定子表數(shù)據(jù)
通過 Where 條件可以查詢特定標(biāo)簽的子表數(shù)據(jù)。
// 查詢子表A var tagA = db.Queryable<SUsingTagModel>().AsTDengineSTable().Where(it => it.Tag1 == "a").ToList(); // 查詢子表B var tagB = db.Queryable<SUsingTagModel>().AsTDengineSTable().Where(it => it.Tag1 == "b").ToList();
4. 插入數(shù)據(jù)并動態(tài)創(chuàng)建子表
在插入數(shù)據(jù)時,SQLSugar 支持根據(jù)標(biāo)簽值動態(tài)創(chuàng)建子表。通過 SetTDengineChildTableName 方法,可以指定子表的命名規(guī)則。
db.Insertable(new List<SUsingTagModel>(){
new SUsingTagModel()
{
Boolean = true,
Tag1 = "a",
Ts = DateTime.Now.AddMilliseconds(1)
},
new SUsingTagModel()
{
Boolean = true,
Tag1 = "b",
Ts = DateTime.Now.AddMilliseconds(3)
}
})
.SetTDengineChildTableName((stableName, it) => $"{stableName}_{it.Tag1}")
.ExecuteCommand();
-
SetTDengineChildTableName方法用于指定子表的命名規(guī)則,stableName是超級表的名稱,it是當(dāng)前插入的數(shù)據(jù)對象。 -
ExecuteCommand方法執(zhí)行插入操作,并自動創(chuàng)建子表。
5. 動態(tài)映射超級表名稱
在某些場景下,可能需要動態(tài)修改超級表的名稱。SQLSugar 提供了 MappingSTableName 方法,可以在運(yùn)行時動態(tài)映射超級表名稱。
db.MappingSTableName<SUsingTagModel>("newSName001");
-
MappingSTableName方法用于動態(tài)修改超級表的名稱,替換實(shí)體類中STableAttribute的STableName屬性。
6. 總結(jié)
通過 SQLSugar 對 TDengine 超級表的支持,開發(fā)者可以更方便地操作 TDengine 數(shù)據(jù)庫。本文介紹了如何使用 SQLSugar 創(chuàng)建超級表、查詢子表、插入數(shù)據(jù)以及動態(tài)映射超級表名稱。這些功能使得 SQLSugar 成為處理 TDengine 數(shù)據(jù)的強(qiáng)大工具,尤其適用于物聯(lián)網(wǎng)、工業(yè)互聯(lián)網(wǎng)等時序數(shù)據(jù)處理場景。
在實(shí)際開發(fā)中,開發(fā)者可以根據(jù)業(yè)務(wù)需求靈活運(yùn)用這些功能,提升開發(fā)效率并優(yōu)化數(shù)據(jù)庫操作性能。

浙公網(wǎng)安備 33010602011771號