tdengine-mapper-go/README.md

115 lines
2.0 KiB
Markdown
Raw Permalink Normal View History

2024-09-14 11:41:02 +08:00
# tdengine-mapper-go
> Golang 的 struct 与 TDengine 表进行映射
### struct 标签
```
db : 表的列名, 值为 "" 或 "-" 表示忽略
taos : taos的标签目前只有 [tag], 表示当前是 超级表的 TAG 字段
```
### struct 接口
```go
type SuperTableNamer interface {
SuperTableName() string // 获取超级表的表名 可选
}
type TableNamer interface {
TableName() string // 当前表的表名
}
```
`TableNamer` 是必须要实现的接口
`SuperTableName` 是可选实现的,如果没有 实现,就会当普通表进行处理
2024-09-18 16:51:30 +08:00
### 批量插入 -- 示例
```go
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) {
2024-09-18 16:51:30 +08:00
tdMapper := NewMapper()
data := []any{
&User{Name: "张三", Age: 18},
&User{Name: "李四", Age: 20},
}
2024-09-18 16:51:30 +08:00
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)
```
2024-09-18 16:51:30 +08:00
### 查询映射 -- 示例
```go
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
}
```