FLY
One easy-to-use go db library 简体中文, Document
- data hook, Easy transition db data
- sql builder, Not need handwritten SQL
- hasOne/hasMany, Convenient get linked data
- validator, Flexible verification policies
- extensible, Easy extend custom hook/sql/validator
- cacheEnable, Support for custom cache implementations
usages
more example please check out model_test.go
package main
import (
"fmt"
"github.com/daodao97/fly"
_ "github.com/go-sql-driver/mysql"
)
func init() {
err := fly.Init(map[string]*fly.Config{
"default": {DSN: "[email protected](127.0.0.1:3306)/fly_test?&parseTime=true"},
})
if err != nil {
panic(err)
}
}
func main() {
m := fly.New(
"user",
fly.ColumnHook(fly.CommaInt("role_id"), fly.Json("profile")),
)
var err error
_, err = m.Insert(map[string]interface{}{
"name": "Seiya",
"profile": map[string]interface{}{
"hobby": "Pegasus Ryuseiken",
},
})
var result []*User
err = m.Select(fly.WhereGt("id", 1)).Binding(&result)
var result1 *User
err = m.SelectOne(fly.WhereEq("id", 1)).Binding(&result1)
count, err := m.Count()
fmt.Println("count", count)
_, err = m.Update(User{
ID: 1,
Name: "星矢",
Profile: &Profile{
Hobby: "天马流行拳",
},
RoleIds: []int{2, 3},
})
_, err = m.Delete(fly.WhereEq("id", 1))
fmt.Println(err)
}
type User struct {
ID int64 `db:"id"`
Name string `db:"name"`
Status int64 `db:"status"`
Profile *Profile `db:"profile"`
IsDeleted int `db:"is_deleted"`
RoleIds []int `db:"role_ids"`
Score int `db:"score"`
}
type Profile struct {
Hobby string `json:"hobby"`
}
change model to Model
so you can add this in global and init late
NewClient allow create master/slave instance: