gorm gen 的用法

作者: adm 分类: go 发布时间: 2025-04-24

第一步

dsn := "root:ServBay.dev@tcp(127.0.0.1:3306)/nodeadmin?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}

	fmt.Println("connect database success", db)

第二步

g := gen.NewGenerator(gen.Config{
		OutPath:      "./query",  //生成query路径
		ModelPkgPath: "./model",  //生产模型路径
		Mode:         gen.WithoutContext | gen.WithDefaultQuery | gen.WithQueryInterface, // generate mode
	})

	g.UseDB(db) // reuse your gorm db

	allModels := g.GenerateAllTable()
	// 为所有生成的模型应用接口
	for _, model := range allModels {
		g.ApplyInterface(func(Querier) {}, model)
	}
	// Generate basic type-safe DAO API for struct `model.User` following conventions
	//g.ApplyBasic(model.LaUser{})

	// Generate Type Safe API with Dynamic SQL defined on Querier interface for `model.User` and `model.Company`
	//g.ApplyInterface(func(Querier) {}, model.LaUser{})

	// Generate the code
	g.Execute()

第三步

// 设置默认数据库连接
	query.SetDefault(db)
	//ctx := context.Background()
	user, err := query.LaUser.Where(query.LaUser.Username.Eq("asd")).First()
	fmt.Println(user, err)
	users, err := query.LaUser.FilterWithNameAndRole("asd", "")
	fmt.Println(users, err)

动态查询

type Querier interface {
	// SELECT * FROM @@table WHERE username = @username{{if sn !=""}} AND sn = @sn{{end}}
	FilterWithNameAndRole(username, sn string) ([]gen.T, error)
}

users, err := query.LaUser.FilterWithNameAndRole("asd", "")
	fmt.Println(users, err)

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!