# godbal **Repository Path**: xujiajun/godbal ## Basic Information - **Project Name**: godbal - **Description**: Database Abstraction Layer (dbal) for go. Support SQL builder and get result easily (now only support mysql) - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-05-28 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # godbal [![GoDoc](https://godoc.org/github.com/xujiajun/godbal/driver/mysql?status.svg)](https://godoc.org/github.com/xujiajun/godbal/driver/mysql) [![GoDoc](https://godoc.org/github.com/xujiajun/godbal?status.svg)](https://godoc.org/github.com/xujiajun/godbal) [![Go Report Card](https://goreportcard.com/badge/github.com/xujiajun/godbal)](https://goreportcard.com/report/github.com/xujiajun/godbal) Build Status [![Coverage Status](https://coveralls.io/repos/github/xujiajun/godbal/badge.svg?branch=master)](https://coveralls.io/github/xujiajun/godbal?branch=master) [![License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://raw.githubusercontent.com/xujiajun/godbal/master/LICENSE) Database Abstraction Layer (dbal) for go (now only support mysql) ## Motivation I wanted a DBAL that ***No ORM***、***No Reflect***、***Concurrency Save***, support ***SQL builder*** following good practices and well tested code. ## Requirements Go 1.7 or above. ## Installation ``` go get github.com/xujiajun/godbal ``` ## Supported Databases * mysql ## Getting Started Godbal helps you build SQL queries from composable parts easily: ``` database, _ := godbal.NewMysql("root:123@tcp(127.0.0.1:3306)/test?charset=utf8").Open() queryBuilder := mysql.NewQueryBuilder(database) sql := queryBuilder.Select("uid,username,price,flag").From("userinfo", "").SetFirstResult(0). SetMaxResults(3).OrderBy("uid", "DESC").GetSQL() fmt.Println(sql) ``` Output: ``` SELECT uid,username,price,flag FROM userinfo ORDER BY uid DESC LIMIT 0,3 ``` Godbal helps you get result easily: ``` rows, _ := queryBuilder.QueryAndGetMap() jsonString, _ := json.Marshal(&rows) fmt.Print(string(jsonString)) ``` Output like: ``` {"0":{"flag":"1","price":"111.00","uid":"6","username":"johnny2"},"1":{"flag":"1","price":"111.00","uid":"5","username":"johnny2"},"2":{"flag":"0","price":"123.99","uid":"4","username":"joe"}} ``` ### Full example: ``` package main import ( "encoding/json" "fmt" _ "github.com/go-sql-driver/mysql" "github.com/xujiajun/godbal" "github.com/xujiajun/godbal/driver/mysql" ) func main() { database, err := godbal.NewMysql("root:123@tcp(127.0.0.1:3306)/test?charset=utf8").Open() if err != nil { panic(err) } err = database.Ping() if err != nil { panic(err) } queryBuilder := mysql.NewQueryBuilder(database) sql := queryBuilder.Select("uid,username,price,flag").From("userinfo", "").SetFirstResult(0). SetMaxResults(3).OrderBy("uid", "DESC").GetSQL() fmt.Println(sql) // SELECT uid,username,price,flag FROM userinfo ORDER BY uid DESC LIMIT 0,3 rows, _ := queryBuilder.QueryAndGetMap() jsonString, _ := json.Marshal(&rows) fmt.Print(string(jsonString)) // result like: {"0":{"flag":"1","price":"111.00","uid":"6","username":"johnny2"},"1":{"flag":"1","price":"111.00","uid":"5","username":"johnny2"},"2":{"flag":"0","price":"123.99","uid":"4","username":"joe"}} } ``` ## More examples * [select](https://github.com/xujiajun/godbal/blob/master/examples/select/main.go) * [insert](https://github.com/xujiajun/godbal/blob/master/examples/insert/main.go) * [delete](https://github.com/xujiajun/godbal/blob/master/examples/delete/main.go) * [update](https://github.com/xujiajun/godbal/blob/master/examples/update/main.go) * [join](https://github.com/xujiajun/godbal/blob/master/examples/join/main.go) * [transaction](https://github.com/xujiajun/godbal/blob/master/examples/transaction/main.go) ## Contributing If you'd like to help out with the project. You can put up a Pull Request. ## Author * [xujiajun](https://github.com/xujiajun) ## License The godbal is open-sourced software licensed under the [MIT Licensed](http://www.opensource.org/licenses/MIT)