一个辅助操作数据库的go lib[from滴滴]

github地址: gendry

gendry是一个非常简单易用的sql builder,比如构建sql语句:

where := map[string]interface{}{
    "city in": []interface{}{"beijing", "shanghai"},
    "score": 5,
    "age >": 35,
    "_orderby": "bonus desc",
    "_grouoby": "department",
}
table := "some_table"
selectFields := []string{"name", "age", "sex"}
cond, values, err := builder.BuildSelect(table, where, selectFields)
rows,err := db.Query(cond, vals...) // db: *sql.DB
//cond = SELECT name,age,sex FROM g_xxx WHERE (city IN (?,?) AND score=? AND age>?) GROUP BY department ORDER BY bonus DESC
//values = []interface{}{"beijing", "shanghai", 5, 35}

读取返回:

type Person struct {
    Name string `json:"name"`
    Age int `json:"m_age"`
}

rows,err := db.Query("SELECT age as m_age,name from g_xxx where xxx")
defer rows.Close()

var students []Person

scanner.Scan(rows, &students)

gendry最开始是我在滴滴的一个对外接口服务中使用,经过一年多的迭代和多个线上系统大流量的验证,已经非常稳定了。gendry的一个显著特点是非侵入性,只要你的项目目前使用的是标准库,那你就可以无痛添加gendry,大多数时候它就是一个helper函数。如果你不想用,一行代码就可以去掉,不会像orm一样牵一发动全身。gendry还提供了一个cli工具可以根据数据库表结构自动生成该表对应的结构体和对该表的增删改查的dao层代码。

gendry是个很简单的lib,期待大家的使用和意见,热烈欢迎各种pr

这里简要地写了一下我们为什么会开发这个lib: https://github.com/didi/gendry/wiki" title="为什么开发gendry">为什么开发gendry

0 个评论

要回复文章请先登录注册