TDengine 是一款高性能、分布式的时序数据库,广泛应用于物联网、工业互联网等领域。其核心概念之一是超级表(Super Table),它类似于传统数据库中的表结构模板,允许用户通过标签(Tag)动态创建和管理子表。SQLSugar 作为一款流行的 ORM 框架,提供了对 TDengine 超级表的支持,使得开发者能够更方便地操作 TDengine 数据库。

本文将介绍如何使用 SQLSugar 操作 TDengine 的超级表,包括创建超级表、查询子表、插入数据等操作。

1. 创建超级表

在使用 TDengine 的超级表之前,首先需要在数据库中创建超级表。SQLSugar 提供了 CodeFirst 模式,可以通过代码自动创建表结构。

NUGET安装

SqlSugar.TDengineCore 最新
SqlSugarCore  最新

创建数据库对象

//程序启动时加入
InstanceFactory.CustomAssemblies =
new System.Reflection.Assembly[] { typeof(TDengineProvider).Assembly }; //db对象
SqlSugarClient Db= new SqlSugarClient(new ConnectionConfig(){
ConnectionString = "连接符字串",
DbType = DbType.TDengine,
IsAutoCloseConnection = true}); // 创建超级表
db.CodeFirst.InitTables<SUsingTagModel>();

在上述代码中,SUsingTagModel 是一个实体类,它映射了 TDengine 中的超级表结构。通过 CodeFirst.InitTables 方法,SQLSugar 会自动在 TDengine 中创建对应的超级表。

2. 定义超级表实体类

在 SQLSugar 中,超级表的实体类需要使用 STableAttribute 来标记,并通过 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 用于标记该类为超级表,STableName 指定超级表的名称,Tag1 指定标签字段。

  • SugarColumn 用于定义字段属性,IsPrimaryKey 表示该字段为主键。

3. 查询超级表数据

SQLSugar 提供了 AsTDengineSTable 方法,用于将查询操作映射到 TDengine 的超级表。

查询所有数据

var list1 = db.Queryable<SUsingTagModel>().AsTDengineSTable().ToList();

查询特定子表数据

通过 Where 条件可以查询特定标签的子表数据。

// 查询子表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. 插入数据并动态创建子表

在插入数据时,SQLSugar 支持根据标签值动态创建子表。通过 SetTDengineChildTableName 方法,可以指定子表的命名规则。

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 方法用于指定子表的命名规则,stableName 是超级表的名称,it 是当前插入的数据对象。

  • ExecuteCommand 方法执行插入操作,并自动创建子表。

5. 动态映射超级表名称

在某些场景下,可能需要动态修改超级表的名称。SQLSugar 提供了 MappingSTableName 方法,可以在运行时动态映射超级表名称。

db.MappingSTableName<SUsingTagModel>("newSName001");
  • MappingSTableName 方法用于动态修改超级表的名称,替换实体类中 STableAttribute 的 STableName 属性。

6. 总结

通过 SQLSugar 对 TDengine 超级表的支持,开发者可以更方便地操作 TDengine 数据库。本文介绍了如何使用 SQLSugar 创建超级表、查询子表、插入数据以及动态映射超级表名称。这些功能使得 SQLSugar 成为处理 TDengine 数据的强大工具,尤其适用于物联网、工业互联网等时序数据处理场景。

在实际开发中,开发者可以根据业务需求灵活运用这些功能,提升开发效率并优化数据库操作性能。

