安装 ent 包
go install entgo.io/ent/cmd/ent@latest
生成初始化代码
在项目根目录创建目录:ent/schema
在schema目录创建空表代码文件 DrData.go:
type DrData struct { ent.Schema } // Fields of the Data. func (DrData) Fields() []ent.Field { return nil } // Edges of the Data. func (DrData) Edges() []ent.Edge { return nil }
在 ent 目录创建生成器的规则文件 generate.go:
package ent //go:generate go run -mod=mod entgo.io/ent/cmd/ent generate ./schema
执行命令生成初始化文件:
go generate ./ent
执行成功后,ent 目录会有一坨文件
完善表格字段
type DrData struct { ent.Schema } // Fields of the Data. func (DrData) Fields() []ent.Field { return []ent.Field{ field.Int("id").Unique().Comment(""), field.String("date").Default(carbon.Now().ToShortDateString()).Comment("日期"), field.String("platform").Default("").Comment("平台名称"), field.String("tagid").Default("").Comment("媒体广告位ID"), field.String("ad_type").Default("").Comment("广告位类型"), field.Int("total_num").Default(0).Comment("总数量"), } } // Edges of the Data. func (DrData) Edges() []ent.Edge { return nil }
每次修改表格字段,需要运行指令:
go generate ./ent
重新生成文件
创建连接池
注意需要引包:_ "github.com/go-sql-driver/mysql"
var DeviceRiskClient *ent.Client func MysqlDeviceRiskInit() { createConnectionPool() } func createConnectionPool() { URL := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=true", config.Config.MysqlDeviceRisk.User, config.Config.MysqlDeviceRisk.Password, config.Config.MysqlDeviceRisk.Host, config.Config.MysqlDeviceRisk.Port, config.Config.MysqlDeviceRisk.Database) drv, err := sql.Open("mysql", URL) if err != nil { logrus.Error("MysqlDeviceRiskClient create error") os.Exit(0) return } db := drv.DB() // 最大连接数 db.SetMaxOpenConns(config.Config.MysqlDeviceRisk.MaxConns) // 空闲连接数 db.SetMaxIdleConns(config.Config.MysqlDeviceRisk.IdleConns) DeviceRiskClient = ent.NewClient(ent.Driver(drv)) }
CURD使用
插入数据:
ctx := context.Background() _, err := DeviceRiskClient.DrData.Create(). SetDate(carbon.Now().ToShortDateString()). SetPlatform("abc"). SetTagid("abc"). SetAdType("abc"). SetTotalNum(1). Save(ctx) if err != nil { logrus.Error(err) }
查询
ctx := context.Background() data, err := DeviceRiskClient.DrData.Query().Where( drdata.Platform("wax"), drdata.Tagid("123"), ).All(ctx) if err != nil { fmt.Println(err) return } res, _ := json.Marshal(data) fmt.Println(string(res))
更新
ctx := context.Background() _, err := DeviceRiskClient.DrData.Update(). AddTotalNum(1). Where( drdata.Platform("abc"), drdata.Tagid("123"), ).Save(ctx) if err != nil { logrus.Error(err) }
删除
没写,自己测试吧!^_^