安装 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)
}
删除
没写,自己测试吧!^_^