sqldb是一个用 Go 编写的,使用泛型以及反射简化数据库模型(Model)操作的库。 其利用泛型定义了一组在业务代码操作数据库模型时常用的方法:
type Model[T any] interface { Columns() T Create(ctx context.Context, entity *T) error Get(ctx context.Context, opts []OpQueryOption) (*T, error) List(ctx context.Context, opts ListOptions) ([]*T, uint64, error) Update(ctx context.Context, query FilterOptions, opts []UpdateOption) (uint64, error) Delete(ctx context.Context, opts FilterOptions) error }
其中Columns()
方法被用来获取模型各字段在数据库中的列名。 sqldb 同时使用Gorm库提供了对上述接口的一个实现。
type User struct { ID sqldb.Column[uint64] `gorm:"column:id;primaryKey"` Name sqldb.Column[string] `gorm:"column:user_name"` Age sqldb.Column[*int] CreatedAt sqldb.Column[time.Time] DeletedAt sqldb.Column[gorm.DeletedAt] }
利用泛型结构Column
对模型各字段进行定义。
import ( "context" "github.com/YLonely/sqldb" sqlgorm "github.com/YLonely/sqldb/gorm" ) func main(){ // 使用 gorm 打开并连接数据库 dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil{ panic(err) } // 初始化模型 var Users sqldb.Model[User] = sqlgorm.NewModel[User](db) ctx := context.Background() // 创建 User 实例 age := 10 u := &User{ Name: sqldb.NewColumn("test"), Age: sqldb.NewColumn(&age), } _ = Users.Create(ctx, u) // 使用 Get 方法获取 User 实例 u, err := Users.Get(ctx, []sqldb.OpQueryOption{ { // 使用 Columns().Name 引用 User 模型的 Name 字段 Column: Users.Columns().Name Op: OpEq, Value: "test", }, // 或者可以使用预定义的构造方法 sqldb.NewEqualOption(Users.Columns().Name, "test") }) }
1 YuuuuuuH 2022-11-23 23:21:24 +08:00 牛逼, 已 star |