name: Query Builder
sort: 6
Query Builder
QueryBuilder provides an API for convenient and fluent construction of SQL queries. It consists of a set of methods enabling developers to easily construct SQL queries without compromising readability.
It serves as an alternative to ORM. ORM is more for simple CRUD operations, whereas QueryBuilder is for complex queries with subqueries and multi-joins.
Usage example:
// User is a wrapper for result row in this exampletype User struct {Name stringAge int}var users []User// Get a QueryBuilder object. Takes DB driver name as parameter// Second return value is error, ignored hereqb, _ := orm.NewQueryBuilder("mysql")// Construct query objectqb.Select("user.name","profile.age").From("user").InnerJoin("profile").On("user.id_user = profile.fk_user").Where("age > ?").OrderBy("name").Desc().Limit(10).Offset(0)// export raw query string from QueryBuilder objectsql := qb.String()// execute the raw query stringo := orm.NewOrm()o.Raw(sql, 20).QueryRows(&users)
Full API interface:
type QueryBuilder interface {Select(fields ...string) QueryBuilderForUpdate() QueryBuilderFrom(tables ...string) QueryBuilderInnerJoin(table string) QueryBuilderLeftJoin(table string) QueryBuilderRightJoin(table string) QueryBuilderOn(cond string) QueryBuilderWhere(cond string) QueryBuilderAnd(cond string) QueryBuilderOr(cond string) QueryBuilderIn(vals ...string) QueryBuilderOrderBy(fields ...string) QueryBuilderAsc() QueryBuilderDesc() QueryBuilderLimit(limit int) QueryBuilderOffset(offset int) QueryBuilderGroupBy(fields ...string) QueryBuilderHaving(cond string) QueryBuilderUpdate(tables ...string) QueryBuilderSet(kv ...string) QueryBuilderDelete(tables ...string) QueryBuilderInsertInto(table string, fields ...string) QueryBuilderValues(vals ...string) QueryBuilderSubquery(sub string, alias string) stringString() string}
Now we support Postgress, MySQL and TiDB。
