QueryBuilder Constructs Complicate Query

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:

  1. // User is a wrapper for result row in this example
  2. type User struct {
  3. Name string
  4. Age int
  5. }
  6. var users []User
  7. // Get a QueryBuilder object. Takes DB driver name as parameter
  8. // Second return value is error, ignored here
  9. qb, _ := orm.NewQueryBuilder("mysql")
  10. // Construct query object
  11. qb.Select("user.name",
  12. "profile.age").
  13. From("user").
  14. InnerJoin("profile").On("user.id_user = profile.fk_user").
  15. Where("age > ?").
  16. OrderBy("name").Desc().
  17. Limit(10).Offset(0)
  18. // export raw query string from QueryBuilder object
  19. sql := qb.String()
  20. // execute the raw query string
  21. o := orm.NewOrm()
  22. o.Raw(sql, 20).QueryRows(&users)

Full API interface:

  1. type QueryBuilder interface {
  2. Select(fields ...string) QueryBuilder
  3. ForUpdate() QueryBuilder
  4. From(tables ...string) QueryBuilder
  5. InnerJoin(table string) QueryBuilder
  6. LeftJoin(table string) QueryBuilder
  7. RightJoin(table string) QueryBuilder
  8. On(cond string) QueryBuilder
  9. Where(cond string) QueryBuilder
  10. And(cond string) QueryBuilder
  11. Or(cond string) QueryBuilder
  12. In(vals ...string) QueryBuilder
  13. OrderBy(fields ...string) QueryBuilder
  14. Asc() QueryBuilder
  15. Desc() QueryBuilder
  16. Limit(limit int) QueryBuilder
  17. Offset(offset int) QueryBuilder
  18. GroupBy(fields ...string) QueryBuilder
  19. Having(cond string) QueryBuilder
  20. Update(tables ...string) QueryBuilder
  21. Set(kv ...string) QueryBuilder
  22. Delete(tables ...string) QueryBuilder
  23. InsertInto(table string, fields ...string) QueryBuilder
  24. Values(vals ...string) QueryBuilder
  25. Subquery(sub string, alias string) string
  26. String() string
  27. }

Now we support Postgress, MySQL and TiDB.