struct 与 TDengine 表进行映射相关操作
Go to file
2024-09-18 17:08:16 +08:00
.gitignore feat: 完成批量插入的SQL生成功能 2024-09-14 13:12:52 +08:00
go.mod fix: 修复 go mod 模块名 2024-09-14 15:43:43 +08:00
go.sum feat: 新增 ScanRows 接口 2024-09-18 17:08:16 +08:00
insert_build.go feat: 新增 ScanRows 接口 2024-09-18 17:08:16 +08:00
mapping_test.go feat: 新增 ScanRows 接口 2024-09-18 17:08:16 +08:00
mapping.go feat: 新增 ScanRows 接口 2024-09-18 17:08:16 +08:00
README.md feat: 新增 ScanRows 接口 2024-09-18 17:08:16 +08:00
scan.go feat: 新增 ScanRows 接口 2024-09-18 17:08:16 +08:00
sync_map_test.go feat: 新增 ScanRows 接口 2024-09-18 17:08:16 +08:00
sync_map.go feat: 新增 ScanRows 接口 2024-09-18 17:08:16 +08:00
types.go feat: 新增 ScanRows 接口 2024-09-18 17:08:16 +08:00

tdengine-mapper-go

Golang 的 struct 与 TDengine 表进行映射

struct 标签

db   : 表的列名, 值为 "" 或 "-" 表示忽略
taos : taos的标签目前只有 [tag], 表示当前是 超级表的 TAG 字段

struct 接口

type SuperTableNamer interface {
	SuperTableName() string // 获取超级表的表名 可选
}


type TableNamer interface {
	TableName() string // 当前表的表名
}

TableNamer 是必须要实现的接口

SuperTableName 是可选实现的,如果没有 实现,就会当普通表进行处理

批量插入 -- 示例


type User struct {
	Name string `db:"name" taos:"tag"`
	Age  int    `db:"age"`
}

func (u *User) TableName() string {
	return "user_" + u.Name
}

func (u *User) SuperTableName() string {
	return "super_user"
}

func TestSimpleInsert(t *testing.T) {
	tdMapper := NewMapper()
	data := []any{
		&User{Name: "张三", Age: 18},
		&User{Name: "李四", Age: 20},
	}
	insertSql, err := tdMapper.ToInsertSQL(data...)
	if err != nil {
		t.Fatal(err)
	}
	fmt.Println(insertSql)
}

------------------------------------------------------
INSERT INTO 
`user_张三` USING `super_user` (`name`) TAGS ('张三') (`age`) VALUES (18) 
`user_李四` USING `super_user` (`name`) TAGS ('李四') (`age`) VALUES (20) 

查询映射 -- 示例

func QueryOne(db *sql.DB) (*User,error){
    tdMapper := NewMapper()

    rows,err:=db.Query("select * from User limit 100")
    if err!=nil {
    	return err
    }
    def rows.Close()

    var user User
    if err:=ScanRows(&user,rows);err!=nil {
    	return err
    }
    return &user, nil
}

// 如果查询结果数量为0则返回 sql.ErrNoRows
// var ErrNoRows = errors.New("sql: no rows in result set")
func QueryAll(db *sql.DB)([]*User, error) {
    tdMapper := NewMapper()
    
    rows,err:=db.Query("select * from User limit 100")
    if err!=nil {
    	return err
    }
    def rows.Close()

    var users []*User
    if err:=ScanRows(&users,rows);err!=nil {
    	return err
    }
    return &users, nil
}