golang ent 建立 MySQL 连接池

Jackey Golang 764 次浏览 , , 没有评论

安装 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)
}

删除

没写,自己测试吧!^_^

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Go