SQLSugar 支持 TDengine 超级表的使用指南的更多相关文章

  1. TDengine的数据建模?库、表、超级表是什么?怎么用?

    ​欢迎来到物联网的数据世界 在典型的物联网场景中,一般有多种不同类型的采集设备,采集多种不同的物理量,同一种采集设备类型,往往有多个设备分布在不同的地点,系统需对各种采集的数据汇总,进行计算和分析对于 ...

  2. 黄聪:Pjax无刷新跳转页面实现,支持超链接与表单提交

    什么是pjax? 当你点击一个站内的链接的时候,不是做页面跳转,而是只是站内页面刷新.这样的用户体验,比起整个页面都闪一下来说, 好很多. 其中有一个很重要的组成部分, 这些网站的ajax刷新是支持浏 ...

  3. Pjax无刷新跳转页面实现,支持超链接与表单提交

    什么是pjax? 当你点击一个站内的链接的时候,不是做页面跳转,而是只是站内页面刷新.这样的用户体验,比起整个页面都闪一下来说, 好很多. 其中有一个很重要的组成部分, 这些网站的ajax刷新是支持浏 ...

  4. SqlSugar 代码生成 数据库及表

    在实际开发中如何在sqlsugar中通过model生成数据表呢? 废话不说上代码 一.引入sqlsugarcore 二.编写Model代码 先写一个model举例 namespace 用户管理.Mod ...

  5. 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩

    http://heylinux.com/archives/2367.html http://blog.csdn.net/ywh147/article/details/8996022 使用过MySQL的 ...

  6. django admin编辑被外键关联的主表时支持显示字表记录

    假设有模型 class A(models.Model): name = models.CharField() class B(models.Model): name = models.CharFiel ...

  7. spring boot:shardingsphere多数据源,支持未分表的数据源(shardingjdbc 4.1.1)

    一,为什么要给shardingsphere配置多数据源? 1,shardingjdbc默认接管了所有的数据源, 如果我们有多个非分表的库时,则最多只能设置一个为默认数据库, 其他的非分表数据库不能访问 ...

  8. 分享一个自己封装且一直在维护的依赖.net4.5的http异步组包工具类(支持get,post( 表单 ,json, 包含图片等文件的流提交) ,cookie管理,自动跳转,代理IP,https的支持,高并发的配置等等

    1.)Nuget安装: 搜索 ConfigLab.Comp, 安装最新版即可. 2.)组包示例. 2.1)模拟post表单提交并包含普通参数和一个图片文件(基于HttpFileUploadAssist ...

  9. sqlce中不支持sp_rename修改表名

    The sp_rename procedure is not avialable in SQL CE! In Sql Server 2005 Management Studio you have to ...

  10. easui datagrid 行获取后台sql所有数据:支持行chockbox多选,输出选中行任意属性;支持点击表中属性实现跳转;支持分页。

    easyUI datagrid 代码: <table id="tabgrid20170726191838251403" class="easyui-datagrid ...

随机推荐

  1. Lummmax 雷曼克斯 翔龙 X15 专业对讲机常用功能

    Lummmax 雷曼克斯 翔龙 X15 专业对讲机常用功能 工作模式切换 ESC/M 在频率模式 (VFO) 与信道模式之间切换 编辑信道 在频率模式 (VFO) 下,输入目标频率并进行相关设置之后, ...

  2. tar 分卷压缩和解压缩

    示例将 jdk1.8.0_221 文件夹按 98m 进行分卷压缩和解压缩压缩: tar -czvf - jdk1.8.0_221/ |split -b 98m - jdk1.8.0_221.tar.g ...

  3. Qt控件SDK使用示例大全

    文章 链接 01表盘控件-01汽车仪表盘-gaugecar https://qtchina.blog.csdn.net/article/details/120240257 01表盘控件-02圆弧仪表盘 ...

  4. Qt编写可视化大屏电子看板系统16-标准柱状图

    一.前言 标准柱状图是大屏系统中最常用的一种展示数据效果图,提供不同的柱子显示数据值,在QCustomPlot的基础上拓展了顶部显示对应的值,不同的柱子不同的颜色,同时还可以调用内置的触发报警颜色的机 ...

  5. Opencv 中 Mat中元素的值读取方法总结

    1.利用 at 函数读取 (1)单通道图像读取方式 Mat img1 = imread(filename,IMREAD_GRAYSCALE); for( size_t nrow = 0; nrow & ...

  6. Idea中@Autowired 黄色波浪线问题以及注入类显示红色波浪线问题解决

    解决办法: 点开路径:File--->Settings--->Editor--->Inspections--->Spring--->Spring core--->C ...

  7. IM通讯协议专题学习(三):由浅入深,从根上理解Protobuf的编解码原理

    本文由码农的荒岛求生陆小风分享,为了提升阅读体验,进行了较多修订和排版. 1.引言 搞即时通讯IM方面开发的程序员,在谈到通讯层实现时,必然会提到网络编程.那么计算机网络编程中的一个非常基本的问题:到 ...

  8. 《深入理解Mybatis原理》MyBatis配置解析过程

    配置解析主体方法 public Configuration parse() { if (parsed) { throw new BuilderException("Each XMLConfi ...

  9. 在 .NET Core中如何使用 Redis 创建分布式锁

    在 .NET Core WebApi 中使用 Redis 创建分布式锁可以通过 StackExchange.Redis 库来实现.分布式锁用于确保在分布式系统中,同一时间只有一个进程可以执行某段代码. ...

  10. 化繁为简、性能提升 -- 在WPF程序中,使用Freetype库心得

    本人使用WPF开发了一款OFD阅读器,显示字体是阅读器中最重要的功能.处理字体显示有多种方案,几易其稿,最终选用Freetype方案.本文对WPF中如何使用Freetype做简单描述. OFD中有两种 ...