一個輔助運算元據庫的go lib[from滴滴]

caibirdme發表於2018-01-17

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

相關文章