GitPedia

Godbal

Database Abstraction Layer (dbal) for Go. Support SQL builder and get result easily (now only support mysql)

From xujiajun·Updated May 13, 2026·View on GitHub·

Database Abstraction Layer (dbal) for go (now only support mysql) The project is written primarily in Go, distributed under the MIT License license, first published in 2018. Key topics include: dbal, golang, mysql, sqlbuilder.

Latest release: v1.0.0Suport SQL builder and get result easily
April 15, 2018View Changelog →

godbal GoDoc GoDoc Go Report Card <a href="https://travis-ci.org/xujiajun/godbal"><img src="https://travis-ci.org/xujiajun/godbal.svg?branch=master" alt="Build Status"></a> Coverage Status License Awesome

Database Abstraction Layer (dbal) for go (now only support mysql)

Motivation

I wanted a DBAL that No ORMNo ReflectConcurrency 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

Contributing

If you'd like to help out with the project. You can put up a Pull Request.

Author

License

The godbal is open-sourced software licensed under the MIT Licensed

Contributors

Showing top 1 contributor by commit count.

View all contributors on GitHub →

This article is auto-generated from xujiajun/godbal via the GitHub API.Last fetched: 6/25/2026