Gen 允許從原始 SQL 產生完全類型安全的慣用語 Go 程式碼,它使用介面的註解,這些介面可以在程式碼產生期間套用至多個模型。
不僅允許共用和重複使用您調整過的 SQL 查詢,也允許共用和重複使用 SQL 片段,讓我們舉個例子
原始 SQL
type Querier interface { // SELECT * FROM @@table WHERE id=@id GetByID(id int) (gen.T, error) // GetByID query data by id and return it as *struct*
// GetByRoles query data by roles and return it as *slice of pointer* // (The below blank line is required to comment for the generated method) // // SELECT * FROM @@table WHERE role IN @rolesName GetByRoles(rolesName ...string) ([]*gen.T, error)
// InsertValue insert value // // INSERT INTO @@table (name, age) VALUES (@name, @age) InsertValue(name string, age int) error }
g := gen.NewGenerator(gen.Config{ // ... some config })
// Apply the interface to existing `User` and generated `Employee` g.ApplyInterface(func(Querier) {}, model.User{}, g.GenerateModel("employee"))
type Querier interface { // FindByNameAndAge query data by name and age and return it as map // // where("name=@name AND age=@age") FindByNameAndAge(name string, age int) (gen.M, error) }
g := gen.NewGenerator(gen.Config{ // ... some config })
// Apply the interface to existing `User` and generated `Employee` g.ApplyInterface(func(Querier) {}, model.User{}, g.GenerateModel("employee"))